溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

docker容器的命令及使用

發(fā)布時(shí)間:2021-08-18 12:02:12 來源:億速云 閱讀:163 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“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í)用的文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI