Docker基礎和常用命令( 三 )


文章插圖
四,Docker 鏡像命令Docker鏡像(Images) 也可以理解為是一個用于創建 Docker容器(Container) 的靜態模板 。一個 Docker鏡像(Images) 可以創建很多 Docker容器(Container) 。
Docker 鏡像常用命令如下:
命令描述docker commit創建鏡像 。docker images查看鏡像信息 。docker load導入鏡像 。docker pull拉取 Docker 鏡像 。docker push上傳鏡像 。docker rmi刪除鏡像 。docker save導出鏡像 。docker search在 Docker Hub 搜索鏡像 。docker tag為鏡像打標簽 。五,Docker 容器命令5.1,docker run 命令通過 docker run 命令可以基于鏡像新建一個容器并啟動,語法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其他常用容器管理命令如下:
# 新建容器并啟動$ docker run [鏡像名/鏡像ID]# 啟動已終止容器$ docker start [容器ID]# 列出本機運行的容器$ docker ps# 停止運行的容器$ docker stop [容器ID]# 殺死容器進程$ docker kill [容器ID]# 重啟容器$ docker restart [容器ID]docker run命令語法
1, docker run 命令常用選項:可通過 docker run --help 命令查看全部內容 。
選項說明-d, --detach=false指定容器運行于前臺還是后臺,默認為 false 。-i, --interactive=false打開 STDIN,用于控制臺交互 。-t, --tty=false分配 tty 設備,該可以支持終端登錄 , 默認為 false 。-u, --user=""指定容器的用戶 。-a, --attach=[]登錄容器(必須是以 docker run -d 啟動的容器) 。-w, --workdir=""指定容器的工作目錄 。-c, --cpu-shares=0設置容器 CPU 權重,在 CPU 共享場景使用 。-e, --env=[]指定環境變量,容器中可以使用該環境變量 。-m, --memory=""指定容器的內存上限 。-P, --publish-all=false指定容器暴露的端口 。-p, --publish=[]指定容器暴露的端口 。-h, --hostname=""指定容器的主機名 。-v, --volume=[]給容器掛載存儲卷 , 掛載到容器的某個目錄 。–volumes-from=[]給容器掛載其他容器上的卷,掛載到容器的某個目錄 。–cap-add=[]添加權限 。–cap-drop=[]刪除權限 。–cidfile=""運行容器后,在指定文件中寫入容器 PID 值,一種典型的監控系統用法 。–cpuset=""設置容器可以使用哪些 CPU , 此參數可以用來容器獨占 CPU 。–device=[]添加主機設備給容器,相當于設備直通 。–dns=[]指定容器的 dns 服務器 。–dns-search=[]指定容器的 dns 搜索域名,寫入到容器的 /etc/resolv.conf 文件 。–entrypoint=""覆蓋 image 的入口點 。–env-file=[]指定環境變量文件,文件格式為每行一個環境變量 。–expose=[]指定容器暴露的端口,即修改鏡像的暴露端口 。–link=[]指定容器間的關聯,使用其他容器的 IP、env 等信息 。–lxc-conf=[]指定容器的配置文件,只有在指定 --exec-driver=lxc 時使用 。–name=""指定容器名字 , 后續可以通過名字進行容器管理,links 特性需要使用名字 。–net=“bridge”器網絡設置:1. bridge 使用 docker daemon 指定的網橋 。2. host //容器使用主機的網絡 。3. container:NAME_or_ID >//使用其他容器的網路,共享 IP 和 PORT 等網絡資源 。4. none 容器使用自己的網絡(類似–net=bridge) , 但是不進行配置 。–privileged=false指定容器是否為特權容器,特權容器擁有所有的 capabilities 。–restart=“no”指定容器停止后的重啟策略:1. no:容器退出時不重啟 。2. on-failure:容器故障退出(返回值非零)時重啟 。3. always:容器退出時總是重啟 。–rm=false指定容器停止后自動刪除容器(不支持以 docker run -d 啟動的容器) 。–sig-proxy=true設置由代理接受并處理信號,但是 SIGCHLD、SIGSTOP 和 SIGKILL 不能被代理 。示例:kestrel 人群等 sdk 使用運行容器的腳本如下:
export BUILDER=registry.sensetime.com/kestrel_tatraffic/kestrel_tatraffic:kestrel_cuda11_1.2.21_opencv3.4.13_with_ffmpeg# -t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上,-i 則讓容器的標準輸入保持打開 。# --rm 指定容器停止后自動刪除容器# --net=host 容器使用主機的網絡# --ipc 要使用的 IPC 模式# --ipc=host# -e 指定環境變量 , 容器中可以使用# --privileged 指定容器是否為特權容器,特權容器擁有所有的 capabilities# -u 指定容器的用戶為 root# -entrypoint=bash 覆蓋 image 的入口點# -v 給容器掛載存儲卷,掛載到容器的 /kestrel_baggage# 指定容器的工作目錄為 /kestrel_baggage# ${BUILDER} 為運行的鏡像docker run --gpus '"device=0"' -it --rm --net=host --ipc=host \-e DISPLAY=$DISPLAY \--privileged \-e XAUTHORITY=$XAUTH \-u root \--entrypoint=bash \--ulimit core=-1 \--security-opt seccomp=unconfined \-v ${PWD}:/kestrel_baggage \-w /kestrel_baggage \${BUILDER}2,Docker交互式運行的語法為:

推薦閱讀