Docker-容器相关命令解析

文章目录

  • [一、docker create 创建容器但不启动](#一、docker create 创建容器但不启动)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用参数](#2. 常用参数)
    • [3. 使用示例](#3. 使用示例)
      • [3.1 案例介绍](#3.1 案例介绍)
      • [3.2 实现演示](#3.2 实现演示)
  • [二、docker run 启动容器](#二、docker run 启动容器)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用参数](#2. 常用参数)
    • [3. 使用示例](#3. 使用示例)
      • [3.1 案例介绍](#3.1 案例介绍)
      • [3.2 实现演示:](#3.2 实现演示:)
  • [三、docker ps 查看容器运行状态](#三、docker ps 查看容器运行状态)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
      • [2.1 docker ps -a 显示所有未被删除的容器](#2.1 docker ps -a 显示所有未被删除的容器)
      • [2.2 docker ps --no-trunc 不截断内容](#2.2 docker ps --no-trunc 不截断内容)
      • [2.3 docker ps -l 和docker ps -n 查看最近创建的容器](#2.3 docker ps -l 和docker ps -n 查看最近创建的容器)
      • [2.4 docker ps -q 只返回容器ID](#2.4 docker ps -q 只返回容器ID)
  • [四、docker logs查看容器日志](#四、docker logs查看容器日志)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
  • [五、docker exec 在容器中执行命令](#五、docker exec 在容器中执行命令)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
      • [2.1 docker exec -d 后台运行结果](#2.1 docker exec -d 后台运行结果)
      • [2.2 docker exec -it 分配伪终端](#2.2 docker exec -it 分配伪终端)
  • [六、docker start/restart/stop/pause/unpause](#六、docker start/restart/stop/pause/unpause)
    • 概念理解铺垫
    • [1. docker stop 优雅关闭容器](#1. docker stop 优雅关闭容器)
    • [2. docker start 启动容器](#2. docker start 启动容器)
    • [3. docker restart 重启容器](#3. docker restart 重启容器)
    • [4. docker pause/unpause 冻结/恢复容器](#4. docker pause/unpause 冻结/恢复容器)
    • [5. docker kill 杀死容器](#5. docker kill 杀死容器)
  • [七、docker top 查询指定容器进程信息](#七、docker top 查询指定容器进程信息)
    • [1. 语法格式](#1. 语法格式)
    • [2. 使用示例](#2. 使用示例)
  • [八、docker stats 查看所有容器的资源占用情况](#八、docker stats 查看所有容器的资源占用情况)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
    • [3. 使用示例](#3. 使用示例)
  • [九、docker cp 容器和宿主机的数据拷贝](#九、docker cp 容器和宿主机的数据拷贝)
  • [十、docker update 更新容器配置](#十、docker update 更新容器配置)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
    • [3. 使用示例](#3. 使用示例)
  • [十一、docker container prune 批量删除容器](#十一、docker container prune 批量删除容器)
    • [1. 语法格式](#1. 语法格式)
    • [2. 常用选项](#2. 常用选项)
    • [3. 使用示例](#3. 使用示例)

一、docker create 创建容器但不启动

1. 语法格式

bash 复制代码
docker create [options] image [command] [arg...]

注意:[command]这里是用于设置容器的启动命令(CMD)


2. 常用参数

  • -p :指定端口映射,格式:宿主机端口:容器端口
  • --name:指定容器名字
  • -e :指定环境变量,例如:-e MYSQL_PWD='123A'
  • --cpuset-cpus :绑定容器到指定 CPU 运行,例如:--cpuset-cpus='0-2'--cpuset-cpus="0,1,2"
  • -m:指定最大内存:k(字节)、kb(千字节)、mb(兆字节)、g(吉字节)[1024进位]
  • --rm:退出 Shell 后,自动删除容器
  • --restart :自动重启策略(注意:--rm--restart 不能同时使用)

3. 使用示例

3.1 案例介绍

  1. 根据镜像,创建一个容器,但是不启动,指定容器名、退出后删除容器、绑定cpu、绑定端口号、设置容器启动命令
  2. 查看容器是否创建成功
  3. docker run启动该容器

3.2 实现演示

bash 复制代码
 docker images "*nginx*"
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
my_oom_nginx   v1        59ae3d65ef77   3 days ago     150MB
nginx          latest    d261fd19cb63   3 months ago   152MB
nginx          1.23.3    ac232364af84   2 years ago    142MB
 docker create \
> --name "docker_create_stu" \
> --rm \
> --cpuset-cpus="0,1" \
> -p 8081:80 \
> -m 128m \
> my_oom_nginx:v1 \
> nginx -g "daemon off;" 
7df6603948f06fcaa36a512b68013f5211dcf00dd8716701cfca86dcf4c0b0ab
 docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
 docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS    PORTS     NAMES
7df6603948f0   my_oom_nginx:v1   "nginx -g 'daemon of..."   6 seconds ago   Created             docker_create_stu
docker start docker_create_stu 
docker_create_stu

二、docker run 启动容器

1. 语法格式

bash 复制代码
docker run [options] image [command] [arg...]

小提示: command用于定义启动命令


2. 常用参数

  • -d: 后台运行容器,启动后只返回容器 ID。
  • -it : 启动并进入交互模式。-i 表示交互式,-t 表示分配一个伪终端,通常搭配 /bin/bash/bin/sh 使用。
  • -p : 端口映射,格式为 宿主机端口:容器端口
  • --name: 为容器指定一个自定义名称。
  • -h "host_name": 设置容器内部的 hostname(主机名)。
  • -e : 设置环境变量(例如 -e MYSQL_PWD="123")。
  • --cpuset-cpus : 限制容器使用的 CPU 核心,例如 "0,1,2" 表示绑定到前三个核心。
  • -m : 限制容器使用的最大内存(支持单位:bkmg)。
  • --rm: 容器退出(Shell 断开)后自动删除容器,常用于临时测试。
  • -v / --volume: 挂载数据卷,将宿主机目录映射到容器内部。

3. 使用示例

3.1 案例介绍

  1. 运行一个容器,并且指定容器名、绑定cpu、后台运行、设置内存大小、设定主机名
  2. 进入容器内部,查看主机名

3.2 实现演示:

bash 复制代码
docker images "*nginx*"
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
my_oom_nginx   v1        59ae3d65ef77   3 days ago     150MB
nginx          latest    d261fd19cb63   3 months ago   152MB
nginx          1.23.3    ac232364af84   2 years ago    142MB
docker run \
> --name "nginx_contianer_name" \
> --cpuset-cpus="0,1" \
> -d \
> -m 128m \
> -e MYSQL_PWD="123" \
> -h "nginx_hostname" \
> nginx:latest
826d3d83e3e1a0bcec7ee426676fb0af1ab157a95d695c486116a8ea041648f4
docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
826d3d83e3e1   nginx:latest   "/docker-entrypoint...."   6 seconds ago   Up 5 seconds   80/tcp    nginx_contianer_name
docker exec -it nginx_contianer_name /bin/bash
root@nginx_hostname:/# 

三、docker ps 查看容器运行状态

1. 语法格式

bash 复制代码
docker ps [options]

小提示: docker ps 不添加任何选项,默认显示正在运行的容器信息

2. 常用选项

2.1 docker ps -a 显示所有未被删除的容器

bash 复制代码
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS      NAMES
3baffca2226e   myweb:v1.8     "/usr/local/nginx/sb..."   4 minutes ago    Up 4 minutes    80/tcp     musing_knuth
73be834915c9   redis:latest   "docker-entrypoint.s..."   4 minutes ago    Up 4 minutes    6379/tcp   naughty_kare
826d3d83e3e1   nginx:latest   "/docker-entrypoint...."   15 minutes ago   Up 15 minutes   80/tcp     nginx_contianer_name
docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS      NAMES
3baffca2226e   myweb:v1.8     "/usr/local/nginx/sb..."   4 minutes ago    Up 4 minutes               80/tcp     musing_knuth
f0f626f8f293   myweb:v1.5     "/bin/bash"              4 minutes ago    Exited (0) 4 minutes ago              reverent_chaplygin
73be834915c9   redis:latest   "docker-entrypoint.s..."   4 minutes ago    Up 4 minutes               6379/tcp   naughty_kare
31eab7caa8bb   redis:latest   "docker-entrypoint.s..."   5 minutes ago    Exited (0) 5 minutes ago              vigilant_bartik
826d3d83e3e1   nginx:latest   "/docker-entrypoint...."   15 minutes ago   Up 15 minutes              80/tcp     nginx_contianer_name

根据上述信息,我们发现-a后,多了STATUS= Exited(已经关闭)的容器

2.2 docker ps --no-trunc 不截断内容

bash 复制代码
docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS      NAMES
3baffca2226e   myweb:v1.8     "/usr/local/nginx/sb..."   11 minutes ago   Up 11 minutes   80/tcp     musing_knuth
73be834915c9   redis:latest   "docker-entrypoint.s..."   12 minutes ago   Up 12 minutes   6379/tcp   naughty_kare
826d3d83e3e1   nginx:latest   "/docker-entrypoint...."   22 minutes ago   Up 22 minutes   80/tcp     nginx_contianer_name
docker ps --no-trunc
CONTAINER ID                                                       IMAGE          COMMAND                                          CREATED          STATUS          PORTS      NAMES
3baffca2226e2cba0b926e268c5bb728b8e8ffeecfad94f9c8b281317b593961   myweb:v1.8     "/usr/local/nginx/sbin/nginx -g 'daemon off;'"   11 minutes ago   Up 11 minutes   80/tcp     musing_knuth
73be834915c939456c38bee071f3c35d834f3e0d2a4debcc187e04fb6ded4744   redis:latest   "docker-entrypoint.sh redis-server"              12 minutes ago   Up 12 minutes   6379/tcp   naughty_kare
826d3d83e3e1a0bcec7ee426676fb0af1ab157a95d695c486116a8ea041648f4   nginx:latest   "/docker-entrypoint.sh nginx -g 'daemon off;'"   22 minutes ago   Up 22 minutes   80/tcp     nginx_contianer_name
root@iZ2ze8ve39i30yl0dhbqneZ:~# 

2.3 docker ps -l 和docker ps -n 查看最近创建的容器

bash 复制代码
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS      NAMES
3baffca2226e   myweb:v1.8     "/usr/local/nginx/sb..."   30 minutes ago   Up 30 minutes   80/tcp     musing_knuth
73be834915c9   redis:latest   "docker-entrypoint.s..."   30 minutes ago   Up 30 minutes   6379/tcp   naughty_kare
826d3d83e3e1   nginx:latest   "/docker-entrypoint...."   41 minutes ago   Up 41 minutes   80/tcp     nginx_contianer_name
docker ps -l
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS     NAMES
3baffca2226e   myweb:v1.8   "/usr/local/nginx/sb..."   30 minutes ago   Up 30 minutes   80/tcp    musing_knuth
docker ps -n 2
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS                      PORTS     NAMES
3baffca2226e   myweb:v1.8   "/usr/local/nginx/sb..."   30 minutes ago   Up 30 minutes               80/tcp    musing_knuth
f0f626f8f293   myweb:v1.5   "/bin/bash"              30 minutes ago   Exited (0) 30 minutes ago             reverent_chaplygin

2.4 docker ps -q 只返回容器ID

这种方式一般自动化脚本用的多

bash 复制代码
docker ps -q
3baffca2226e
73be834915c9
826d3d83e3e1

四、docker logs查看容器日志

1. 语法格式

bash 复制代码
docker logs [options] container

2. 常用选项

  • -t:显示时间戳
  • --since: 从某时间开始查看所有日志
  • -n 20:列出最新的20条日志
  • f: 实时跟踪日志

五、docker exec 在容器中执行命令

1. 语法格式

bash 复制代码
docker exec [options] container command  [arg...]

2. 常用选项

2.1 docker exec -d 后台运行结果

显面我们不加-d则目录会直接输出到当前终端,如果-d后台运行则不会:

bash 复制代码
docker exec -d 7cc06ab ls -lh
docker exec 7cc06ab  ls -lh
total 64K
lrwxrwxrwx   1 root root    7 Aug 24 16:20 bin -> usr/bin
drwxr-xr-x   2 root root 4.0K Aug 24 16:20 boot
.....
drwxr-xr-x   1 root root 4.0K Nov  3 20:44 var

2.2 docker exec -it 分配伪终端

-i和it一般一起使用,效果是分配一个伪终端进行持续交互:

bash 复制代码
docker exec -it busy_kilby /bin/bash
ls -lh
total 68K
lrwxrwxrwx   1 root root    7 Aug 24 16:20 bin -> usr/bin
drwxr-xr-x   2 root root 4.0K Aug 24 16:20 boot
drwxr-xr-x   5 root root  340 Feb  5 07:40 dev
drwxr-xr-x   1 root root 4.0K Nov  4 04:06 docker-entrypoint.d
-rwxr-xr-x   1 root root 1.6K Nov  4 04:05 docker-entrypoint.sh
drwxr-xr-x   1 root root 4.0K Feb  5 07:40 etc
drwxr-xr-x   2 root root 4.0K Aug 24 16:20 home
lrwxrwxrwx   1 root root    7 Aug 24 16:20 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Aug 24 16:20 lib64 -> usr/lib64
drwxr-xr-x   2 root root 4.0K Nov  3 20:44 media
drwxr-xr-x   2 root root 4.0K Nov  3 20:44 mnt
drwxr-xr-x   2 root root 4.0K Nov  3 20:44 opt
dr-xr-xr-x 199 root root    0 Feb  5 07:40 proc
drwx------   2 root root 4.0K Nov  3 20:44 root
drwxr-xr-x   1 root root 4.0K Feb  5 07:40 run
lrwxrwxrwx   1 root root    8 Aug 24 16:20 sbin -> usr/sbin
drwxr-xr-x   2 root root 4.0K Nov  3 20:44 srv
dr-xr-xr-x  13 root root    0 Nov  1 08:19 sys
drwxrwxrwt   2 root root 4.0K Nov  3 20:44 tmp
drwxr-xr-x   1 root root 4.0K Nov  3 20:44 usr
drwxr-xr-x   1 root root 4.0K Nov  3 20:44 var
root@container_host_name:/# cd root
root@container_host_name:~# ls -lh
total 0

小提示:

如果要用-it,必须使用一个shell解释器(命令),比如/bin/bash

六、docker start/restart/stop/pause/unpause

概念理解铺垫

docer容器运行的几个核心状态:

状态 (State) 中文描述 触发命令 (示例) 详细含义与资源占用
Created 初建状态 docker create 容器已创建,文件系统已准备好,但主进程尚未启动。不占用 CPU/内存资源,仅占用磁盘空间。
Running 运行状态 docker start docker run 容器的主进程(Init 进程)正在运行。占用 CPU 和 内存
Paused 暂停状态 docker pause 利用 Cgroups 冻结容器内所有进程。进程依然存在于内存中,但不再获取 CPU 时间片。用于临时挂起任务。
Stopped 停止状态 docker stop docker kill 容器主进程已退出。在 docker ps -a 中显示为 Exited不占用 CPU 和 内存,但保留容器的可写层数据。
Deleted 删除状态 docker rm 容器的元数据、配置和可写层文件被彻底从磁盘抹除。这是生命周期的终点

1. docker stop 优雅关闭容器

docker stop会发送一个sigterm(终止信号)给对应的容器进程,等待10s,让进行主动退出,同时保存相关配置(数据卷、网络配置、容器文件系统)。超过10s直接强制关闭(等价于docker kill

bash 复制代码
ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 2 seconds   80/tcp    busy_kilby
docker stop -t 20 977d80ec3def
977d80ec3def
docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS                     PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Exited (0) 4 seconds ago             busy_kilby

小提示:

可以通过-t选项修改默认等待时间,上述命令中docker stop -t 20将默认等待时间改成了20s

2. docker start 启动容器

用于启动Created或Exited状态的容器,其他章台不会生效

bash 复制代码
docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS                     PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Exited (0) 4 seconds ago             busy_kilby

docker start 977d80ec3def
977d80ec3def
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 2 seconds   80/tcp    busy_kilby

3. docker restart 重启容器

等价于 docker stop + docker :

bash 复制代码
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 2 seconds   80/tcp    busy_kilby
docker restart 977d80ec3def
977d80ec3def
docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 4 seconds   80/tcp    busy_kilby

4. docker pause/unpause 冻结/恢复容器

pause冻结的意思是保存当前容器的所有状态,但容器不继续运行,实现原理是保存该容器进程的内存资源,但是CPU不再调度该进程。unpause则会解除这个状态,让容器继续运行

bash 复制代码
docker pause 977d80ec3def
977d80ec3def
docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS                   PORTS     NAMES
docker stats 977d80ec3def
CONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O        PIDS 
977d80ec3def   busy_kilby   0.00%     5.699MiB / 1.634GiB   0.34%     1.16kB / 126B   2.78MB / 4.1kB   3 
docker unpause 977d80ec3def
977d80ec3def
docker stats 977d80ec3def
CONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS 
977d80ec3def   busy_kilby   0.12        -- / --             --        --        --          -- 

小提示:

  • docker stats可以查看容器的资源占用情况(展示宿主机上实际总cpu消耗率)
  • pause是Up的一个子状态

5. docker kill 杀死容器

这种方式简单粗暴,直接给容器"断电",谨慎使用。

优点是关闭速度快

bash 复制代码
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS          PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 21 minutes   80/tcp    busy_kilby
docker kill 977d80ec3def
977d80ec3def

七、docker top 查询指定容器进程信息

查看容器中运行的进程信息,支持 Linux的ps 命令参数

1. 语法格式

bash 复制代码
docker top container [linux_ps_options]

2. 使用示例

bash 复制代码
 docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS          PORTS     NAMES
977d80ec3def   nginx:latest   "/docker-entrypoint...."   5 days ago   Up 10 minutes   80/tcp    busy_kilby
docker top 977d80ec3def ps -aux
Error response from daemon: ps: error: process ID list syntax error
docker top 977d80ec3def -aux
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                3958704             0.0                 0.5                 14764               9040                ?                   Ss                  13:58               0:00                nginx: master process nginx -g daemon off;
systemd+            3958751             0.0                 0.2                 15220               3444                ?                   S                   13:58               0:00                nginx: worker process
systemd+            3958752             0.0                 0.2                 15220               3444                ?                   S                   13:58               0:00                nginx: worker process

小提示:

  • linux中ps -aux主要用于查看CPU、内存资源以及进程状态
  • linux中ps -ef 主要用于查看继承父子关系(含有PID PPID信息)

八、docker stats 查看所有容器的资源占用情况

docker stats可以查看所有容器的cpu、内存、IO、网络资源的占用情况,但是无进程细节

1. 语法格式

bash 复制代码
docker stats [options] [containers]

2. 常用选项

  • --all: 显示所有容器,包括未启动
  • --no-trunc: 不截断输出信息
  • --no-stream:只输出执行命令时的状态信息(默认实时更新)

3. 使用示例

bash 复制代码
docker stats --no-stream --all 
CONTAINER ID   NAME                  CPU %     MEM USAGE / LIMIT     MEM %     NET I/O         BLOCK I/O       PIDS
1fd62da5e5e0   interesting_darwin    0.05%     458.4MiB / 1.634GiB   27.40%    796B / 126B     105MB / 134MB   21
f25a5aaa8a33   optimistic_shockley   0.00%     0B / 0B               0.00%     0B / 0B         0B / 0B         0
977d80ec3def   busy_kilby            0.00%     3.258MiB / 1.634GiB   0.19%     1.46kB / 126B   4.53MB / 0B     3

九、docker cp 容器和宿主机的数据拷贝

docker cp 是 Docker 中用于在宿主机容器之间双向拷贝文件/目录的核心命令,支持容器运行或停止状态下的数据传输,是容器数据迁移、配置修改、日志提取的常用工具。

1. 语法格式

docker cp 支持两种拷贝方向,语法结构如下:

bash 复制代码
# 宿主机 → 容器:将宿主机的文件/目录拷贝到容器内指定路径
docker cp [options] 宿主机路径 容器名/ID:容器内路径

# 容器 → 宿主机:将容器内的文件/目录拷贝到宿主机指定路径
docker cp [options] 容器名/ID:容器内路径 宿主机路径

小提示:

  • 路径支持绝对路径和相对路径(相对当前终端所在目录);
  • 拷贝目录时,会递归拷贝目录下所有文件/子目录,无需额外参数。

2. 常用选项

选项 说明 使用场景
-a 归档模式拷贝,保留文件的权限、所有者、时间戳等元数据 拷贝需要保持权限的配置文件、可执行程序
-L 跟随宿主机上的软链接,拷贝链接指向的实际文件(而非链接本身) 宿主机路径是软链接时,需拷贝实际文件

3. 使用示例

3.1 案例介绍

  1. 宿主机 → 容器:将本地自定义的 nginx.conf 配置文件拷贝到运行中的 nginx 容器配置目录;
  2. 容器 → 宿主机:从 nginx 容器中提取访问日志到宿主机本地目录;
  3. 验证拷贝结果,确认数据一致性。

3.2 实现演示

步骤1:准备宿主机测试文件
bash 复制代码
# 1. 创建宿主机测试目录和自定义nginx配置文件
# 2. 创建自定义的index.html(内容极简,新手易理解)
cat > ~/docker_cp_test/index.html << EOF
<!DOCTYPE html>
<html>
<head>
    <title>My Custom Nginx Page</title>
</head>
<body>
    <h1>Hello Docker! 🐳</h1>
    <p>这个页面是从宿主机拷贝到容器的!</p>
</body>
</html>
EOF

# 2. 查看宿主机文件(确认存在)
cat > ~/docker_stu/docker_cp_test/index.html <<EOF
> <!DOCTYPE html>
<html>
<head>
    <title>My Custom Nginx Page</title>
</head>
<body>
    <h1>Hello Docker! 🐳</h1>
    <p>这个页面是从宿主机拷贝到容器的!</p>
</body>
</html>
EOF
步骤2:宿主机 → 容器拷贝配置文件
bash 复制代码
docker run --name nginx_cp_demo -p 80:80 -d nginx:latest 
3e41e3f7d876571a638cab3670f3f6d092e8aeb8dafb813a602ec57e9399f6b4
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                 NAMES
3e41e3f7d876   nginx:latest   "/docker-entrypoint...."   2 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp, [::]:80->80/tcp   nginx_cp_demo
步骤3:查看默认nginx页面
bash 复制代码
curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
步骤4:拷贝文件(宿主机->容器)并且查看更新后的页面
bash 复制代码
docker cp -a  ./index.html nginx_cp_demo:/usr/share/nginx/html/index.html
Successfully copied 2.05kB to nginx_cp_demo:/usr/share/nginx/html/index.html
curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
    <title>My Custom Nginx Page</title>
</head>
<body>
    <h1>Hello Docker! 🐳</h1>
    <p>这个页面是从宿主机拷贝到容器的!</p>
</body>
</html>

小提示:

  • 拷贝容器内文件时,即使容器处于 Exited 状态也可执行(容器文件系统未删除);
  • 若拷贝到容器的路径不存在,docker cp 会自动创建该路径;
  • docker cp如果目标路径有相同的文件或者文件夹会直接覆盖!
  • 针对-L,会直接把原路径的软连接指向文件(而非软连接)拷贝过去
  • 避免拷贝容器内的 /proc/sys 等虚拟文件系统目录(无实际意义)。

3.3 常见问题解决

  1. 权限问题 :拷贝到容器后文件权限异常

    bash 复制代码
    # 解决方案:使用 -a 选项保留元数据
    docker cp -a 宿主机文件 容器名:容器路径
  2. 路径空格问题 :路径包含空格时需用引号包裹

    bash 复制代码
    docker cp "/home/user/my dir/file.txt" nginx_cp_demo:/tmp/

十、docker update 更新容器配置

1. 语法格式

bash 复制代码
docker update [options] container

2. 常用选项

  • --cpus: 显示cpu数量
  • --cpuset-cpus: 指定只能使用宿主机的那块cpu
  • --memory: 指定容器的内存大小
  • --memory-swap: 指定容器的交换内存大小
  • --cpu-quota: 指定容器一个cpu周期内,允许容器被调度的最长时间(单位微秒,默认无限制),超过该时间,当前CPU周期,容器进程将被限流
  • --cpu-period:指定一段时间(周期),时间结束后若cpu-quota的配额用完,当前cpu周期该容器进程会被限流 ,未超过cpu-quota则当前cpu周期,docker进程会一直占用cpu

3. 使用示例

bash 复制代码
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                 NAMES
3e41e3f7d876   nginx:latest   "/docker-entrypoint...."   44 minutes ago   Up 44 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   nginx_cp_demo

docker update --cpuset-cpus=0,1 --cpus=1.5 --memory=512m --memory-swap=600m 3e41e3f7d876

小提示:

  • 容器内存大小 = memory-swap
  • --memory-swap = --memory + 虚拟内存大小
  • 虚拟内存就是硬盘中部分空间,它的缓存速度比较慢,因此--memory-swap与--memory的比值不要太大!
  • --memory-swap必须大于等于--memory
  • 限流:意思是当前周期如果额度大于quota,那么这个周期该线程被cpu调度的优先级将会下调

十一、docker container prune 批量删除容器

1. 语法格式

bash 复制代码
docker conatiner prune 

2. 常用选项

  • -f : 执行prune会有一个提示弹窗,-f可以忽略该弹窗,直接执行,多用于自动化脚本

3. 使用示例

bash 复制代码
docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
f25a5aaa8a3335905ed9a49630e97a898da0fe7a81a772882fccdeb2462a2ab2

Total reclaimed space: 0B

END

相关推荐
灰阳阳2 小时前
Docker-网络管理-命令入门
运维·docker·容器·eureka
thinkpad12345678902 小时前
Docker 安装(Ubuntu 22.04 / jammy)步骤总结 + 常见错误处理
服务器·ubuntu·docker
梦白.8 小时前
Python的容器类型
运维·python
AlfredZhao9 小时前
用Docker安全驯服OpenClaw,并打通社交软件
docker·飞书·openclaw
tuotali202610 小时前
天然气压缩机技术2026,高可靠性长周期运行与智能运维融合路径
运维·python
姚不倒10 小时前
三节点 TiDB 集群部署与负载均衡搭建实战
运维·数据库·分布式·负载均衡·tidb
gpio_0110 小时前
自建gitlab服务器并用sakurafrp穿透
运维·服务器·gitlab
k7Cx7e10 小时前
Debian执行ssh root@localhost 提示认证失败
运维·debian·ssh
闻道且行之10 小时前
Nginx 安装、做成服务及 HTTPS 配置全流程
linux·运维·nginx·https