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交互式运行的语法为:

推荐阅读