docker容器使用快速瞭解普及

此內容基於《第一本docker書》總結,內容次序不是很規範,按照書籍內容介紹部分有添加:
docker子命令概覽
子命令分類                             子命令
Docker環境信息              info、version
容器生命週期管理            create、exec、kill、pause、restart、rm、run、start、stop、unpause
鏡像倉庫命令                login、logout、pull、push、 search
鏡像管理                    build、images、import、load、rmi、save、tag、commit
容器運維操做                attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器資源管理                volume、network
系統日誌信息                events、history、logs
獲取子命令詳細信息
docker COMMAND_NAME –helphtml


Docker容器操做
Docker守護進程綁定到多個地址
  -H tcp://IP:PORT –H unix:///home/docker/docker.sock
基於基礎鏡像運行容器:【base registry爲Ubuntu】
docker run –i -t ubuntu /bin/bash
           -i 保證容器中的STDIN是開啓的
           -t 爲建立的容器分配一個僞tty終端
          --name CONTAINER_NAME 容器命名
          -d 建立守護式容器
帶標籤的Ubuntu鏡像 ubuntu:12.04
容器啓停
docker start|stop CONTAINER_NAME
docker ps 查看啓動的容器
          -a 查看全部的容器
docker ps –n –x  會顯示最後x個容器,不論容器正在運行仍是已經中止
docker attach CONTAINER_NAME  附着到指定的容器上
docker logs COMTAINER_NAME 獲取容器的日誌
           -f 參數來監控docker的日誌,與tail -f相似
           -t 每條日誌加上時間戳
           --tail N 獲取日誌的最後N行內容
           --tail 0 –f  來跟蹤某個容器的最新日誌,沒必要讀取整個日誌
查看容器內的進程
docker top CONTAINER_NAME
在容器內部運行進程
docker exec –d CONTAINER_NAME COMMAND
            -d 須要運行一個後臺進程
docker exec -i -t CONTAINER_NAME /bin/bash  爲執行的進程建立TTY並捕獲STDIN。exit後不會終止容器至關於建立一個新的bash回話。
docker run --restart=always ….
           --restart 會檢查容器的退出代碼,並據此來決定是否要重啓容器,always不管容器的退出代碼是什麼,Docker都會自動重啓該容器;on-failure還接受一個可選的重啓次數參數   --restart=on-failure:5  最多重啓5次
深刻容器
docker inspect CONTAINER_NAME        會對容器進行詳細的檢查,而後返回其配置信息,包括名稱命令、網絡配置以及不少有用的數據         
                             -f|—format=’{{ .State.Runing }}’   查看日誌內容,能夠同時制定多個容器
刪除容器
docker rm CONTAINER_NAME
docker rm ‘docker ps -a -q’刪除全部
                       -q 只返回容器的ID
Docker安裝以後,/var/lib/docker存放着docker鏡像,容器以及容器的配置nginx


Docker鏡像操做
列出全部docker鏡像
docker images
拉取鏡像
docker pull registry_name|registry_name:xxx
查找鏡像
docker search registry_name
Docker Hub有兩種類型的倉庫:
    用戶倉庫和頂層倉庫
    用戶倉庫是docker用戶建立的
    頂層倉庫是由docker內部的人來管理的
    Jamturol/puppet
    Jamturol: 用戶名
    puppet:倉庫名web

構建鏡像
使用docker commit . 登陸(Docker Hub)操做構建
使用docker build和Dockerfile文件
     docker commit CONTAINER_NAME|ID jamturol/apache2    提交的只是建立容器的鏡像與容器的當前狀態之間有差別的部分redis

Dockerfile文件
# version: 0.01   註釋
FROM BASE_REGISTRY    # BASE_REGISTRY 做爲新鏡像的基礎鏡像
MAINTAINER xxx, 「xxx@gmail.com」 #鏡像的做者及做者的郵件地址
RUN echo ‘xxx’> /path/to/file   #每條RUN指令都會建立一個新的鏡像層
RUN 。。。   # RUN指令會在shell裏使用命令包裝器/bin/sh -c來執行,若是不支持shell或者不但願shell運行,可使用exec格式的RUN指令。 RUN [ 「apt-get」,」install」,」-y」,」nginx」 ]
。。。
EXPOSE 80   # Docker該容器內的應用程序將會使用容器的指定端口。能夠指定多個EXPOSE指令來向外部公開多個端口。
docker build -t=」jamturol/static_web」 .   #運行Dockerfile
              -t 爲新鏡像設置了倉庫和名稱
              -t=」jamturol/static_web:v1」 爲鏡像設置一個標籤,「鏡像名:標籤」,若是沒有指定任何標籤,Docker會將自動爲鏡像設置一個latest標籤
              --no-cache 略過緩存功能,每一個包使用最新版本
