Docker 常用命令汇总

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
简介: Docker 常用命令汇总

启动 | 停止 docker 服务

#启动docker服务:
systemctl start docker 
service docker start

#停止docker服务:
systemctl stop docker 
service docker stop

#重启docker服务:
systemctl restart docker
service docker restart

#查看docker服务状态:
systemctl status docker 
service docker status

#设置开机启动docker服务:
systemctl enable docker

# 彻底卸载dokcer
yum list installed | awk '/docker/{print $1}' | xargs -r yum -y remove
rpm -qa | grep docker | xargs -r yum -y remove


镜像

镜像操作命令

查看本地镜像

docker images        # 查看本地docker镜像
# REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
# 镜像的仓库源        镜像的标签                镜像ID            镜像创建时间            镜像大小
# 同一个仓库源可以有多个TAG,表示这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如只使用tomcat,docker将默认使用tomcat:latest镜像

docker images -a            # 列出本地所有的镜像
docker images -p            # 只显示镜像ID
docker images --digests        # 显示镜像的摘要信息
docker images --no-trunc    # 显示完整的镜像信息

搜索和获取镜像

docker search 镜像名称                # 从Docker Hub上查找某个镜像
docker search -s 30 镜像名称        # 从Docker Hub上查找关注度大于30的某个镜像

docker pull 镜像名称:标签        # 从Docker Hub参考下载某个镜像。等价于:docker pull 镜像名:latest
docker push 镜像名称:标签        # 推送一个镜像到Docker Hub仓库

创建镜像

docker commit [OPTIONS] 容器名称或ID [镜像名称[:TAG]]
# [OPTIONS]:
      -a, --author    # string   作者信息
      -c, --change    # list     使用Dockerfile创建
      -m, --message    # string   提交信息
      -p, --pause              # 提交时暂停容器运行

# 基于容器创建一个新的镜像
docker commit -m "提交的描述信息" -a "作者" 容器名称或ID [镜像名称[:标签]]
# 示例:docker commit -m "新的tomcat" -a "lizq" f9e29e8455a5 mytomcat:1.2

docker build [OPTIONS] .            # 通过 Dockerfile 创建镜像
# [OPTIONS]主要参数如下:
    -f        # 指定Dockerfile路径,默认为当前目录
    -t        # 指定生成镜像的标签信息
    --rm     # 设置镜像成功后删除中间容器
    --no-cache    # 创建镜像的过程不使用缓存
# 示例:通过当前目录下的 Dockerfile 创建一个名为soar/centos:7.1的镜像。最后的.表示当前目录
docker build -t soar/centos:7.1 .

删除镜像

docker rmi 镜像名称:标签(镜像ID或部分ID)    # 删除某个镜像

docker rmi -f 镜像ID或镜像名称                # 强制删除某个镜像
docker rmi -f $(docker images -p)         # 通过 docker images -p 查询到的镜像ID来删除所有镜像
docker rmi -f 镜像ID或镜像名称1 镜像ID或镜像名称2        # 强制删除镜像1和镜像2

其他命令

docker tag 镜像id 仓库:标签        # 为镜像创建一个新的标签

# 将一个或多个镜像保存成tar镜像库存储文件文件
docker save 镜像名称:标签(镜像ID或部分ID) > 文件名.tar
docker save -o 文件名.tar 镜像名称:标签(镜像ID或部分ID)
docker save --output 文件名.tar 镜像名称:标签(镜像ID或部分ID)

# 从tar镜像库存储文件文件加载成镜像(不能对载入的镜像重命名)
docker load < 文件名.tar
docker load -i 文件名.tar
docker load --input 文件名.tar

# 将一个或多个容器导出为tar容器快照文件
docker export 容器名或容器ID > 文件名.tar
docker export -o 文件名.tar 容器名或容器ID
docker export --output 文件名.tar 容器名或容器ID

# 从tar容器快照文件加载成镜像(可以为镜像指定新名称)
docker import 文件名.tar 镜像名称:标签


Dockerfile

指令说明

指令 说明
FROM 指定所创建镜像的基础镜像
MAINTAINER 维护者信息
RUN 运行命令
CMD 启动容器时默认执行命令
LABEL 标签信息
EXPOSE 声明镜像内服务所监听的端口
ENV 环境变量
ADD 复制宿主机指定路径<src>下的内容到容器中的<dest>路径下,
<src>可以为URL,也可以是文件路径,如果为 tar 文件,会自动解压
COPY 复制宿主机指定路径<src>下的内容到容器中的<dest>路径下
USER 运行容器时的用户名
WORKDIR 配置工作目录
ARG 指定镜像内使用的参数


容器操作命令

查看容器

