【Docker】命令大全

基本命令

命令 说明
docker version 显示版本信息
docker info 显示系统信息,包括镜像、容器数量
docker 命令 --help 帮助
systemctl start docker 启动docker
systemctl enable docker 开机自启动

镜像相关

docker images

查看本地主机上的镜像(默认-a)

docker images [OPTIONS] [REPOSITORY[:TAG]]
选项:
	-a		列出所有镜像
	-q		只打印镜像的ID
docker images	[REPOSITORY[:TAG]]		#查看指定镜像的信息

docker pull

下载镜像到本地,不指定Tag,默认为latest

docker pull 镜像名[:Tag] 

docker rmi

删除镜像

docker rmi 镜像名[:Tag]	#根据名字删除镜像
docker rmi 镜像ID		#根据镜像ID删除
docker rmi -f 镜像ID		#强制删除镜像(如果容器已经启动则需先停止后方可删除)
docker rmi -f $(docker images -aq)		#批量删除所有镜像
docker rmi $(docker images -f "dangling=true" -q --no-trunc)	#删除悬浮镜像(Tag值为<none>)
docker image prune -a --force --filter "until=48h"	#删除48小时之前的镜像
docker image inspect --format='{
   
   {.RepoTags}} {
   
   {.Id}} {
   
   {.Parent}}' $(docker image ls -q --filter since=镜像id)	#查找镜像被哪些镜像引用了

如何删除none镜像 -> 删除none的镜像,要先删除镜像中的容器。要删除镜像中的容器,必须先停止容器!

  • 停止容器(这是一句废话)

    docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
    
  • 删除已经停止的容器

    docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }') 
    
  • 删除镜像

    docker rmi $(docker images | grep "none" | awk '{print $3}') 
    

docker run

docker run [选项] image

Eg:

docker run

-itd \

–privileged=true \

–name test \

–hostname test \

–restart unless-stopped \

–net=host \

–cpus=1 -m 512M \

-v /tmp:/tmp \

-w /opt \

-p 80:80 \

-e MYSQL_IP=192.168.1.1 \

–device=/dev/uhid \

docker.io/nginx:latest

  • -i: 即使未连接STDIN(标准输入)也保持打开状态,分配一个交互终端

  • -t:表示容器启动后会进入其命令行,与it一起使用。分配一个伪tty设备,可以支持终端登录

  • -d:让容器在后台运行并打印容器的ID。如果你的容器启动会打印日志,那边加-d选项在终端就看不到了,需要用docker logs -f 容器ID 查看

  • --privileged:授予此容器扩展特权,也就是开启特权模式;这种模式下容器对docker宿主机拥有root访问权限,允许我们以其宿主机具有(几乎)所有能力来运行容器,包括一些内核特性和设备访问,慎用

  • --name xxx:给容器取一个名字,用docker ps可以查看

  • --rm:退出容器后,容器会被删除,常用于测试

  • --hostname yyy:设置容器里面的主机名,登陆到容器里面可以看到

  • --restart unless-stopped :容器退出时的重启策略

    • no,默认策略,在容器退出时不重启容器
    • on-failure,在容器非正常退出时(退出状态非0),才重启容器
    • on-failure:3,在容器非正常退出时重启容器,最多重启3次
    • always,在容器退出时总是重启容器
    • unless-stopped,在容器退出时总是重启容器,如果容器正常stopped,然后机器重启或docker服务重启,容器将不会被restart

    更改已运行容器的重启策略:docker update --restart=always 容器ID/容器名

  • --network bridge:设置网络模式

    参数 含义
    bridge 使用docker daemon指定的网桥,默认为docker0;使用–net=bridge指定,为默认设置
    host 容器使用主机的网络
    container:NAME_or_ID 使用其他容器的网络,共享IP和PORT等网络资源
    none 容器使用自己的网络,使用–net=none指定
  • --link:实现通过容器名访问

    docker run -d --name test2 --link test1 busybox sleep 3600

    • test2容器可以直接ping通test1容器名,但test1不能ping通test2容器名
    • 之所以能够Ping通,是因为把test1的IP地址与容器名、主机名的映射写入到了test2容器的/etc/hosts文件中
  • --cpus=1 -m 512M:设置容器CPU和内存的使用上限

  • -v:数据卷

    挂载时设置读写权限

    • ro:只读,在容器内只读,只能通过宿主机来操作
    • rw:读写
  • -w:指定容器的工作目录

  • -p 80:80:端口映射,前面为宿主机的端口,后面为容器服务进程端口,实现方式为iptables

  • -e:给容器声明环境变量,在容器内部可以通过export查看

  • --device:增加主机的一个设备到容器,也就是让容器拥有访问这个设备的权限

  • --shm-size:指定shm的大小,默认为64M

    –shm-size=200m

  • --dns 114.114.114.114:手动指定容器内部的DNS

  • --add-host www.a.com:1.1.1.1:手动往/etc/hosts 文件中注入主机名到 IP 地址的映射

  • docker.io/nginx:latest:为镜像名:TAG标签,如果不写TAG,默认为latest;也可以用镜像ID来代替

