欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 05.Docker 容器命令

05.Docker 容器命令

2025/2/22 7:23:26 来源:https://blog.csdn.net/weixin_56408536/article/details/145763108  浏览:    关键词:05.Docker 容器命令

Docker 容器命令

  • Docker 容器命令
    • 1. 启动容器用法
    • 2. 显示当前存在容器
    • 3. 查看容器内的进程
    • 4. 查看容器资源使用情况
    • 5. 查看容器的详细信息
    • 6. 删除容器
    • 7. 容器的启动和停止
    • 8. 给正在运行的容器发信号
    • 9. 进入正在运行的容器
    • 10. 暴露所有容器端口
    • 11. 指定端口映射
    • 12. 查看容器的日志
    • 13. 传递运行命令
    • 14. 容器内部的hosts文件
    • 15. 指定容器DNS
    • 16. 容器内和宿主机之间复制文件
    • 17. 传递环境变量
    • 18. 使用 systemd 控制容器运行

Docker 容器命令

1. 启动容器用法

[root@Ubuntu2204 ~]#docker run --help用法: docker run [选项] 镜像 [命令] [参数...]docker run [OPTIONS] IMAGE [COMMAND] [ARG...]选项:--add-host list                  添加自定义主机到 IP 的映射 (格式: host:ip)-a, --attach list                    连接到标准输入、输出或错误流--blkio-weight uint16            限制块设备 IO(相对权重),范围为 101000,或 0 表示禁用 (默认值: 0)--blkio-weight-device list       块设备 IO 权重(相对设备权重)(默认值: [])--cap-add list                   添加 Linux 能力--cap-drop list                  删除 Linux 能力--cgroup-parent string           容器的可选父 cgroup--cgroupns string                使用的 cgroup 命名空间 (host|private)'host':    在 Docker 主机的 cgroup 命名空间中运行容器'private': 在容器自己的私有 cgroup 命名空间中运行容器'':        使用守护程序通过 default-cgroupns-mode 配置的 cgroup 命名空间 (默认值)--cidfile string                 将容器 ID 写入文件--cpu-period int                 限制 CPU CFS(完全公平调度器)周期--cpu-quota int                  限制 CPU CFS(完全公平调度器)配额--cpu-rt-period int              限制 CPU 实时周期(微秒)--cpu-rt-runtime int             限制 CPU 实时运行时间(微秒)-c, --cpu-shares int                 CPU 共享(相对权重)--cpus decimal                   CPU 数量--cpuset-cpus string             允许执行的 CPU(格式: 0-3, 0,1)--cpuset-mems string             允许执行的内存节点(格式: 0-3, 0,1)-d, --detach                         在后台运行容器并打印容器 ID--detach-keys string             覆盖分离容器的键序列--device list                    将主机设备添加到容器--device-cgroup-rule list        向允许的设备列表中添加规则--device-read-bps list           限制从设备读取的速度(每秒字节数)(默认值: [])--device-read-iops list          限制从设备读取的速度(每秒 IO 次数)(默认值: [])--device-write-bps list          限制写入设备的速度(每秒字节数)(默认值: [])--device-write-iops list         限制写入设备的速度(每秒 IO 次数)(默认值: [])--disable-content-trust          跳过镜像验证 (默认值: true)--dns list                       设置自定义 DNS 服务器--dns-option list                设置 DNS 选项--dns-search list                设置自定义 DNS 搜索域--domainname string              容器 NIS 域名--entrypoint string              覆盖镜像的默认 ENTRYPOINT-e, --env list                       设置环境变量--env-file list                  从文件中读取环境变量--expose list                    暴露端口或端口范围--gpus gpu-request               添加到容器的 GPU 设备 ('all' 表示传递所有 GPU)--group-add list                 添加额外的组加入--health-cmd string              检查健康状态运行的命令--health-interval duration       运行检查的时间间隔 (ms|s|m|h) (默认值: 0s)--health-retries int             报告不健康所需的连续失败次数--health-start-period duration   容器初始化前的启动期,在此期间不会开始健康重试倒计时 (ms|s|m|h) (默认值: 0s)--health-timeout duration        允许单次检查运行的最大时间 (ms|s|m|h) (默认值: 0s)--help                           打印使用说明-h, --hostname string                容器主机名--init                           在容器内运行 init,转发信号并回收进程-i, --interactive                    即使未连接也保持标准输入打开--ip string                      IPv4 地址 (例如: 172.30.100.104)--ip6 string                     IPv6 地址 (例如: 2001:db8::33)--ipc string                     使用的 IPC 模式--isolation string               容器隔离技术--kernel-memory bytes            内核内存限制-l, --label list                     设置容器的元数据--label-file list                从换行分隔的文件中读取标签--link list                      添加链接到另一个容器--link-local-ip list             容器的 IPv4/IPv6 链接本地地址--log-driver string              容器的日志驱动--log-opt list                   日志驱动选项--mac-address string             容器的 MAC 地址 (例如: 92:d0:c6:0a:29:33)-m, --memory bytes                   内存限制--memory-reservation bytes       内存软限制--memory-swap bytes              交换限制等于内存加交换: '-1' 表示启用无限交换--memory-swappiness int          调整容器内存交换行为 (范围: 0100) (默认值: -1)--mount mount                    将文件系统挂载附加到容器--name string                    为容器分配名称--network network                将容器连接到网络--network-alias list             为容器添加网络作用域别名--no-healthcheck                 禁用容器指定的 HEALTHCHECK--oom-kill-disable               禁用 OOM Killer--oom-score-adj int              调整主机的 OOM 偏好 (范围: -10001000)--pid string                     使用的 PID 命名空间--pids-limit int                 调整容器的 PIDs 限制 (设置为 -1 表示不限制)--platform string                如果服务器支持多平台,则设置平台--privileged                     给予此容器扩展权限-p, --publish list                   将容器的端口发布到主机-P, --publish-all                    将所有暴露的端口发布到随机端口--pull string                    在运行前拉取镜像 ("always"|"missing"|"never") (默认值: "missing")--read-only                      以只读方式挂载容器的根文件系统--restart string                 容器退出时应用的重启策略 (默认值: "no")--rm                             容器退出时自动删除容器--runtime string                 此容器使用的运行时--security-opt list              安全选项--shm-size bytes                 /dev/shm 的大小--sig-proxy                      将接收到的信号代理给进程 (默认值: true)--stop-signal string             停止容器的信号 (默认值: "SIGTERM")--stop-timeout int               停止容器的超时时间(秒)--storage-opt list               容器存储驱动选项--sysctl map                     Sysctl 选项 (默认值: map[])--tmpfs list                     挂载 tmpfs 目录-t, --tty                            分配伪终端--ulimit ulimit                  Ulimit 选项 (默认值: [])-u, --user string                    用户名或 UID (格式: <name|uid>[:<group|gid>])--userns string                  使用的用户命名空间--uts string                     使用的 UTS 命名空间-v, --volume list                    绑定挂载卷--volume-driver string           容器的可选卷驱动--volumes-from list              从指定的容器挂载卷-w, --workdir string                 容器内的工作目录注意: 容器启动后,如果容器内没有前台运行的进程,将自动退出停止。[root@Ubuntu2204 ~]#docker run hello-world# 启动的容器在执行完 shell 命令就退出,用于测试
[root@Ubuntu2204 ~]#docker run alpine echo "HELLO"# 指定容器名称
[root@Ubuntu2204 ~]#docker run --name web1 nginx# 运行交互式容器并退出
[root@Ubuntu2204 ~]#docker run -it --name web2 nginx
root@35a32e21d4a3:/# exit
exit注意:用 exit 退出后容器也停止,同时按三个键 ctrl+p+q 退出后容器不会停止。# 一次性运行容器,退出后立即删除,用于测试
[root@Ubuntu2204 ~]#docker run --rm busybox ls /# 开机自动运行容器
[root@Ubuntu2204 ~]#docker run -d --name nginx --restart=always nginx
[root@Ubuntu2204 ~]#reboot # 设置容器内的主机名
[root@Ubuntu2204 ~]#docker run -it --name b1 -h b1.com busybox
/ # hostname
b1.com