docker ps                # 列出当前所有正在运行的容器
docker ps -a            # 列出所有的容器
docker ps -l            # 列出最近创建的容器
docker ps -n 3            # 列出最近创建的3个容器
docker ps -q            # 只显示容器ID
docker ps --no-trunc    # 显示当前所有正在运行的容器完整信息

删除容器

docker rm 容器ID或名称               # 删除容器
docker rm -f 容器ID或名称           # 强制删除容器
docker rm -f $(docker ps -a -q)       # 删除多个容器

创建、启动容器

docker create 参数 镜像名称:标签        # 创建一个新的容器但不启动它
# 常用的参数如下:
         --name    # 为容器指定一个名称,启动多个时容器别名不能重复
         -d        # 后台运行容器,并返回容器ID,也即启动守护式容器,默认为false
         -i        # 以交互模式运行容器,默认为false,通常与-t同时使用
         -t        # 为容器重新分配一个伪输入终端,默认为false,通常与-i同时使用
         -P        # 随机端口映射
         -p        # 指定端口映射,有以下四种格式:
                      # ip:hostPort:containerPort
                      # ip::containerPort
                      # hostPort:containerPort
                      # containerPort
# 示例:docker create -it  ubuntu

docker start 容器ID或名称        # 启动容器
docker restart 容器ID或名称        # 重新启动容器
docker update --restart=always 容器id        # 更新容器运行参数(总是自动重启)

docker run [OPTIONS] IMAGE        # 根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
# 等价于先执行 docker create 命令,再执行 docker start 命令,并且如果没有这个镜像,会先下载镜像
# OPTIONS常用参数同docker create

进入和退出容器

docker exec 参数 容器ID或名称 执行命令    # 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
# 主要参数:
        # -i 打开标准输入接受用户输入命令
        # -t 分配伪终端
# 示例:进入到容器中,并启动一个bash
docker exec -it 容器ID或名称 bash
docker exec -it 容器ID或名称 /bin/bash

docker attach 容器ID                # 进入某个容器(使用exit退出后容器也跟着停止运行)

exit            # 退出并停止容器
Ctrl+p+q        # 只退出容器,不停止容器

终止容器

docker stop 容器ID或名称        # 停止容器
docker kill 容器ID或名称        # 强制停止容器

其他命令

docker rename 容器ID或名称        # 重命名一个容器

docker pause 容器ID或名称        # 暂停一个或多个容器的所有进程
docker unpause 容器ID或名称        # 恢复一个或多个容器内所有被暂停的进程

docker inspect 容器ID或名称        # 查看容器信息
docker stats 容器ID或名称        # 显示一个容器的实时资源占用

docker top 容器ID或名称            # 查看容器内运行的进程

docker logs -f -t --since --tail 容器ID或名称        # 查看容器日志
# 示例::docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5
        -f            # 查看实时日志
        -t            # 查看日志产生的日期
        --since        # 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
        --tail=10    # 查看最后的10条日志

docker cp 容器ID:容器内的文件路径 宿主机路径    # 从容器内拷贝文件到宿主机
# 示例:docker cp f9e29e8455a5:/tmp/yum.log /root


命令参数详解

docker run

参考:https://www.h3399.cn/202001/749890.html

1, 格式

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

创建一个新的容器并运行一个命令,IMAGE是镜像ID或镜像名称

2, OPTIONS 参数

