熊立
|
1.apt-get 源更新
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 $ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker 2.docker 开机自启动$ sudo update-rc.d -f docker.io defaults 重新启动 docker $ sudo service docker restart 3.查看版本# docker version Client version: 1.3.0 Client API version: 1.15 Go version (client): go1.3.3 Git commit (client): c78088f OS/Arch (client): linux/amd64 Server version: 1.3.0 Server API version: 1.15 Go version (server): go1.3.3 Git commit (server): c78088f 4.docker安装镜像ubuntu: # sudo docker pull ubuntu 5.docker 查看镜像# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest 5506de2b643b 4 days ago 199.3 MB 6.docker 启动容器交互式应用: # docker run -i -t ubuntu /bin/bash root@ca4ef558f46e:/# cat /etc/issue Ubuntu 14.04.1 LTS \n \l 交互方式是为了做好服务器容器而定制的,所有的环境在这里面做 容器的唯一标识符是,这个需要记录 # hostname ca4ef558f46e 非交互式应用: # sudo docker run -d -p 10001:22 --name xiongli_app_v1 ubuntu /bin/bash d394406a56ba651eb8806e04a8c8ccad968c065b05aac5366365514176358669 查看启动的容器,其中 STATUS 是查看容器是否在线 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca4ef558f46e ubuntu:latest "/bin/bash" 3 minutes ago Up 3 minutes happy_perlman d394406a56ba ubuntu:latest "/bin/bash" 8 minutes ago Exited (0) 8 minutes ago xiongli_app_v1 7.定制 openssh 镜像在之前的 ca4ef558f46e 标识符做定制,并且生成images # apt-get update # apt-get install openssh-server sudo -y root@ca4ef558f46e:/# sudo /etc/init.d/ssh start * Starting OpenBSD Secure Shell server sshd [ OK ] root@ca4ef558f46e:/# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 可以在主机通过ssh连接下面的这个ip:172.17.0.3 (这个ip只能在本主机连接,其他局域网的电脑无法连接) root@ca4ef558f46e:/# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 6: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff inet 172.17.0.3/16 scope global eth0 inet6 fe80::42:acff:fe11:3/64 scope link valid_lft forever preferred_lft forever 需要给ssh新建一个用户,公远程连接,其他业务的根据情况建立 ca4ef558f46e# groupadd admin ca4ef558f46e# useradd -g admin admin ca4ef558f46e# echo 'admin:admin' | chpasswd ca4ef558f46e# vi /etc/sudoers admin ALL=(ALL) ALL 定制 images 退出 ca4ef558f46e root@ca4ef558f46e:/# exit exit 查看状态,从容器id和状态 status 可以看出已经退出了,最好是以容器id来查看,这样不会出错 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca4ef558f46e ubuntu:latest "/bin/bash" 30 minutes ago Exited (0) 18 seconds ago happy_perlman 提交到 ubuntu/ssh (和git命令很像) # sudo docker commit ca4ef558f46e ubuntu/ssh a77c510fe2bb786806e6473694662f0440564d9d99b54e57b11f0c8827efa9b5 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu/ssh latest a77c510fe2bb 5 seconds ago 261.7 MB ubuntu latest 5506de2b643b 4 days ago 199.3 MB 8.启动定制的 images由于这个 ssh 进程启动之后立刻退出了,所以看不到端口映射情况 # sudo docker run -d -p 10001:22 --name xiongli_app_v1.0 ubuntu/ssh /etc/init.d/ssh start 这里提供一个通用的命令,比如把应用用 shell 脚本写在文件 /opt/bootstrap.sh (注意执行权限) 里,启动命令变成 # sudo docker run -d -p 10001:22 --name xiongli_app_v1.0 ubuntu/ssh /opt/bootstrap.sh 9.迭代开发基于先前的 ubuntu/ssh 镜像,迭代开发一般是在交互式的方式下进行应用部署,也可以通过ssh远程连接到容器进行开发之后,然后在制定新的images,完成服务和应用的定制,以安装 nginx 为例,当然python应用也可以这样做。 交互方式会新建一个容器id,和之前的 ubuntu 镜像启动一样,这个ssh可以看成是在ubuntu基础上进行的迭代 # sudo docker run -t -i ubuntu/ssh /bin/bash 这里选择 apt-get 安装,也可以选择源码编译,源码编译安装可以参考这个连接下的一篇文章,和这个类似,http://www.docker.org.cn/thread/13.html root@a96987b21552:/# apt-get install nginx root@a96987b21552:/# /etc/init.d/ssh start root@a96987b21552:/# /etc/init.d/nginx start # ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* 启动了,可以通过本地ip来访问测试,这里做一个守护脚本,记得ssh用户、nginx启动和文件权限 # vi /opt/bootstrap.sh #!/bin/bash # author: xiongli # Email: xionglihdfs@163.com PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo "welcome to ubuntu/nginx" echo "" echo "ssh info: " echo "the ssh connect username is admin." echo "the password of admin is admin." echo "the admin has sudo su privileges, so it is super admin." echo "" echo "nginx web info: " echo "the username of cacti web is 'admin'." echo "the password of admin is 'admin'." echo "the host template of general linux is 'General Linux'." echo "" echo "" echo "the start ssh command is 'docker run -d -p 10002:22 -p10080:80 --name nginx ubuntu/nginx /opt/bootstrap.sh'." echo "the start ssh + apache + cacti + nagios command is 'docker run -d -p 10002:22 -p 10080:80 --name nginx ubuntu/nginx /opt/bootstrap.sh'." echo "and so on." echo "" # start ssh /etc/init.d/ssh start # nginx start /etc/init.d/nginx start sleep 99999999999999999999999999999999999999999999999999999 sleep 99999999999999999999999999999999999999999999999999999 sleep 99999999999999999999999999999999999999999999999999999 弄好之后,退出并且提交一下images # exit # sudo docker commit a96987b21552 ubuntu/nginx 0f054ed6e58e44b43bc45d0770f3c990104d91b9b3c1027b9b169c14838fe96a # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu/nginx latest 0f054ed6e58e 32 seconds ago 277.4 MB 可以看到迭代的开发镜像了,以分交互方式启动: # sudo docker run -d -p 10002:22 -p 10080:80 --name nginx ubuntu/nginx /opt/bootstrap.sh 7dad54ebb431a0fff47c1bdb18b6e68fc73c97826d70ccb660699ed98c7a5e90 这些端口选择标准为主机没有被占用的端口即可,冒号前是主机端口,冒号之后是容器程序端口,为了不和其他镜像的端口冲突,请记录这些信息 查看状态 root@uctest:/home/xiongli# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7dad54ebb431 ubuntu/nginx:latest "/opt/bootstrap.sh" 30 seconds ago Up 29 seconds 0.0.0.0:10002->22/tcp, 0.0.0.0:10080->80/tcp nginx 现在可以通过 ssh 端口 10002 和 web 端口 10080 访问容器的应用了,其他应用类似 测试成功(本机上) root@uctest:/home/xiongli# curl -v 127.0.0.1:10080 * Rebuilt URL to: 127.0.0.1:10080/ * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to 127.0.0.1 (127.0.0.1) port 10080 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.35.0 > Host: 127.0.0.1:10080 > Accept: */* > < HTTP/1.1 200 OK * Server nginx/1.4.6 (Ubuntu) is not blacklisted < Server: nginx/1.4.6 (Ubuntu) < Date: Tue, 28 Oct 2014 05:33:26 GMT < Content-Type: text/html < Content-Length: 612 < Last-Modified: Tue, 04 Mar 2014 11:46:45 GMT < Connection: keep-alive < ETag: "5315bd25-264" < Accept-Ranges: bytes < <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> * Connection #0 to host 127.0.0.1 left intact 10.docker维护命令docker 维护很简单,分为停止正在运行的容器,启动容器,删除已经停止的容器和删除images镜像 查看正在运行的容器,用容器ID和容器名称状态来确定容器的停止 $ sudo docker ps -a $ sudo docker stop 容器ID 启动 $ sudo docker start 容器ID 删除停止的 容器ID,这个删除为不可逆操作 $ sudo docker rm 容器ID 删除 images,这个删除为不可逆操作 $ sudo docker rmi IMAGE ID |
徐笑笑
|
在更新源时,执行 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9后,出现
keyserver.ubuntu.com: Host not found
以上错误信息。不知该怎么解决?
|