Docker基本命令

鏡像操作相關命令

# 查看版本
docker version

#拉取鏡像(NAME為鏡像倉庫的名稱溺森,TAG是鏡像的標簽[一般用來表示版本信息蛙讥,不傳默認表示:latest], -a可拉取倉庫的所有鏡像.REGISTRY為注冊服務器楚昭,默認為registry.hub.docker.com/)
docker pull NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT/[PATH/]]NAME[:TAG]
docker pull hub.c.163.com/public/ubuntu:14.04

#列出本地主機已有鏡像(查看詳細參數(shù)man docker-images)
docker images

#為鏡像添加標簽
docker ubuntu:latest myubuntu:latest

#查看鏡像詳細信息
docker inspect ubuntu:latest

#查看鏡像歷史
docker history ubuntu:latest

#搜索遠程倉庫中的共享鏡像(-s 指定僅顯示評價為指定星級以上的鏡像破停,默認為0)
docker search [-s 3] nginx

#刪除鏡像(其中IMAGE為標簽或ID[ID只需輸入到能夠唯一標識即可奠货,不需要輸入完整]警绩。當同一鏡像有多個標簽時缎讼,只刪除指定標簽澎语,不會刪除鏡像文件;若刪除id有多個標簽萍膛,則會失斂苑;若鏡像有對應容器存在蝗罗,則會失敗艇棕。可以使用-f強行刪除鏡像)
docker rmi IMAGE
docker rmi myubuntu:latest

#基于容器創(chuàng)建鏡像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]
-a 作者信息
-c 提交的時候執(zhí)行Dockerfile指令
-m 提交信息
-p 提交時暫停容器運行

#基于本地模板導入鏡像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]

#存儲鏡像到本地文件
docker save -o centos_latest.tar centos:latest

#載入存儲到本地的鏡像文件
docker load --imput centos_latest.tar
docker load < centos_latest.tar

#登錄registry
docker login -u USER -p PASSWORD REGISTRY
docerk login -u test -p test 192.168.1.100

#上傳鏡像到倉庫(默認上傳到Docker Hub官方倉庫)
docker push NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT/[PATH/]]NAME[:TAG]
docker tag test:latest user/test:latest
docker push user/test:latest

容器操作相關命令

#創(chuàng)建容器(創(chuàng)建出來的容器處于停止狀態(tài)串塑。docker create --help 查看可選參數(shù))
docker create [OPTIONS] IMAGE
docker create -it centos

#啟動一個已經創(chuàng)建的容器
docker start CONTAINER_ID

#新建并啟動容器(-t分配一個偽終端并綁定到容器標準輸入上沼琉,-i讓容器標準輸入保存打開, --rm容器停止時自動刪除拟赊,和-d參數(shù)沖突刺桃。run等價于先create再start)
docker run [OPTIONS] IMAGE CMD
//bash中Ctrl+D或輸入exit可以退出容器
docker run -it centos /bin/bash

#守護態(tài)運行容器
docker run -d centos /bin/sh -c "while true; do echo hello world;sleep 1; done"
//獲取容器輸出信息
docker logs CONTAINER_ID

#終止容器(首先向容器發(fā)送SIGTERM信號,等待一段超時時間(默認為10秒)后吸祟,再發(fā)送SIGKILL信號來終止容器。docker kill命令會直接發(fā)送SIGKILL信號來強行終止容器)
docker stop [-t 10] CONTAINER

#重啟容器
docker restart CONTAINER