docker build

通过Dockerfile来制作镜像

解析命令链接地址:Dockerfile解析

docker build --pull -f /opt/Dockerfile -t 镜像名:Tag /opt

--pull  #确保 Docker 在构建镜像之前拉取你的 Dockerfile 中 FROM 语句中提到的镜像的更新
-f		  #指定Dockerfile文件,不指定默认为当前路径的Dockerfile
-t		  #指定新生成的镜像名:Tag
/opt	  #代表构建镜像的上下文,通常使用点(.)表示在当前路径

镜像发布

命令 说明
docker login -u 用户名 -p密码 镜像仓库地址 登录镜像仓库
docker tag 镜像名:Tag 镜像仓库地址/镜像名:Tag 给镜像打Tag
docker push 镜像仓库地址/镜像名:Tag 推送镜像到远程镜像仓库
[root@aliyun-alan ~]# docker login -u al6nlee
[root@aliyun-alan ~]# docker commit -m="msg info" -a="al6nlee" 906f8011784e  mysql_v57_0530:1.0
[root@aliyun-alan ~]# docker tag mysql_v57_0530:1.0 al6nlee/mysql_v57_0530:1.0
[root@aliyun-alan ~]# docker push al6nlee/mysql_v57_0530:1.0
[root@aliyun-alan ~]# docker logout

镜像常用命令

命令 说明
docker history 镜像ID 查看镜像分层信息
docker history --format { {.CreatedBy}} --no-trunc=true 镜像ID 查看镜像完整构建命令
docker inspect 镜像ID 查看镜像详细信息
docker search 镜像名 搜索镜像,默认从官方镜像仓库搜索
docker save 镜像名:Tag > nginx.tar 把镜像打成一个tar包
docker load -i nginx.tar 导入nginx镜像
docker system df 查看docker磁盘使用情况
docker system prune -f 删除停止的容器、至少一个容器未使用的所有网络、悬浮镜像、悬浮构建缓存;-f表示强制删除
docker system prune -a 在上述基础上再删除没有任何容器使用的镜像、构建缓存

容器相关

docker ps

查看运行中的容器

docker ps -a 查看所有容器

docker logs

查看容器日志

docker logs [选项] 容器名

-f		#动态查看 
-t		#显示时间戳 
--tail 20	#显示最近的20行
--since 30m  #显示最近30分钟的日志
--since=“2018-02-08” # 指定时间之后日志
--since=“2018-02-08T13:23:37” --until “2018-02-09T12:23:37”  # 查看某段时间日志

容器常用命令