重启策略 --restart

策略描述
no不要自动重启容器。(默认)
on-failure[:max-retries]如果容器由于错误而退出,请重新启动容器,该错误表现为非零退出代码。(可选)使用该选项限制 Docker 守护程序尝试重新启动容器的次数。该策略仅在容器退出失败时提示重启。如果守护程序重新启动,它不会重新启动容器。
always如果容器停止,请始终重新启动容器。如果手动停止,则仅当 Docker 守护程序重新启动或手动重新启动容器本身时,才会重新启动。
unless-stopped当容器停止(手动或其他方式)时,即使在 Docker 守护程序重新启动后也不会重新启动。

–privileged 选项

大约在 0.6 版,–privileged 选项被引入 docker。使用该参数,container 内的 root 拥有真正的 root 权限。 否则,container 内的 root只是外部的一个普通用户权限。privileged 启动的容器,可以看到很多 host 上的设备,并且可以执行 mount。甚至允许你在 docker 容器中启动 docker 容器。

什么是守护式容器: 能够长期运行 无需交互式会话 适合运行应用程序和服务

2. 显示当前存在容器

[root@Ubuntu2204 ~]#docker ps --help 用法: docker ps [选项]列出容器选项:-a, --all             显示所有容器(默认仅显示正在运行的容器)-f, --filter 过滤器    根据提供的条件过滤输出--format 字符串    使用 Go 模板格式化容器输出-n, --last 整数        显示最后创建的 n 个容器(包括所有状态)(默认值: -1)-l, --latest          显示最新创建的容器(包括所有状态)--no-trunc        不截断输出-q, --quiet           仅显示容器 ID-s, --size            显示总文件大小[root@Ubuntu2204 ~]#docker ps -a

