您好,登錄后才能下訂單哦!
這篇文章主要介紹“docker容器的命令及使用”,在日常操作中,相信很多人在docker容器的命令及使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”docker容器的命令及使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
docker子命令概覽
子命令分類 子命令
Docker環(huán)境信息 info、version
容器生命周期管理 create、exec、kill、pause、restart、rm、run、start、stop、unpause
鏡像倉(cāng)庫(kù)命令 login、logout、pull、push、 search
鏡像管理 build、images、import、load、rmi、save、tag、commit
容器運(yùn)維操作 attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器資源管理 volume、network
系統(tǒng)日志信息 events、history、logs
獲取子命令詳細(xì)信息
docker COMMAND_NAME –help
Docker容器操作
Docker守護(hù)進(jìn)程綁定到多個(gè)地址
-H tcp://IP:PORT –H unix:///home/docker/docker.sock
基于基礎(chǔ)鏡像運(yùn)行容器:【base registry為Ubuntu】
docker run –i -t ubuntu /bin/bash
-i 保證容器中的STDIN是開啟的
-t 為創(chuàng)建的容器分配一個(gè)偽tty終端
--name CONTAINER_NAME 容器命名
-d 創(chuàng)建守護(hù)式容器
帶標(biāo)簽的Ubuntu鏡像 ubuntu:12.04
容器啟停
docker start|stop CONTAINER_NAME
docker ps 查看啟動(dòng)的容器
-a 查看所有的容器
docker ps –n –x 會(huì)顯示最后x個(gè)容器,不論容器正在運(yùn)行還是已經(jīng)停止
docker attach CONTAINER_NAME 附著到指定的容器上
docker logs COMTAINER_NAME 獲取容器的日志
-f 參數(shù)來監(jiān)控docker的日志,與tail -f類似
-t 每條日志加上時(shí)間戳
--tail N 獲取日志的最后N行內(nèi)容
--tail 0 –f 來跟蹤某個(gè)容器的最新日志,不必讀取整個(gè)日志
查看容器內(nèi)的進(jìn)程
docker top CONTAINER_NAME
在容器內(nèi)部運(yùn)行進(jìn)程
docker exec –d CONTAINER_NAME COMMAND
-d 需要運(yùn)行一個(gè)后臺(tái)進(jìn)程
docker exec -i -t CONTAINER_NAME /bin/bash 為執(zhí)行的進(jìn)程創(chuàng)建TTY并捕獲STDIN。exit后不會(huì)終止容器相當(dāng)于創(chuàng)建一個(gè)新的bash回話。
docker run --restart=always ….
--restart 會(huì)檢查容器的退出代碼,并據(jù)此來決定是否要重啟容器,always無論容器的退出代碼是什么,Docker都會(huì)自動(dòng)重啟該容器;on-failure還接受一個(gè)可選的重啟次數(shù)參數(shù) --restart=on-failure:5 最多重啟5次
深入容器
docker inspect CONTAINER_NAME 會(huì)對(duì)容器進(jìn)行詳細(xì)的檢查,然后返回其配置信息,包括名稱命令、網(wǎng)絡(luò)配置以及很多有用的數(shù)據(jù)
-f|—format=’{{ .State.Runing }}’ 查看日志內(nèi)容,可以同時(shí)制定多個(gè)容器
刪除容器
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有兩種類型的倉(cāng)庫(kù):
用戶倉(cāng)庫(kù)和頂層倉(cāng)庫(kù)
用戶倉(cāng)庫(kù)是docker用戶創(chuàng)建的
頂層倉(cāng)庫(kù)是由docker內(nèi)部的人來管理的
Jamturol/puppet
Jamturol: 用戶名
puppet:倉(cāng)庫(kù)名
構(gòu)建鏡像
使用docker commit . 登錄(Docker Hub)操作構(gòu)建
使用docker build和Dockerfile文件
docker commit CONTAINER_NAME|ID jamturol/apache2 提交的只是創(chuàng)建容器的鏡像與容器的當(dāng)前狀態(tài)之間有差異的部分
Dockerfile文件
# version: 0.01 注釋
FROM BASE_REGISTRY # BASE_REGISTRY 作為新鏡像的基礎(chǔ)鏡像
MAINTAINER xxx, “xxx@gmail.com” #鏡像的作者及作者的郵件地址
RUN echo ‘xxx’> /path/to/file #每條RUN指令都會(huì)創(chuàng)建一個(gè)新的鏡像層
RUN 。。。 # RUN指令會(huì)在shell里使用命令包裝器/bin/sh -c來執(zhí)行,如果不支持shell或者不希望shell運(yùn)行,可以使用exec格式的RUN指令。 RUN [ “apt-get”,”install”,”-y”,”nginx” ]
。。。
EXPOSE 80 # Docker該容器內(nèi)的應(yīng)用程序?qū)?huì)使用容器的指定端口??梢灾付ǘ鄠€(gè)EXPOSE指令來向外部公開多個(gè)端口。
docker build -t=”jamturol/static_web” . #運(yùn)行Dockerfile
-t 為新鏡像設(shè)置了倉(cāng)庫(kù)和名稱
-t=”jamturol/static_web:v1” 為鏡像設(shè)置一個(gè)標(biāo)簽,“鏡像名:標(biāo)簽”,如果沒有指定任何標(biāo)簽,Docker會(huì)將自動(dòng)為鏡像設(shè)置一個(gè)latest標(biāo)簽
--no-cache 略過緩存功能,每個(gè)包使用最新版本
ENV REFRESHED_AT 2017-07-05 #設(shè)置一個(gè)名為REFRESHED_AT的環(huán)境變量
深入探求鏡像是如何構(gòu)建出來的
docker history REGISTRY_NAME|ID
從新鏡像啟動(dòng)一個(gè)容器
docker run –d –p 80 --name static_web jamtuol/static_web nginx –g “deamon off;”
以前臺(tái)方式運(yùn)行nginx,-p公開哪些網(wǎng)絡(luò)端口給外部
docker ps –l 查看端口的映射情況
docker port ID 80 查看容器端口的映射情況
-P 大寫公開在Dockerfile中的EXPOSE設(shè)置的所有端口
-p IP:PORT1:PORT2 將容器的port2端口綁定到宿主機(jī)的port1端口上
CMD 指定容器啟動(dòng)時(shí)要運(yùn)行的命令, CMD [“/bin/bash”,”-l”]
使用docker run命令可以覆蓋CMD指令
ENTRYPOINT docker run命令行中指定的任何參數(shù)都會(huì)被當(dāng)作參數(shù)再次傳遞給ENTRYPOINT指令中指定的命令
ENTRYPOINT [“/usr/sbin/nginx”]
docker run 的--entrypoint標(biāo)志覆蓋ENTRYPOINT指令
WORKDIR 在容器內(nèi)部設(shè)置一個(gè)工作目錄,ENTRYPOINT和CMD指定的程序會(huì)在這個(gè)目錄下執(zhí)行,可設(shè)置多個(gè)
docker run –w /var/log …
-w 在運(yùn)行時(shí)覆蓋工作目錄
ENV設(shè)置的環(huán)境變量,取值為$變量名,這些變量會(huì)被持久保存到從我們的鏡像創(chuàng)建的任何容器中
USER 指定該鏡像會(huì)以什么樣的用戶去運(yùn)行
USER nginx 也可以是UID,指定user和group
USER UID
USER user:group
VOLUME [“/opt/project”] 基于此鏡像創(chuàng)建的任何容器,創(chuàng)建一個(gè)名為/opt/project的掛載點(diǎn),也可以指定多個(gè)卷
VOLUME [“/opt/project”,”/data”]
ADD software.lic /opt/application/software.lic 將構(gòu)建環(huán)境下的文件和目錄復(fù)制到鏡像中,在安裝應(yīng)用程序時(shí),會(huì)使用Docker通過目的地址參數(shù)末尾的字符來判斷文件源是目錄還是文件
COPY conf.d /etc/apache2 把本地conf.d目錄中的文件復(fù)制到/etc/apache2/目錄中。copy只關(guān)心在構(gòu)建上下文中復(fù)制本地文件,而不會(huì)去做文件提取和解壓的工作,如果目的位置不存在,Docker會(huì)自動(dòng)創(chuàng)建所需要的目錄結(jié)構(gòu)
ONBUILD 能為鏡像添加觸發(fā)器,當(dāng)一個(gè)鏡像被使用做其他鏡像的基礎(chǔ)鏡像時(shí),該鏡像中的觸發(fā)器將會(huì)執(zhí)行,觸發(fā)器會(huì)在構(gòu)建過程中插入新指令,可以認(rèn)為這些指令是緊跟在FROM之后指定的,觸發(fā)器可以是任何構(gòu)建指令
ONBUILD ADD . /opp/src
ONBUILD RUN cd /app/src && make
鏡像打包及導(dǎo)入相關(guān)操作
打包一個(gè)鏡像
docker save REPO_NAME:TAG > filename.tar
docker load < filename.tar 加載一個(gè)鏡像
刪除鏡像
docker rmi jamtuol/static_web
docker run –v $PWD/website:/var/www/html/website:ro ….
-v 指定了卷的源目錄(本地宿主機(jī)的目錄)和容器里的目的目錄,兩個(gè)目錄通過:來分隔,目的目錄不存在,會(huì)自動(dòng)創(chuàng)建,ro或者rw來定讀寫狀態(tài)
docker run --link redis:db ...
--link 標(biāo)志創(chuàng)建了兩個(gè)容器間的父子連接,需要兩個(gè)參數(shù)一個(gè)是要連接的容器名字,另一個(gè)是連接后容器的別名
docker run -p 4567 --name webapp --link redis:db -t -i -v $PWD/webapp:/opt/webapp jamturol/sintra /bin/bash
可以強(qiáng)制docker只允許有連接的容器之間互相通信。需要在啟動(dòng)docker守護(hù)進(jìn)程時(shí)加上--icc=false,關(guān)閉所有沒有連接的容器間的通信。被連接的容器必須運(yùn)行在同一個(gè)docker宿主機(jī)上
docker run 中加入--dns或者--dns-search為某個(gè)容器單獨(dú)配置dns
RUN shell.sh 運(yùn)行shell腳本
可以通過多個(gè)文件來執(zhí)行構(gòu)建
Dockerfile、shell.sh、var.txt等
docker run --privileged ...
可以啟動(dòng)docker特權(quán)模式,允許以其宿主機(jī)具有的(幾乎)所有能力來運(yùn)行容器,包括一些內(nèi)核特性和設(shè)備訪問
docker wait CONTAINER_NAME 等待程序退出得到返回碼
docker run --cidfile=/tmp/CONTAINERID.txt
讓docker截獲容器id并將其存到--cidfile選項(xiàng)指定的文件
docker run --rm ... 會(huì)在容器進(jìn)程運(yùn)行完畢后,自動(dòng)刪除容器,對(duì)于只用一次的容器和用完即扔的容器很有用
在Dockerfile中指定了VOLUME時(shí),在run對(duì)應(yīng)的鏡像啟動(dòng)容器,容器中就有對(duì)外的掛載點(diǎn)。可以通過inspect看到,如果沒有指定,則沒有對(duì)外的掛載點(diǎn)
Dockerfile使用for
RUN for var in v{v..8};do touch $DIRS/$var; done # DIRS是ENV指定的環(huán)境變量
serf是一個(gè)去中心化的服務(wù)發(fā)現(xiàn)和編排的解決方案,特點(diǎn)是輕量級(jí)和高可用,同時(shí)具備容錯(cuò)的特性
docker run -p 53:53/udp ... 以u(píng)dp的方式
docker run -h CONTAINER_host_name 。。。
docker各語(yǔ)言支持多種SDK
到此,關(guān)于“docker容器的命令及使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。