关于Docker的15个提示
                 jopen
                 12年前
            
                    - 得到最后执行的容器的ID - $ ID=$(docker run ubuntu echo hello world) hello world $ docker commit $ID helloword - 如果这样觉得麻烦,你可以这样: - $ alias dl='docker ps -l -q' $ docker run ubuntu echo hello word hello world $ dl 1904cf045887 $ docker commit `dl` helloworld fd08a884dc79 
- 尝试在shell制作Docker镜像 - $ docker run -i -t ubuntu bash root@db0c3978af8:/# apt-get install postgresql root@db0c3978af8:/# exit $ docker commit -run='{"Cmd":["postgres","-too -many -opts"]}' `dl` postgres 507611232efc0
- 去除sudo - # 添加docker组 $ sudo groupadd docker # 将自己添加到组中 $ sudo gpasswd -a myusername docker # 重启Docker守护进程 $ sudo service docker restart # 退出,再登录 $ exit 
- 删除所有已经停止的容器 - $ docker rm $(docker ps -a -q) 
- 转化docker inspect输出 - $ docker inspect `dl` | grep IPAddress | cut -d '"' -f 4 172.17.0.52 $ docker inspect `dl1` | jq -r '.[0].NetworkSettings.IPAddress' 172.17.0.52 
- 查看镜像内的环境变量有哪些 - $ docker run ubuntu env HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin container=lxc HOSTNAME=5e150b7fef22 
- RUN 与 CMD的区别 - FROM ubuntu # 执行docker build时会执行下面这些: RUN apt-get update RUN apt-get install softwres # 执行docker run时会执行默认执行: CMD ["softwares"] 
- CMD 与ENTRYPOINT的区别 - $ cat Dockerfile FROM ubuntu CMD ["echo"] $ coker run imagename echo hello hello $ cat Dockerfile FROM ubuntu ENTRYPOINT ["echo"] $ coker run imagename echo hello echo hello 
- 查看Docker容器的IP - $ ip -4 -o addr show eth0 2: eth0 inet 10.108.1.107/24 brd 10.108.1.255 scope global eth0 $ docker run ubuntu ip -4 -o addr show eth0 83: eth0 inet 172.17.0.4/16 scope global eth0 
- Docker构架:薄CLI客户端,建立在UNIX socket上的提供REST服务的守护进程 - #像HTTP客户端一样连接并使用UNIX socket $ nc -U //var/run/docker.sock GET /images/json HTTP/1.1 - 注:我执行这条命令,没见反应。不知道为什么。 
- 以图像的方式查看你的镜像的依赖 - $ docker images -viz | dot -Tpng -o docker.png $ python -m SimpleHTTPServer #打开浏览器 # http://machinename:8000/docker.png - 注:个人不是很明白这里 
- Docker的东西到底存在哪里? - $ sudo su # cd /var/lib/docker # ls -F containers/ graph/ repositories volumes/ - graph下存的是镜像,而文件系统存在 - graph/imagesid/layer
- Docker源码 - commands.go 
 负责命令行客户端- api.go 
 REST API路由- server.go 
 一个REST API的实现- buildfile.go 
 Dockerfile的解析器
- 不要在你的Dockerfile中的RUN指令中执行守护进程 - $ cat Dockerfile FROM ubuntu:12.04 MAINTAINER Brian Morearty .. RUN pg_ctl start ... $ docker run -i -t postgresimage bash root@4432fe2dd3:/# ps aux # Doesn't show postgres daemon - 注:事实上,可以这样执行 - RUN pg_ctl start &
- 容器之间的通信 - # 执行一个容器,并分配一个名字给它 $ docker run -d -name loldb loldbimage # 执行第二个容器,并连接上第一个容器,同时使用别名 $ docker run -link /loldb:cheez otherimage env CHEEZ_PORT=tcp://172.17.0.8:6379 CHEEZ_PORT_1337_TCP=tcp://172.17.0.8:6379 CHEEZ_PORT_1337_TCP_ADDR=172.17.0.12 CHEEZ_PORT_1337_TCP_PORT=6379 CHEEZ_PORT_1337_TCP_PROTO=tcp - 注:我不是很明白显示的那些env是什么意思。 
 
 
 
 原文地址:http://sssslide.com/speakerdeck.com/bmorearty/15-docker-tips-in-5-minutes