docker ps			#显示正在运行的容器
docker ps -a		#显示所有容器
docker ps -l		#显示最近的一个容器
docker ps -n2		#显示最近创建的两个容器
docker ps -q		#显示容器ID
docker start 容器名			#启动容器
docker restart 容器名		#重启容器
docker stop 容器ID或容器名	#停止容器
docker kill 容器名			#强制停止容器
docker rm 容器ID或容器名		#删除容器
docker rm -f 容器名			#强制删除容器,可以删除运行中的容器
docker rm -v 容器名			#删除容器的同时也删除与之关联的volume
docker top 容器名			#查看容器里面的进程
docker stats 容器名			#查看容器资源使用情况(不指定容器,会查看所有容器的使用情况)
docker inspect 容器名		#查看容器元数据
docker exec -it 容器ID bash	#进入容器,并分配一个新的终端
exit						#退出容器
docker cp /etc/hosts 容器名:/opt		#拷贝宿主机的hosts文件到容器的/opt目录下
docker cp 容器名:/opt/a.sh /tmp		#拷贝容器的a.sh文件到宿主机的/tmp路径下
docker pause 容器名			#暂停容器
docker unpause 容器名		#取消暂停容器

docker commit -m="提交信息" -a="作者" 容器id 新镜像名:[Tag]		#基于容器生成一个镜像(不推荐)
docker inspect -f '{
   
   {.HostConfig.LogConfig}}' 容器名	#查看容器日志策略
docker inspect --format "{
   
   { .State.Pid }}" 容器名		#查看容器在宿主机对应的PID

数据卷相关

数据卷默认路径:/var/lib/docker/volumes/

集群服务中卷映射有两种模式,分别是volume和bind,默认是volume。

命令 说明
docker volume ls 查看本地数据卷
docker inspect 卷名 查看数据卷信息

volumes模式

如果指定的卷在主机上已经存在,则使用指定的卷,如果在特定主机上执行容器启动任务时这些卷不存在,则会根据服务上的卷规范自动创建卷

# 将容器中/usr/share/nginx/html目录映射到nginx_data
docker service create --replicas 1 --mount type=volume,src=nginx_data,dst=/usr/share/nginx/html --name nginx-test2 nginx


默认的情况下,自动创建的卷使用的驱动是 local,可以在–mount参数中使用更具体的配置进行设置,格式如下:
docker service create --mounttype=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1> --name myservice <IMAGE>

bind模式

将宿主机某个目录映射到docker容器,目录必须已经存在,如果节点初始化任务容器时路径不存在,则会报错,服务任务执行失败。很适合用于部署网站,可以宿主机的这个目录作为git版本目录,每次update代码的时候,容器就会更新。

docker service create --replicas 1 --mount type=bind,src=/home/yyl/nginx,dst=/usr/share/nginx/html --name nginx-test3 nginx

nfs模式

# 先在各个节点创建nfs数据卷
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.137.202,rw --opt device=:/home/yyl/shared nfs-share

# 之后,再管理节点上使用以下命令创建服务
docker service create --replicas 2 --mount type=volume,src=nfs-share,dst=/usr/share/nginx/html --name nginx-nfs nginx

网络相关

#创建docker01网络,-o指定通过ifconfig命令查看到的名字
docker network create docker01 --subnet=10.10.10.0/24 -o com.docker.network.bridge.name=docker01	
docker network ls				#列出docker网络
docker network inspect 网桥名字或ID	#查看网桥的详细信息
docker network rm 网桥名			#移除网络
docker network connect 网桥名 容器名	#将容器与网桥关联,表现形式为一个容器多个IP

compose相关

命令 说明
docker-compose build 建立或者重建服务
docker-compose config 验证和查看Compose文件
docker-compose create 创建服务
docker-compose down 停止和删除容器,网络,镜像和卷
docker-compose events 从容器接收实时事件
docker-compose exec 登录正在运行的容器执行命令
docker-compose images 镜像列表
docker-compose kill 杀掉容器
docker-compose logs 查看容器的输出
docker-compose pause 暂停容器
docker-compose port 为端口绑定打印公共端口
docker-compose ps 容器列表
docker-compose pull 下载服务镜像
docker-compose push 上传服务镜像
docker-compose restart 重启容器
docker-compose rm 删除停止的容器
docker-compose run 运行一次性的命令
docker-compose scale 设置服务的容器数量
docker-compose start 启动服务
docker-compose stop 停止服务
docker-compose top 显示运行过程
docker-compose unpause 暂停服务
docker-compose up 创建并启动容器