ENV REFRESHED_AT 2017-07-05   #設置一個名爲REFRESHED_AT的環境變量
深刻探求鏡像是如何構建出來的
docker history REGISTRY_NAME|ID
重新鏡像啓動一個容器
docker run –d –p 80 --name static_web jamtuol/static_web nginx –g 「deamon off;」
       之前臺方式運行nginx,-p公開哪些網絡端口給外部
docker ps –l     查看端口的映射狀況
docker port ID 80  查看容器端口的映射狀況
            -P  大寫公開在Dockerfile中的EXPOSE設置的全部端口
            -p IP:PORT1:PORT2 將容器的port2端口綁定到宿主機的port1端口上
CMD 指定容器啓動時要運行的命令,   CMD [「/bin/bash」,」-l」]
使用docker run命令能夠覆蓋CMD指令
ENTRYPOINT  docker run命令行中指定的任何參數都會被看成參數再次傳遞給ENTRYPOINT指令中指定的命令
ENTRYPOINT [「/usr/sbin/nginx」]
docker run 的--entrypoint標誌覆蓋ENTRYPOINT指令
WORKDIR  在容器內部設置一個工做目錄,ENTRYPOINT和CMD指定的程序會在這個目錄下執行,可設置多個
docker run –w /var/log …
                     -w 在運行時覆蓋工做目錄
ENV設置的環境變量,取值爲$變量名,這些變量會被持久保存到從咱們的鏡像建立的任何容器中
USER  指定該鏡像會以什麼樣的用戶去運行
USER nginx  也能夠是UID,指定user和group
USER UID
USER user:group
VOLUME [「/opt/project」]   基於此鏡像建立的任何容器,建立一個名爲/opt/project的掛載點,也能夠指定多個卷 
VOLUME [「/opt/project」,」/data」]
ADD software.lic /opt/application/software.lic   將構建環境下的文件和目錄複製到鏡像中,在安裝應用程序時,會使用Docker經過目的地址參數末尾的字符來判斷文件源是目錄仍是文件
COPY conf.d /etc/apache2   把本地conf.d目錄中的文件複製到/etc/apache2/目錄中。copy只關心在構建上下文中複製本地文件,而不會去作文件提取和解壓的工做,若是目的位置不存在,Docker會自動建立所須要的目錄結構
ONBUILD  能爲鏡像添加觸發器,當一個鏡像被使用作其餘鏡像的基礎鏡像時,該鏡像中的觸發器將會執行,觸發器會在構建過程當中插入新指令,能夠認爲這些指令是緊跟在FROM以後指定的,觸發器能夠是任何構建指令
ONBUILD ADD . /opp/src
ONBUILD RUN cd /app/src && makedocker


鏡像打包及導入相關操做
打包一個鏡像
docker save REPO_NAME:TAG > filename.tar
docker load < filename.tar  加載一個鏡像
刪除鏡像
docker rmi jamtuol/static_web
docker run –v $PWD/website:/var/www/html/website:ro ….
           -v 指定了卷的源目錄(本地宿主機的目錄)和容器裏的目的目錄,兩個目錄經過:來分隔,目的目錄不存在,會自動建立,ro或者rw來定讀寫狀態
docker run --link redis:db ...
           --link 標誌建立了兩個容器間的父子鏈接,須要兩個參數一個是要鏈接的容器名字,另外一個是鏈接後容器的別名
docker run -p 4567 --name webapp --link redis:db -t -i -v $PWD/webapp:/opt/webapp jamturol/sintra /bin/bash
           能夠強制docker只容許有鏈接的容器之間互相通訊。須要在啓動docker守護進程時加上--icc=false,關閉全部沒有鏈接的容器間的通訊。被鏈接的容器必須運行在同一個docker宿主機上
docker run 中加入--dns或者--dns-search爲某個容器單獨配置dns
RUN shell.sh   運行shell腳本
能夠經過多個文件來執行構建
Dockerfile、shell.sh、var.txt等
docker run --privileged ...
           能夠啓動docker特權模式,容許以其宿主機具備的(幾乎)全部能力來運行容器,包括一些內核特性和設備訪問
docker wait CONTAINER_NAME 等待程序退出獲得返回碼
docker run --cidfile=/tmp/CONTAINERID.txt
           讓docker截獲容器id並將其存到--cidfile選項指定的文件
docker run --rm ...  會在容器進程運行完畢後,自動刪除容器,對於只用一次的容器和用完即扔的容器頗有用
在Dockerfile中指定了VOLUME時,在run對應的鏡像啓動容器,容器中就有對外的掛載點。能夠經過inspect看到,若是沒有指定,則沒有對外的掛載點
Dockerfile使用for
RUN for var in v{v..8};do touch $DIRS/$var; done   # DIRS是ENV指定的環境變量
serf是一個去中心化的服務發現和編排的解決方案,特色是輕量級和高可用,同時具有容錯的特性
docker run -p 53:53/udp ...  以udp的方式
docker run -h CONTAINER_host_name 。。。
docker各語言支持多種SDKshell

相關文章
相關標籤/搜索