docker常用命令汇总
1. docker命令归类
生命周期管理
docker [run| start| stop| restart| kill| rm| pause| unpause]
容器操作管理
docker [ps | inspect| top| attach| logs| events| wait| port| export]
容器rootfs命令
docker [commit| cp| diff]
镜像仓库管理
docker [login| pull| push| search]
本地镜像管理
docker [images| rmi| tag| build| history| save| import]
others
docker [info |version]
2. 命令用法和示例
build
说明: 通过Dockerfile创建镜像
语法:docker build [OPTIONS] PATH | URL | -
示例:docker build -t helloworld:0.0.1 .
images
说明: 列出本地所有的镜像
语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
示例:docker images
start/stop/restart
说明: 启动、停止、重启一个容器
语法:docker start/stop/restart [OPTIONS] CONTAINER [CONTAINER...]
示例:docker start/stop/restart myrunoob
attach
说明: 将终端依附到容器上
语法:docker attach [OPTIONS] CONTAINER
示例:docker attach my_container
exec
说明: 对一个启动的容器执行命令
语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
示例:
# 交互式终端操作ID为ab328d51ab46的容器
docker exec -it ab328d51ab46 bash
# 在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本
docker exec -it mynginx /bin/sh /root/runoob.sh
commit
说明: 通过容器创建本地镜像
语法: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
示例: docker commit centos_v1 centos:v1
cp
说明: 在宿主机和容器之间相互拷贝文件
语法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
示例:
# 容器mysql中/usr/local/bin/docker-entrypoint.sh文件,可如下方式copy到宿主机
docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root
# 将该文件重新copy回容器
docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/
create
说明: 仅创建一个容器
语法: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
# 使用镜像nginx:latest创建一个容器,并将容器命名为
myrunoob docker create --name myrunoob nginx:latest
rm
说明: 删除一个或多个容器
语法:docker rm [OPTIONS] CONTAINER [CONTAINER...]
示例:
# 移除全部容器
docker rm $(docker ps -a -q)
# 强制删除容器db01、db02
docker rm -f db01、db02
# 移除容器nginx01对容器db01的连接,连接名db
docker rm -l db
# 删除容器nginx01,并删除容器挂载的数据卷
docker rm -v nginx01
rmi
说明: 删除一个或多个镜像
语法:docker rmi [OPTIONS] IMAGE [IMAGE...]
示例:
# 移除镜像之前需要停止并移除要删除镜像对应的容器。
# 停止全部容器
docker stop $(docker ps -a -q)
# 移除全部容器
docker rm $(docker ps -a -q)
# 移除对应的ID
docker rmi imageID
run
说明: 创建并启动一个容器,等同于docker create + docker start命令
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
# 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
# 以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
# 以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。 docker run -p 80:80 -v /data:/data -d nginx:latest
# 以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
tag
说明: 标记本地镜像,将其归入某一个仓库。
语法:docker tag IMAGE[:TAG] IMAGE[:TAG]
示例:
# 将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像
docker tag ubuntu:15.10 runoob/ubuntu:v3
swarm
说明: 管理docker swarm 。
语法:docker swarm COMMAND
示例:
# 初始化swarm manager并制定网卡地址
docker swarm init --advertise-addr 192.168.10.117
# 强制删除集群,如果是manager,需要加–force
docker swarm leave --force
docker node rm docker-118
# 查看swarm worker的连接令牌
docker swarm join-token worker
# 查看swarm manager的连接令牌
docker swarm join-token manager
# 使旧令牌无效并生成新令牌
docker swarm join-token --rotate
# 加入docker swarm集群
docker swarm join --token SWMTKN-1-5d2ipwo8jqdsiesv6ixze20w2toclys76gyu4zdoiaf038voxj-8sbxe79rx5qt14ol14gxxa3wf 192.168.10.117:2377
# 查看集群中的节点
docker node ls
# 查看集群中节点信息
docker node inspect docker-117 --pretty
# 调度程序可以将任务分配给节点
docker node update --availability active docker-118
# 调度程序不向节点分配新任务,但是现有任务仍然保持运行
docker node update --availability pause docker-118
# 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务并在可用节点上安排它们
docker node update --availability drain docker-118
# 添加节点标签
docker node update --label-add label1 --label-add bar=label2 docker-117
# 删除节点标签
docker node update --label-rm label1 docker-117
# 将节点升级为manager
docker node promote docker-118
# 将节点降级为worker
docker node demote docker-118
# 查看服务列表
docker service ls
# 查看服务的具体信息
docker service ps redis
# 创建一个不定义name,不定义replicas的服务
docker service create nginx
# 创建一个指定name的服务
docker service create --name my_web nginx
# 创建一个指定name、run cmd的服务
docker service create --name helloworld alping ping docker.com
# 创建一个指定name、version、run cmd的服务
docker service create --name helloworld alping:3.6 ping docker.com
# 创建一个指定name、port、replicas的服务
docker service create --name my_web --replicas 3 -p 80:80 nginx
# 为指定的服务更新一个端口
docker service update --publish-add 80:80 my_web
# 为指定的服务删除一个端口
docker service update --publish-rm 80:80 my_web
# 将redis:3.0.6更新至redis:3.0.7
docker service update --image redis:3.0.7 redis
# 配置运行环境,指定工作目录及环境变量
docker service create --name helloworld --env MYVAR=myvalue --workdir /tmp --user my_user alping ping docker.com
# 创建一个helloworld的服务
docker service create --name helloworld alpine ping docker.com
# 更新helloworld服务的运行命令
docker service update --args “ping www.baidu.com” helloworld
# 删除一个服务
docker service rm my_web
# 在每个群组节点上运行web服务
docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest
# 创建一个overlay网络
docker network create --driver overlay my_network docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 my-network
# 创建服务并将网络添加至该服务
docker service create --name test --replicas 3 --network my-network redis
# 删除群组网络
docker service update --network-rm my-network test
# 更新群组网络
docker service update --network-add my_network test
# 创建群组并配置cpu和内存
docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx
# 更改所分配的cpu和内存
docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx
# 指定每次更新的容器数量
--update-parallelism
# 指定容器更新的间隔
--update-delay
# 定义容器启动后监控失败的持续时间
--update-monitor
# 定义容器失败的百分比
--update-max-failure-ratio
# 定义容器启动失败之后所执行的动作
--update-failure-action
# 创建一个服务并运行3个副本,同步延迟10秒,10%任务失败则暂停
docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
# 回滚至之前版本
docker service update --rollback mysql
# 自动回滚。如果服务部署失败,则每次回滚2个任务,监控20秒,回滚可接受失败率20%
docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest
# 创建服务并将目录挂在至container中
docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
########################################################################
# Bind带来的风险
# 1、绑定的主机路径必须存在于每个集群节点上,否则会有问题
# 2、调度程序可能会在任何时候重新安排运行服务容器,如果目标节点主机变得不健康或无法访问
# 3、主机绑定数据不可移植,当你绑定安装时,不能保证你的应用程序开发方式与生产中的运行方式相同
########################################################################
# 添加swarm配置
echo "this is a mysql config" | docker config create mysql -
# 查看配置
docker config ls
# 查看配置详细信息
docker config inspect mysql
# 删除配置
docker config rm mysql
# 添加配置
docker service update --config-add mysql mysql
# 删除配置
docker service update --config-rm mysql mysql
# 添加配置
docker config create homepage index.html
# 启动容器的同时添加配置
docker service create --name nginx --publish 80:80 --replicas 3 --config src=homepage,target=/usr/share/nginx/html/index.html nginx
diff
说明: 查看容器内发生改变的文件
语法:docker diff CONTAINER
示例:docker diff my_container
export
说明: 将容器打包,导出为tar文件格式
语法:docker export [OPTIONS] CONTAINER
示例:
# 将id为a404c6c174a2的容器按日期保存为tar文件。
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
history
说明: 显示镜像的创建过程
语法:docker history [OPTIONS] IMAGE
示例:docker history runoob/ubuntu:v3
import
说明: 导入一个类型为tar
的文件镜像
语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
示例:
# 从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4
docker import my_ubuntu_v3.tar runoob/ubuntu:v4
info
说明: 显示docker的系统信息
语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
示例:docker info
inspect
说明: 用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。
语法:docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...]
示例:docker inspect mysql:5.6
load
说明: 将打包的镜像导入。
语法:docker load [OPTIONS]
示例:docker load < busybox.tar
save
说明: 将指定镜像保存成 tar 归档文件。
语法:docker save [OPTIONS] IMAGE [IMAGE...]
示例:docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
ps
说明: 列出所有容器,默认只列出当前正在运行的容器,-a
参数可以查看所有状态的容器。
语法:docker ps [OPTIONS]
示例:
# 列出所有在运行的容器信息。
docker ps
# 最近创建的前10个容器
docker ps -n 10
# 列出所有创建的容器ID。
docker ps -a -q
kill
说明: 强制终止容器。
语法:docker kill [OPTIONS] CONTAINER [CONTAINER...]
示例:docker kill -s KILL mynginx
top
说明: 查看容器中运行的进程信息,支持 ps
命令参数。
语法:docker top CONTAINER [ps OPTIONS]
示例:
# 查看容器mynginx的进程信息。
docker top mynginx
# 查看所有运行容器的进程信息。
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
pull
说明: 从仓库中下载一个镜像,默认为docker hub
上。
语法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
示例:docker pull python:3.6
push
说明: 上传镜像到仓库,默认为docker hub
上,需要用户名和密码提前登录。
语法:docker push [OPTIONS] NAME[:TAG]
示例:docker push myapache:v1