关于Docker的15个提示

  1. 得到最后执行的容器的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
    
  2. 尝试在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
    
  3. 去除sudo

     # 添加docker组
     $ sudo groupadd docker
    
     # 将自己添加到组中
     $ sudo gpasswd -a myusername docker
    
     # 重启Docker守护进程 
     $ sudo service docker restart
    
     # 退出,再登录
     $ exit
    
  4. 删除所有已经停止的容器

     $ docker rm $(docker ps -a -q)
    
  5. 转化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
    
  6. 查看镜像内的环境变量有哪些

     $ docker run ubuntu env
    
     HOME=/
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
     container=lxc
     HOSTNAME=5e150b7fef22
    
  7. RUN 与 CMD的区别

     FROM ubuntu
    
     # 执行docker build时会执行下面这些:
     RUN apt-get update
     RUN apt-get install softwres
    
     # 执行docker run时会执行默认执行:
     CMD ["softwares"]
    
  8. 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
    
  9. 查看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
    
  10. Docker构架:薄CLI客户端,建立在UNIX socket上的提供REST服务的守护进程

     	#像HTTP客户端一样连接并使用UNIX socket
     	$ nc -U //var/run/docker.sock GET /images/json HTTP/1.1
    

    注:我执行这条命令,没见反应。不知道为什么。

  11. 以图像的方式查看你的镜像的依赖

     $ docker images -viz | dot -Tpng -o docker.png
    
     $ python -m SimpleHTTPServer
    
     #打开浏览器
     # http://machinename:8000/docker.png
    

    注:个人不是很明白这里

  12. Docker的东西到底存在哪里?

     $ sudo su
     # cd /var/lib/docker 
     # ls -F
     containers/ graph/ repositories volumes/
    

    graph下存的是镜像,而文件系统存在 graph/imagesid/layer

  13. Docker源码

    commands.go 负责命令行客户端

    api.go REST API路由

    server.go 一个REST API的实现

    buildfile.go Dockerfile的解析器

  14. 不要在你的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 &

  15. 容器之间的通信 # 执行一个容器,并分配一个名字给它 $ 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是什么意思。

转载于:https://my.oschina.net/zjzhai/blog/213401

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值