swarm相关

docker swarm

命令 说明
docker swarm init 初始化集群
docker swarm join-token (worker|manager) 管理工作、管理节点的 token
docker swarm leave 离开集群
docker swarm join 加入集群

docker swarm init [OPTION]

初始化集群

  • –advertise-addr: 多网卡的情况下,指定需要使用的ip,或者指定一个节点上没有的 IP,比如一个负载均衡的 IP
  • –listen-addr: 指定监听的 ip 与端口,通常与 --advertise-addr 相匹配,如果 --advertise-addr 设置了一个远程 IP 地址(如负载均衡的IP地址),该属性也是需要设置的
  • –autolock: 指定集群启用自动锁定功能
  • –availability: 节点的有效性(“active”|“pause”|“drain”)
    • Active:集群中该Node可以被指派Task
    • Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行
    • Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上

docker swarm join-token [OPTION] (worker | manager)

管理集群令牌,可查看、刷新令牌,只能在管理节点执行,参数如下:

  • -q:只输出令牌
  • –rotate: 刷新令牌

docker swarm join [OPTIONS] HOST:PORT

将一个节点机器加入集群,需要在节点机器上执行,常用参数如下:

  • –advertise-addr: 多网卡的情况下,指定需要使用的ip
  • –listen-addr: 指定监听的 ip 与端口,通常与 --advertise-addr 相匹配
  • –availability: 节点的有效性(“active”|“pause”|“drain”)
  • –token:集群令牌

docker swarm update [OPTIONS]

更新集群状态,只能在管理节点执行,常用参数如下:

  • –autolock:修改管理节点的自动锁定功能配置,可用值有: true、false
  • –cert-expiry:验证节点之间的通讯令牌的间隔,默认时2160小时,可用单位: ns|us|ms|s|m|h
  • –dispatcher-heartbeat:心跳包间隔时长,默认5秒,可用单位:ns|us|ms|s|m|h
  • –task-history-limit:任务历史记录保留限制

docker swarm leave [OPTIONS]

脱离集群,在需要退出的节点执行,如果只有一个管理节点的情况下,管理节点退出集群,集群解散。参数如下:

  • -f: 强制退出集群

    一个节点退出集群之后,docker node ls命令还可以看到该节点信息,只是处于down状态。

docker swarm unlock-key [OPTIONS]

管理解锁码,可查看、刷新解锁码

  • -q:只输出解锁码
  • –rotate:刷新解锁码

docker swarm unlock

解锁一个管理节点

docker node

命令 说明
docker node ls 查看集群中所有节点,只能在manager节点上操作
docker node rm 删除某个节点(-f强制删除)
docker node inspect self|NODE 查看节点详情
docker node demote NODE 节点降级,由管理节点降级为工作节点
docker node promote NODE 节点升级,由工作节点升级为管理节点
docker node update 更改一个节点的配置,只能在管理节点操作
docker node ps 查看节点中的 Task 任务

docker service

命令 说明
docker service create 部署服务
docker service inspect 查看服务详情
docker service logs 产看某个服务日志
docker service ls 查看所有服务详情
docker service rm 删除某个服务(-f强制删除)
docker service scale 设置某个服务个数
docker service update 更新某个服务
docker service ps ID 查看某个服务的详情

docker service create [OPTIONS] IMAGE [COMMAND] [ARG…]