3. 查看容器内的进程

[root@Ubuntu2204 ~]#docker top --help 用法: docker top 容器 [ps 选项]显示容器中运行的进程[root@Ubuntu2204 ~]#docker run -it --name web1 nginx:stable-alpine3.20-perl
[root@Ubuntu2204 ~]#docker top web1

4. 查看容器资源使用情况

[root@Ubuntu2204 ~]#docker stats --help用法: docker stats [选项] [容器...]显示一个或多个容器资源使用情况的实时流选项:-a, --all             显示所有容器(默认仅显示正在运行的容器)--format 字符串    使用 Go 模板格式化输出--no-stream       禁用实时统计信息流,仅拉取第一个结果--no-trunc        不截断输出[root@Ubuntu2204 ~]#docker run -it --name web1 nginx:stable-alpine3.20-perl
[root@Ubuntu2204 ~]#docker stats web1

5. 查看容器的详细信息

docker inspect 可以查看 docker 各种对象的详细信息,包括:镜像,容器,网络等。

[root@Ubuntu2204 ~]#docker inspect --help 用法: docker inspect [选项] 名称|ID [名称|ID...]选项:-f, --format 字符串   使用给定的 Go 模板格式化输出-s, --size           如果类型为容器,则显示总文件大小--type 字符串     返回指定类型的 JSON 数据[root@Ubuntu2204 ~]#docker inspect web1

6. 删除容器

docker rm 可以删除容器,即使容器正在运行当中,也可以被强制删除掉。

[root@Ubuntu2204 ~]#docker rm --help用法: docker rm [选项] 容器 [容器...]删除一个或多个容器选项:-f, --force     强制删除正在运行的容器(使用 SIGKILL)-l, --link      删除指定的链接-v, --volumes   删除与容器关联的匿名卷[root@Ubuntu2204 ~]#docker container prune --help用法: docker container prune [选项]删除所有已停止的容器选项:--filter 过滤器   提供过滤值(例如 'until=<时间戳>')-f, --force           不提示确认,直接执行# 删除所有容器
[root@Ubuntu2204 ~]#docker rm -f `docker ps -a -q`
[root@Ubuntu2204 ~]#docker ps -a -q | xargs docker rm -f

7. 容器的启动和停止

docker start|stop|restart|pause|unpause 名称|ID# 批量正常启动或关闭所有容器
[root@Ubuntu2204 ~]#docker start $(docker ps -a -q)  
[root@Ubuntu2204 ~]#docker stop $(docker ps -a -q) 

8. 给正在运行的容器发信号

docker kill 可以给容器发信号,默认号 SIGKILL,即 9 信号。

[root@Ubuntu2204 ~]#docker kill --help用法: docker kill [选项] 容器 [容器...]终止一个或多个正在运行的容器选项:-s, --signal 字符串   发送到容器的信号 (默认为 "KILL")[root@Ubuntu2204 ~]#docker kill web1

9. 进入正在运行的容器

使用 exec 命令,在运行中的容器启动新进程,可以执行单次命令,以及进入容器 测试环境使用此方式,使用 exit 退出,但容器还在运行。

[root@Ubuntu2204 ~]#docker exec --help用法: docker exec [选项] 容器 名称 [参数...]在运行中的容器内执行命令选项:-d, --detach               分离模式:在后台运行命令--detach-keys 字符串    覆盖分离容器的键序列-e, --env 列表              设置环境变量--env-file 列表         从文件中读取环境变量-i, --interactive          即使未连接也保持标准输入打开--privileged           给予命令扩展权限-t, --tty                  分配伪终端-u, --user 字符串           用户名或 UID(格式: <name|uid>[:<group|gid>])-w, --workdir 字符串        容器内的工作目录#常见用法
docker exec -it 容器ID sh|bash[root@Ubuntu2204 ~]#docker exec -it fcd4687e3ba6 bash
root@fcd4687e3ba6:/# exit
exit

10. 暴露所有容器端口

容器启动后,默认处于预定义的 NAT 网络中,所以外部网络的主机无法直接访问容器中网络服务 docker run -P 可以将事先容器预定义的所有端口映射宿主机的网卡的随机端口,默认从 32768 开始使用随机端口时,当停止容器后再启动可能会导致端口发生变化。

