文章目录
- [一、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 容器和宿主机的数据拷贝)
-
- [1. 语法格式](#1. 语法格式)
- [2. 常用选项](#2. 常用选项)
- [3. 使用示例](#3. 使用示例)
-
- [3.1 案例介绍](#3.1 案例介绍)
- [3.2 实现演示](#3.2 实现演示)
-
- 步骤1:准备宿主机测试文件
- [步骤2:宿主机 → 容器拷贝配置文件](#步骤2:宿主机 → 容器拷贝配置文件)
- 步骤3:查看默认nginx页面
- 步骤4:拷贝文件(宿主机->容器)并且查看更新后的页面
- [3.3 常见问题解决](#3.3 常见问题解决)
- [十、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 案例介绍
- 根据镜像,创建一个容器,但是不启动,指定容器名、退出后删除容器、绑定cpu、绑定端口号、设置容器启动命令
- 查看容器是否创建成功
- 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: 限制容器使用的最大内存(支持单位:b、k、m、g)。--rm: 容器退出(Shell 断开)后自动删除容器,常用于临时测试。-v/--volume: 挂载数据卷,将宿主机目录映射到容器内部。
3. 使用示例
3.1 案例介绍
- 运行一个容器,并且指定容器名、绑定cpu、后台运行、设置内存大小、设定主机名
- 进入容器内部,查看主机名
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 -t20将默认等待时间改成了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 案例介绍
- 宿主机 → 容器:将本地自定义的
nginx.conf配置文件拷贝到运行中的 nginx 容器配置目录; - 容器 → 宿主机:从 nginx 容器中提取访问日志到宿主机本地目录;
- 验证拷贝结果,确认数据一致性。
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 常见问题解决
-
权限问题 :拷贝到容器后文件权限异常
bash# 解决方案:使用 -a 选项保留元数据 docker cp -a 宿主机文件 容器名:容器路径 -
路径空格问题 :路径包含空格时需用引号包裹
bashdocker 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
