鏡像操作相關命令
# 查看版本
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