關于Docker的15個提示

jopen 10年前發布 | 21K 次閱讀 Docker
  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是什么意思。



    原文地址:http://sssslide.com/speakerdeck.com/bmorearty/15-docker-tips-in-5-minutes

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!