-P , --publish-all=true | false 默认为false# 映射容器所有暴露端口至随机本地端口
[root@Ubuntu2204 ~]#docker run -itd --name web3 -P  nginx:stable-alpine3.20-perl# docker port 可以查看容器的端口映射关系
[root@Ubuntu2204 ~]#docker port web3

11. 指定端口映射

docker run -p 可以将容器的预定义的指定端口映射到宿主机的相应端口

注意: 多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同

# 容器 80 端口映射到宿主机本地端口 81
[root@Ubuntu2204 ~]#docker run  -p 81:80 --name nginx nginx# 修改已经创建的容器的端口映射关系
[root@Ubuntu2204 ~]#cat /var/lib/docker/containers/1e0f977af86bd0cf1f92e6c8b046b9fe146d731315ed1728a3929dbd43cbeb58/hostconfig.json PortBindings 后 80/tcp 对应的是容器内部的 80 端口,HostPort 对应的是映射到宿主机的端口 80 修改此处
"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"80"}]},

12. 查看容器的日志

docker logs 可以查看容器中运行的进程在控制台输出的日志信息

[root@Ubuntu2204 ~]#docker logs --help 用法: docker logs [选项] 容器获取容器的日志选项:--details        显示日志提供的额外详细信息-f, --follow         实时跟踪日志输出--since 字符串    显示自某个时间戳以来的日志(例如:2013-01-02T13:23:37Z 或相对时间如 42m 表示 42 分钟前)-n, --tail 字符串     从日志末尾显示的行数(默认值: "all")-t, --timestamps     显示时间戳--until 字符串    显示在某个时间戳之前的日志(例如:2013-01-02T13:23:37Z 或相对时间如 42m 表示 42 分钟前)

13. 传递运行命令

容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令

容器里的 PID 为 1 的守护进程的实现方式

  • 服务类: 如: Nginx,Tomcat,Apache ,但服务不能停
  • 命令类: 如: tail -f /etc/hosts ,主要用于测试环境,注意: 不要 tail -f <服务访问日志> 会产生不必要的磁盘 IO
[root@Ubuntu2204 ~]#docker run -d alpine:3.21.2 tail -f /etc/hosts

14. 容器内部的hosts文件

容器会自动将容器的 ID 加入自已的 /etc/hosts 文件中,并解析成容器的 IP

# 修改容器的 hosts文件
[root@Ubuntu2204 ~]#docker run -it --rm --add-host www.aaa.com:8.8.8.8 busybox

15. 指定容器DNS

容器的 dns 服务器,默认采用宿主机的 dns 地址,可以用下面方式指定其它的 DNS 地址

  • 将 dns 地址配置在宿主机
  • 在容器启动时加选项 --dns=x.x.x.x
  • 在 /etc/docker/daemon.json 文件中指定

注意:–dns 指定优先级更高

# 在容器启动时加选项指定 DNS 地址(--dns 8.8.8.8)、指定域名(--dns-search aaa.com)
[root@Ubuntu2204 ~]#docker run -it --rm --dns 8.8.8.8 --dns-search aaa.com busybox:latest
/ # cat /etc/resolv.conf
search aaa.com
nameserver 8.8.8.8# 在 /etc/docker/daemon.json 文件中指定
[root@Ubuntu2204 ~]#vim /etc/docker/daemon.json 
{"dns" : [  "114.114.114.114", "119.29.29.29"],"dns-search": [ "aaa.com", "bbb.org"]
}
[root@Ubuntu2204 ~]#systemctl restart docker

16. 容器内和宿主机之间复制文件

[root@Ubuntu2204 ~]#docker cp --help用法: docker cp [选项] 容器:源路径 目标路径|-  docker cp [选项] 源路径|- 容器:目标路径在容器和本地文件系统之间复制文件/文件夹  使用 '-' 作为源,从标准输入读取 tar 归档文件,并将其解压到容器中的目录目标。  
使用 '-' 作为目标,将容器源的 tar 归档文件流输出到标准输出。选项:-a, --archive       归档模式(复制所有 uid/gid 信息)  -L, --follow-link   始终在 SRC_PATH 中跟随符号链接  # 复制容器的文件至宿主机
[root@ubuntu2204 ~]#docker cp  b1:/etc/hosts /root# 宿主机文件复制到容器内
[root@ubuntu2204 ~]#docker cp /etc/hosts  b1:/root/

17. 传递环境变量

有些容器运行时,需要传递变量,可以使用 -e <参数> 或 --env-file <参数文件> 实现

变量参考链接: https://hub.docker.com/_/mysql

[root@ubuntu2204 ~]#docker run --name mysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.30

18. 使用 systemd 控制容器运行

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词