#進入容器--attach命令
docker attch [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

#進入容器--exec命令
docker exec -it 243... /bin/bash

#進入容器--nsenter工具
略

#刪除容器
docker rm [-f] [-l] [-v] CONTAINER
-f:是否強行終止并刪除一個運行中的容器
-l:刪除容器的連接桃移,但保留容器
-v:刪除容器掛載的數(shù)據(jù)卷

#導出容器(不管容器是否處于運行狀態(tài))
docker export [-o|--out-put[=""]] CONTAINER
docker export -o test_for_run.tar ce1e
docker export ce1e > test_for_run.tar

#導入容器(導入變成鏡像)
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [REPOSITORY[:TAG]
docker import test_for_run.tar - test/ubuntu:v1.0

#查看容器
docker ps [-a]

訪問Docker倉庫

#登錄倉庫(本地用戶目錄的.dockercfg中保存用戶認證信息)
docker login [-u USER] [-p PASSWORD] [SERVER]

#搜索遠程倉庫中的鏡像
docker search centos

#拉取鏡像
docker pull centos

#docker hub可跟蹤GitHub等進行自動創(chuàng)建

#使用registry鏡像來大家一套本地私有倉庫(默認情況下屋匕,會將倉庫創(chuàng)建在容器的/tmp/registry目錄下)
docker run -d -p 5000:5000 [-v /opt/data/registry:/tmp/registry] registry

Docker數(shù)據(jù)管理

#在容器內創(chuàng)建數(shù)據(jù)卷(在用docker run命令的時候,使用-v標記可以在容器內創(chuàng)建一個數(shù)據(jù)卷借杰。多吃重復使用-v可以創(chuàng)建多個)
docker run -d -P --name web -v /webapp training/webapp python app.py

#掛載一個主機目錄作為數(shù)據(jù)卷(本地路徑必須為絕對路徑过吻,默認權限為讀寫權限rw,也可指定為只讀權限ro)
docker run -d -P --name web -v /src/webapp:/opt/webapp[:rw|ro] training/webapp python app.py

#數(shù)據(jù)卷容器(如果用戶需要在多個容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡單的方式是使用數(shù)據(jù)卷容器)
//可以使用多次--volumes-from從多個容器掛載多個數(shù)據(jù)卷(容器數(shù)據(jù)卷并不需要保存運行狀態(tài))
docker run -it -v /dbdata --name dbdata centos
docker run -it --volumes-from dbdata --name db1 centos
docker run -it --volumes-from dbdata --name db2 centos

#刪除容器時并不會刪除關聯(lián)的數(shù)據(jù)卷蔗衡,可以在刪除時加上-v參數(shù)
docker rm -v 0sesfe

#利用數(shù)據(jù)卷來備份數(shù)據(jù)
docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar cvf /backup/backup.tar /dbdata

#使用特定驅動的文件系統(tǒng)創(chuàng)建(linux上--driver 為local的支持mount命令的相關參數(shù))纤虽,以nfs為例
docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.1.1,rw \
    --opt device=:/path/to/dir \
    foo

端口映射與容器互聯(lián)

#使用-P或-p將容器端口映射到宿主機端口(默認容器外部不能通過網絡訪問容器內部的網絡應用和服務。-P根據(jù)配置范圍隨機選擇一個端口绞惦,-p指定特定端口)
docker run -d -P --name test_web training/webapp python app.py
//查看端口映射
docker ps -l 
//查看容器控制臺日志輸出
docker logs -f test_web

#映射所有地址(0.0.0.0)到指定端口(HostPort:ContainerPort)
docker run -d -p 5000:5000 --name test_web training/webapp python app.py
//多次使用可綁定多個端口
docker run -d -p 5000:5000 -p 3000:80 --name test_web training/webapp python app.py

#映射到指定地址的指定端口(IP:HostPort:ContainerPort)
docker run -d -p 127.0.0.1:5000:5000 --name test_web training/webapp python app.py

#映射到指定地址的任意端口(IP::ContainerPort宿主機隨機分配一個端口)
docker run -d -p 127.0.0.1::5000 --name test_web training/webapp python app.py

#查看當前端口映射
docker port container_name container_port
docker port test_web 5000

#獲取容器的具體信息(可獲取容器內部往來ip等)
docker inspect container_id

#容器互聯(lián)(--link name:alias name是要鏈接的容器名逼纸,alias為鏈接的別名.Docker通過更新環(huán)境變量和/etc/hosts文件來是兩個容器互聯(lián))
docker run -d --name db training/postgres
docker run -d -P --name web --link db:db training/webapp python app.py

Dockerfile

#FROM指令(指定創(chuàng)建鏡像的基礎鏡像.任何Dockerfile的第一條指令必須為FROM指令,同一個Dockerfile可以創(chuàng)建多個鏡像)
FROM <image>[:<tag>]

#MAINTAINER指令(指定維護者信息)
MAINTAINER image_creator@docker.com

#RUN指令(運行指定命令)
//在shell終端中運行济蝉,即/bin/sh-c
RUN <command>
//使用exec執(zhí)行杰刽,不會啟動shell環(huán)境
RUN ["executable", "param1", "param2", ...]
//當命令較長是可以使用\對換行符轉義
RUN apt-get update \
    && apt-get install -y gcc g++ \
    && rm -rf /var/cache/apt
    
#CMD指令(用來指定啟動容器時默認執(zhí)行的命令,共支持三種格式王滤。每個Dockerfile只能有一條CMD命令贺嫂,如果指定了多條命令,只有最后一條會被執(zhí)行雁乡。如果用戶啟動容器時手動制定了運行的命令(作為run的參數(shù)),則會覆蓋掉CMD指定的命令)
//使用exec執(zhí)行第喳,推薦使用該方式
CMD ["executable", "param1", "param2", ...]
//在/bin/sh中執(zhí)行,提供給需要交互的應用
CMD command param1 param2 ...
//提供給ENTRYPOINT的默認參數(shù)
CMD ["param1", "param2", ...]

#LABEL指令(用來指定生成鏡像的元數(shù)據(jù)標簽信息)
LABEL <key>=<value> <key>=<value> ...

#EXPOSE指令(聲明鏡像內服務監(jiān)聽的端口踱稍。該指令只起到聲明作用曲饱,并不會自動完成端口映射悠抹。啟動容器時用-P或-p來指定映射)
EXPOSE <port> [<port> ...]

#ENV指令(指定環(huán)境變量,在鏡像生成過程中會被后續(xù)RUN指令使用渔工,在鏡像啟動的容器中也會存在)
ENV <key> <value>
//在啟動容器時可以使用--env <key>=<value>覆蓋掉

#ADD指令(該命令將復制指定的<src>路徑下的內容到容器中的<dest>路徑下锌钮。其中<src>可以是Dockerfile所在目錄的一個相對路徑(文件或目錄),也可以是一個URL引矩,還可以是一個tar文件(如果是tar文件梁丘,會自動解壓到<dest>路徑下)。<dest>可以是鏡像內的絕對路徑旺韭,或者相對于工作目錄WORKDIR的相對路徑.路徑支持正則表達式)
ADD <src> <dest>
ADD *.c /code/

#COPY指令(復制本地主機的<src>(為Dockerfile所在目錄的相對路徑氛谜、文件或目錄)下的內容到鏡像中的<dest>下。目標路徑不存在誰区端,自動創(chuàng)建值漫。路徑支持正則表達式)
COPY <src> <dest>

#ENTRYPOINT指令(指定鏡像默認入口指令,該入口命令或在啟動容器時作為根命令執(zhí)行织盼,所有傳入值作為該命令的參數(shù)杨何。此時,CMD指令指定的值將作為根命令的參數(shù)沥邻。每個Dockerfile中只能有一個ENTRYPOINT危虱,當指定多個時,只有最后一個有效唐全。在運行是埃跷,可以用--entrypoint參數(shù)覆蓋掉)
//exec調用執(zhí)行
ENTRYPOINT ["executable", "param1", "param2", ...]
//shell中執(zhí)行
ENTRYPOINT command param1 param2 ...

#VOLUME指令(創(chuàng)建一個數(shù)據(jù)掛載點∮世可以從本地主機或其他容器掛載數(shù)據(jù)卷)
VOLUME ["/data"]

#USER指令(指定運行容器時的用戶名或UID弥雹,后續(xù)RUN指令等會使用指定的用戶身份。當服務不需要管理員權限時延届,可以通過該命令指定運行用戶剪勿,并且可以在之前創(chuàng)建所需用戶。要臨時獲取管理員權限可以使用gosu或sudo)
USER daemon
RUN groupadd -r postgres && useradd -r -g postgres postgres

#WORKDIR指令(為后續(xù)的RUN祷愉、CMD和ENTRYPOINT指令配置工作目錄窗宦。可以使用多個WORKDIR指令二鳄,后續(xù)命令如果參數(shù)是相對路徑赴涵,則會基于之前指令指定的路徑)
WORKDIR /path/to/workdir

#ARG指令(指定一些鏡像內使用的參數(shù)(例如版本號信息等),這些參數(shù)在執(zhí)行docker build命令時才以--build-arg <arg-name>=<value>格式傳入)
ARG <name>[=<default value>]

#ONBUILD指令(配置當前創(chuàng)建的鏡像作為其他鏡像的基礎鏡像時订讼,所執(zhí)行的創(chuàng)建操作指令)
ONBUILD [INSTRUCTION]

#STOPSIGNAL指令(指定創(chuàng)建鏡像啟動的容器接收退出的信號值)
STOPSIGNAL signal

#HEALTHCHECK指令(配置啟動容器入戶進行監(jiān)控檢查)
//根據(jù)所執(zhí)行命令返回值是否為0來判斷
HEALTHCHECK [OPTION] CMD command
//禁止基礎鏡像中的監(jiān)控檢查
HEALTHCHECK NONE

#SHELL指令(指定其他命令使用shell時默認shell類型髓窜,默認為["/bin/sh", "-c"])

#創(chuàng)建鏡像
//該命令將讀取指定路徑下(包括子目錄)的Dockerfile,并將該路徑下的所有內容發(fā)送給Docker服務端,由服務端創(chuàng)建鏡像
docker build -t image_tag Dockerfile_dir_path
docker build -t python3 .

#忽略目錄下的文件
//可以通過.dockerignore文件(每一行添加一條匹配模式)來讓Docker忽略匹配模式路徑下的目錄和文件
*/temp*
*/*/temp*
~*

參考資料

docker 安裝
https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.19b21991JvvxTZ

docker鏡像阿里云加速
https://cr.console.aliyun.com/?spm=a2c4e.11153959.blogcont29941.9.520269d6euX6tR#/accelerator

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末寄纵,一起剝皮案震驚了整個濱河市鳖敷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌程拭,老刑警劉巖定踱,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恃鞋,居然都是意外死亡崖媚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門恤浪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅哑,“玉大人,你說我怎么就攤上這事水由≤牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵砂客,是天一觀的道長泥张。 經常有香客問我,道長鞠值,這世上最難降的妖魔是什么圾结? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮齿诉,結果婚禮上,老公的妹妹穿的比我還像新娘晌姚。我一直安慰自己粤剧,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布挥唠。 她就那樣靜靜地躺著抵恋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宝磨。 梳的紋絲不亂的頭發(fā)上弧关,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音唤锉,去河邊找鬼世囊。 笑死,一個胖子當著我的面吹牛窿祥,可吹牛的內容都是我干的株憾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗤瞎!你這毒婦竟也來了墙歪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤贝奇,失蹤者是張志新(化名)和其女友劉穎虹菲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掉瞳,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡毕源,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菠赚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑豹。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衡查,靈堂內的尸體忽然破棺而出瘩欺,到底是詐尸還是另有隱情,我是刑警寧澤拌牲,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布俱饿,位于F島的核電站,受9級特大地震影響塌忽,放射性物質發(fā)生泄漏拍埠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一土居、第九天 我趴在偏房一處隱蔽的房頂上張望枣购。 院中可真熱鬧,春花似錦擦耀、人聲如沸棉圈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽分瘾。三九已至,卻和暖如春吁系,著一層夾襖步出監(jiān)牢的瞬間德召,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工汽纤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留上岗,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓冒版,卻偏偏與公主長得像液茎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容