您好,登錄后才能下訂單哦!
這篇文章主要介紹“docker容器的命令及使用”,在日常操作中,相信很多人在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 –help
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鏡像,容器以及容器的配置
Docker鏡像操作
列出所有docker鏡像
docker images
拉取鏡像
docker pull registry_name|registry_name:xxx
查找鏡像
docker search registry_name
Docker Hub有兩種類型的倉庫:
用戶倉庫和頂層倉庫
用戶倉庫是docker用戶創建的
頂層倉庫是由docker內部的人來管理的
Jamturol/puppet
Jamturol: 用戶名
puppet:倉庫名
構建鏡像
使用docker commit . 登錄(Docker Hub)操作構建
使用docker build和Dockerfile文件
docker commit CONTAINER_NAME|ID jamturol/apache2 提交的只是創建容器的鏡像與容器的當前狀態之間有差異的部分
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 && make
鏡像打包及導入相關操作
打包一個鏡像
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各語言支持多種SDK
到此,關于“docker容器的命令及使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。