按照指定的参数创建服务,后面可以命令和参数,类似docker run,常用的选项有:

  • –name: 指定服务名称

  • –label:设置服务标签

  • -mode:设置服务模式,可用值:global、replicated,默认值是replicated

    • global:全局模式,会在每一个可用节点都创建一个服务副本,而且每个节点有且只有一个
    • replicated:复制模式,可以指定复制个数,默认是1,swarm调度器会调度可以节点创建指定数量的副本,一个节点可以同时有多个副本
  • –replicas: 任务副本个数,与–mode=replicated,搭配使用

  • –replicas-max-per-node:每个节点可以运行的任务的最大个数,默认是0,表示没有限制

  • –env:设置运行时环境变量

  • –workdir:设置工作目录

  • –user:设置用户

  • –publish: 端口映射,默认使用 ingress 网络模式,使用swarm集群的负载均衡,会在每一个节点上都开放配置的端口,并且自动转发到容器内部。如果不想使用swarm集群负载均衡,想要自己更加灵活地做路由策略,可以设置为mode=host模式,这种模式下swarm集群只会在任务运行的节点上开放配置的端口,你需要知道任务副本运行在哪个几点上,一般情况下–publish mode=host 模式和 --mode=global一起使用。
    示例:

    docker service create --publish 8000:80 nginx
    docker service create --publish published=8080,target=80 nginx
    docker service create --mode global --publish mode=host,target=80,published=8080 --name=nginx nginx:latest
    
  • –mount:配置卷挂载,常用的两种挂载方式是volume和bind,区别在于一个会自动创建卷,一个必须节点上已经存在相应的卷

    docker service create --mount src=<VOLUME-NAME>,dst=<CONTAINER-PATH> --name myservice <IMAGE>
    docker service create --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> --name myservice <IMAGE>
    
  • –network:配置网络,不同的swarm服务可以共有一个覆盖网络,这样不同的服务之间就可以通讯,网络有可以做很多的配置,最基本的用法如下:

    docker network create --driveroverlay my-network
    docker service create \
    	--replicas3 \
    	--networkmy-network \
    	--namemy-web \
    	nginx
    
  • –config: 设置配置文件

  • –secret:设置机密信息,与–config类似

  • –reserve-memory:配置服务启动需要最少的内存,如果没有满足要求的节点,则服务将保持挂起状态,直到合适的节点可以运行其任务为止

  • –reserve-cpu:配置服务启动需要最少的cpu个数,如果没有满足要求的节点,则服务将保持挂起状态,直到合适的节点可以运行其任务为止

  • –constraint:设置任务节点约束,只有满足约束的节点会被调度运行任务副本,需要配置集群内的节点的标签使用,用于调度任务在合适的节点上运行,避免调度到一些不符合服务运行条件的节点,导致服务运行失败

  • –placement-pref:配置放置首选项,与–constraint类似,可以结合–constraint、–reserve-cpu、–reserve-memory一起使用,筛选合适的节点。要注意的是,不要做出无法达到的条件筛选。

  • –update-delay:更新策略,两次更新任务之间间隔多长,默认0s,可用时间单位:ns、us、ms、s、m、h

  • –update-failure-action:更新失败时的操作,默认为pause,可用值:pause、continue、rollback

  • –update-max-failure-ratio:可以容忍的更新失败比例,默认时0,可用值为0到1的浮点数,表示更新失败的百分比,1为100%

  • –update-monitor:更新之后需要监控容器正常运行多长时间,默认是5s

  • –update-parallelism:每次同时根据的任务副本个数,默认是1

  • –rollback-delay:回滚策略,两次回滚任务之间间隔多长,默认0s,可用时间单位:ns、us、ms、s、m、h

  • –rollback-failure-action:回滚失败时的操作,默认为pause,可用值:pause、continue、rollback

  • –rollback-max-failure-ratio:可以容忍的回滚失败比例,默认时0,可用值为0到1的浮点数,表示更新失败的百分比,1为100%

  • –rollback-monitor:回滚之后需要监控容器正常运行多长时间,默认是5s

  • –rollback-parallelism:每次同时根据的任务副本个数,默认是1

  • –restart-condition:配置重启策略,可用值有:“none”、“on-failure”、“any”,默认是any

  • –restart-delay:尝试重启的时间间隔

  • –restart-max-attempts:尝试重启的最大次数

  • –with-registry-auth:服务创建的时候,各个工作节点同步管理节点的私有仓库登录凭证,从而各个节点可用拉取私有仓库镜像

docker service ls [OPTIONS]

列出所有服务,命令常用选项如下:

  • -f:对服务进行过滤
  • -q:只展示id

docker service ps [OPTIONS] SERVICE [SERVICE…]