简写, 名称参数 默认参数 描述
--add-host 添加自定义主机到 IP 的映射(host:ip)
--attach , -a 附加到 STDIN,STDOUT 或 STDERR
--blkio-weight IO(相对权重),介于 10 到 1000 之间,或者为 0 禁用(默认为 0)
--blkio-weight-device 块 IO 重量(相对设备重量)
--cap-add 添加 Linux 功能
--cap-drop 放弃 Linux 功能
--cgroup-parent 容器的可选父 cgroup
--cidfile 将容器 ID 写入文件
--cpu-count CPU 数量(仅 Windows)
--cpu-percent CPU 百分比(仅 Windows)
--cpu-period 限制 CPU CFS(完全公平的调度程序)期限
--cpu-quota 限制 CPU CFS(完全公平的调度程序)配额
--cpu-rt-period 限制 CPU 实时时间(以微秒为单位)
--cpu-rt-runtime 限制 CPU 实时运行时间(以微秒为单位)
-c, --cpu-shares CPU 份额(相对重量)
--cpus CPU 数量
--cpuset-cpus 允许执行的 CPU(0-3,0,1)
--cpuset-mems 允许执行的 MEM(0-3,0,1)
-d, --detach 在后台运行容器并打印容器 ID
--detach-keys 覆盖分离容器的键序列
--device 将主机设备添加到容器
--device-cgroup-rule 将规则添加到 cgroup 允许的设备列表中
--device-read-bps 限制从设备读取的速率(每秒字节数)
--device-read-iops 限制从设备读取的速率(每秒 IO)
--device-write-bps 限制对设备的写入速率(每秒字节数)
--device-write-iops 限制对设备的写入速率(每秒 IO)
--disable-content-trust true 跳过图像验证
--dns 设置自定义 DNS 服务器 (例如: 8.8.8.8)
--dns-opt 设定 DNS 选项
--dns-option 设定 DNS 选项
--dns-search 设置自定义 DNS 搜索域
--domainname 容器 NIS 域名
--entrypoint 覆盖图像的默认 ENTRYPOINT
-e, --env 设置环境变量
--env-file 读入环境变量文件
--expose 公开一个或多个端口 (8080,8081)
--gpus API 1.40+GPU 设备添加到容器中(“全部” 传递所有 GPU)
--group-add 添加其他群组即可加入
--health-cmd 运行命令以检查运行状况
--health-interval 运行检查之间的时间(ms
--health-retries 需要连续报告不健康状况
--health-start-period API 1.29+ 容器在开始运行状况重试倒计时(ms
--health-timeout 允许执行一次检查的最长时间(ms
--help 打印用量
-h, --hostname 容器主机名 (例如: 例如: localhost)
--init API 1.25+ 在容器内运行一个初始化程序,以转发信号并获取进程
-i, --interactive 即使未连接 STDIN 也保持打开状态(交互式执行容器)
--io-maxbandwidth 系统驱动器的最大 IO 带宽限制(仅 Windows)
--io-maxiops 系统驱动器的最大 IOps 限制(仅 Windows)
--ip IPv4 地址(例如 172.30.100.104)
--ip6 IPv6 地址(例如 2001:db8 :: 33)
--ipc 使用的 IPC 模式
--isolation 集装箱隔离技术
--kernel-memory 内核内存限制
-l, --label 在容器上设置元数据
--label-file 读入行分隔的标签文件
--link 将链接添加到另一个容器
--link-local-ip 容器 IPv4 / IPv6 链接本地地址
--log-driver 容器的日志记录驱动程序
--log-opt 日志驱动程序选项
--mac-address 容器 MAC 地址(例如 92:d0:c6:0a:29:33)
-m,--memory 内存限制
--memory-reservation 内存软限制
--memory-swap 交换限制等于内存加交换:“-1” 以启用无限交换
--memory-swappiness -1 调整容器内存交换(0 到 100)
--mount 将文件系统挂载附加到容器
--name 为容器分配一个名称
--net 网络模式 (host, bridge)
--net-alias 为容器添加网络范围的别名
--network 网络名 (可以多个容器公用一个网络名, 这样多容器会在同一个网络环境下)
--network-alias 网络别名 (未知)
--no-healthcheck 禁用任何容器指定的健康检查
--oom-kill-disable 禁用 OOM 杀手
--oom-score-adj 调台主持人的 OOM 首选项(-1000 至 1000)
--pid 使用的 PID 名称空间
--pids-limit 调整容器 pids 限制(将 - 1 设置为无限制)
--platform 实验(守护程序)API 1.32+ 如果服务器具有多平台功能,请设置平台
--privileged 赋予此容器扩展的特权
-p, --publish 将容器的端口发布到主机(主机端口:容器端口)
-P, --publish-all 将所有公开的端口发布到随机端口
--read-only 将容器的根文件系统挂载为只读
--restart no 容器退出时重新启动策略以应用
no 默认策略,在容器退出时不重启容器
on-failure 在容器非正常退出时(退出状态非0),才会重启容器
on-failure:n 在容器非正常退出时重启容器,最多重启n次
always 在容器退出时总是重启容器
--rm 退出时自动删除容器
--runtime 用于此容器的运行时
--security-opt 安全选项
--shm-size / dev / shm 的大小
--sig-proxy true 代理接收到该过程的信号
--stop-signal SIGTERM 停止容器的信号
--stop-timeout API 1.25+ 超时(以秒为单位)以停止容器
--storage-opt 容器的存储驱动程序选项
--sysctl Sysctl 选项
--tmpfs 挂载 tmpfs 目录
-t, --tty 分配伪 TTY(虚拟终端)
--ulimit Ulimit 选项
-u, --user 用户名或 UID(格式:< 名称
--userns 要使用的用户名称空间
--uts 使用的 UTS 名称空间
-v,--volume 绑定挂载卷(主机目录:容器目录)
--volume-driver 容器的可选音量驱动器
--volumes-from 从指定的容器挂载卷
-w,--workdir 容器内的工作目录

3,Command 和 Args:进程的命令和参数

# 指定了容器进程的命令为: /kube-dns,并指定了三个参数:--domain=cluster.local. --dns-port=10053 和 -v 2
docker run --name=kubedns nginx:latest /kube-dns --domain=cluster.local. --dns-port=10053 -v 2

4,案例

# 使用镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为mynginx
docker run --name mynginx -d nginx:latest

# 使用镜像 nginx:latest 以后台模式启动一个容器,并将容器的80端口映射到主机随机端口
docker run -P -d nginx:latest

# 使用镜像 nginx:latest 以后台模式启动一个容器,将容器的 80 端口映射到主机的 8080 端口,主机的目录 /data 映射到容器的 /data
docker run -p 8080:80 -v /data:/data -d nginx:latest

# 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

# 复制‘ubuntu’容器并且重命名为test且运行,然后以伪终端交互式方式进入容器,运行bash
docker run --name test -ti ubuntu /bin/bash

# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash

# 以镜像soar/centos:7.1创建名为test的容器,并以后台模式运行,并做端口映射到宿主机2222端口,P参数重启容器宿主机端口会发生改变
docker run -d -p 2222:22 --name test soar/centos:7.1

# echo "hello world" 会覆盖 hello_jmz 的 CMD
docker run -it hello_jmz echo "hello world"

# 后台运行并打印容器 iD, 将容器的 8080 端口映射到主机的 8081, 将当前的 hosts 文件挂载到容器的 /etc/hosts, 已只读的方式挂载. 结束自动删除容器
docker run -d -p 8081:8080 -v ./hosts:/etc/hosts:ro --rm playgateway

# 容器挂掉时总是重启, 容器名为 platformui , 使用网络 my_net, 没有会创建
docker run --restart=always --network=my_net --name platformui  platformpcweb

# 已交互的形式 进入 CentOS 容器, 退出后, 删除容器
docker run -it --rm CentOS bash


docker update

更新一个或多个运行中容器的配置

OPTIONS 说明:

名称 描述
--blkio-weight 阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止)
--cpu-period 限制CPU CFS(完全公平的调度程序)期限
--cpu-quot 限制CPU CFS(完全公平的调度程序)配额
--cpu-rt-period API 1.25+,将CPU实时时间限制为微秒
--cpu-rt-runtime API 1.25+,将CPU实时运行时间限制为微秒
--cpu-shares, -c CPU份额(相对权重)
--cpus API 1.29+,CPU数量
--cpuset-cpus 允许执行的CPU(0-3,0,1)
--cpuset-mem 允许执行的MEM(0-3,0,1)
--kernel-memory 内核内存限制
--memory-swap 交换限制等于内存加交换,“-1”以启用无限交换
--memory-reservatio 内存软限制
--memory, -m 内存限制
--pids-limit API 1.40+,调节容器pids限制(-1表示无限制)
--restart 容器退出时重新启动策略以应用

实例

# 更新容器的重启策略
docker update --restart=always 容器ID或名称

# 更新 CPU 共享数量
docker update --cpu-shares 512 容器ID或名称

# 更新容器内存
docker update -m 500M 容器ID或名称


docker system 命令

参考:docker prune命令 可定时清理不常用数据

# 查看 Docker 整体磁盘使用率的概况,包括镜像、容器和(本地)volume
docker system df

# 删除所有关闭的容器以及dangling镜像
docker system prune
    # 注意:This will remove:
        # - all stopped containers     # 清理停止的容器
        # - all networks not used by at least one container     # 清理没有使用的网络
        # - all dangling images     # 清理废弃的镜像
        # - all build cache         # 清理构建缓存

# 强制深度清理。删除除开真正在使用的镜像,容器,数据卷以及网络的其他所有docker相关的东西
docker system prune -af
    # -a    所有的
    # -f    强制
# 注意:生产环境使用该命令需谨慎,因为一些备用镜像(用于备份,回滚等)有时候需要用到如果这些镜像被删除了,则运行容器时需要重新下载

# 删除悬空没有 tag 标记的镜像。慎用-a选项,将删除当前没有关联运行容器的镜像
docker image prune
# 删除停止运行的容器
docker container prune
# 删除不被容器引用的网络资源
docker network prune
# 删除不被引用的本地数据卷
docker volume prune


其他命令

docker -v    或者  docker --version    # 查看docker版本号
docker version        # 查看docker版本详情
docker info            # 查看docker详细信息
docker --help        # 查看docker命令


策略方案

容器自动重启

docker-重启linux机器后Docker服务及容器自动启动

1、docker服务自动重启

systemctl enable docker
# 或
systemctl enable docker.service

2、容器重启,首先要保证已经设置docker服务自动重启

2.1 在启动容器时,添加--restart=always参数,如

docker run --restart=always

2.2 如果容器已经启动,可以使用命令更新参数

docker update --restart=always 容器id或名称
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
安全 Docker 容器
|
3月前
|
网络安全 数据安全/隐私保护 Docker
|
19天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
132 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
26天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
189 77
|
23天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
86 24
|
2月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
1155 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
25天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
111 6
|
4月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
210 56
|
3月前
|
存储 监控 安全
|
3月前
|
存储 关系型数据库 MySQL

热门文章

最新文章