列出一个或多个服务的详细任务信息,可以查看服务对于的任务副本的状态,具体在哪个节点等,命令常用选项如下:

  • -f:对任务进行过滤
  • -q:只展示id

docker service inspect [OPTIONS] SERVICE [SERVICE…]

查看一个或多个服务的元信息,能够了解到服务内部的很多配置和一些原理,常用选项如下:

  • –pretty:对服务信息进行格式化

docker service logs [OPTIONS] SERVICE|TASK

通过服务或任务的名称、id,输出服务或者任务的日志信息,对于排查错误有用,常用选项如下:

  • –since:给定一个时间戳,输出从给定时间之后的日志
  • -n:输出最后多少行
  • -t:显示每行日志的时间

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS…]

设置服务的副本个数,选项如下:

  • -d:后台运行命令

docker service update [OPTIONS] SERVICE

按照新的配置更新服务,update命令的大部分参数配置会关闭原有的副本容器,重新启动新的容器。常用选项如下:

一些是和create命令中的参数一样的,如–rollback-delay、–update-delay等,这一部分就没有列出来了。

  • –image:更新服务使用的镜像,一般用于对服务进行迭代升级,指定新的镜像标签重启容器
  • –replicas:更新服务的副本数量,用于扩容缩容,和docker service scale功能相同
  • –replicas-max-per-node:单个节点最多可部署多少个副本
  • –env-add:添加或更新环境变量
  • –env-rm:移除环境变量
  • –workdir:更改工作目录
  • –user:更改用户
  • –publish-add:添加或更新端口映射,与create命令中的格式一样
  • –publish-rm:通过目标端口删除已发布的端口
  • –mount-add:新增或更新卷映射配置
  • –mount-rm:移除卷映射配置
  • –network-add:添加网络
  • –network-rm:移除网络
  • –config-add:添加或者更新服务配置文件
  • –config-rm:删除服务配置文件
  • –secret-add:添加或更新机密数据
  • –secret-rm:删除机密数据
  • –reserve-memory:配置服务启动需要最少的内存
  • –reserve-cpu:配置服务启动需要最少的cpu个数
  • –constraint-add:添加或更新约束
  • –constraint-rm:删除约束
  • –placement-pref-add:添加或更新首选项
  • –placement-pref-rm:删除首选项
  • –rollback:回滚到之前的版本,不能和update除回滚配置之外的其他命令一起使用,相当于docker service rollback命令
  • –force:强制更新,update命令有一些参数不会导致启动新的容器,通过这个参数可以强制启动新的容器

docker service rollback [OPTIONS] SERVICE

按照回滚配置回滚一个服务,选项如下:

  • -d:后台运行命令

docker service rm SERVICE [SERVICE…]

移除一个或者多个服务,需要注意的是,该命令不会二次确认,使用的时候请小心

docker stack

Docker Stack 编排依赖于声明文件,其实也就是Docker Compse文件,不过Stack对于Compose文件有一个要求,文件的规范版本(顶层关键字version)必须是“3.0”或以上,而且一些Docker Compse文件中的关键字不受支,如:build、cgroup_parent、container_name、devices、tmpfs、external_links、links、network_mode、restart、security_opt、userns_mode

由于 build 关键字在 Stack 中不受支持,不能在编排的过程中构建镜像,docker stack部署用到的镜像必须是已经构建发布好并且发布到 docker 仓库的,在服务编排过程各个节点中直接从 docker 仓库拉取。

命令 说明
docker stack deploy 部署新的堆栈或更新现有堆栈
-c:指定compose文件路径
–with-registry-auth:服务创建的时候,各个工作节点同步管理节点的私有仓库登录凭证,从而各个节点可用拉取私有仓库镜像
docker stack ls [OPTIONS] 列出现有堆栈
docker stack ps [OPTIONS] STACK 列出堆栈中的任务
docker stack rm [OPTIONS] STACK [STACK…] 删除堆栈
docker stack services [OPTIONS] STACK 列出堆栈中的服务
docker stack down 移除某个堆栈(不会删除数据)

猜你喜欢

转载自blog.csdn.net/al6nlee/article/details/130517875
今日推荐