文章目录[隐藏]
- Docker 基础入门教程
Docker 基础入门教程

Docker 让开发者可以打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。本教程将以最通俗易懂的方式,带你掌握 Docker 的核心用法。
一、Docker 环境安装
1. Windows 系统
在 Windows 上,我们通常安装 Docker Desktop。
- 下载地址:Docker 官网
- 注意项:安装时请确保勾选了 WSL 2 支持,这会让 Docker 运行得更加顺畅。
-
验证:打开终端输入
docker --version,看到版本号即安装成功。
2. Linux 系统(以 Ubuntu 为例)
Linux 下通常使用命令行安装,最快的方法是使用官方的一键脚本:(选择1,4的命令进行安装)
# To install the latest stable versions of Docker CLI, Docker Engine, and their
# dependencies:
#
# 1. download the script
#
# $ curl -fsSL https://get.docker.com -o install-docker.sh
#
# 2. verify the script's content
#
# $ cat install-docker.sh
#
# 3. run the script with --dry-run to verify the steps it executes
#
# $ sh install-docker.sh --dry-run
#
# 4. run the script either as root, or using sudo to perform the installation.
#
# $ sudo sh install-docker.sh
记得使用科学的上网方式进行安装哦
3. pull 异常教程 - 切换镜像站
一键配置脚本
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
支持系统:OpenCloudOS、Ubuntu、Debian、CentOS、RHEL、Rocky Linux 等主流发行版。
二、核心运行参数详解 (docker run)
在使用 Docker 时,最常用的命令就是 docker run。这个命令后面经常跟着一串"英文字母"参数,理解这些参数是入门的关键。

以下是常用参数的深度解析:
1. -i:交互式操作 (interactive)
- 通俗解释:保持容器的标准输入(STDIN)开启。
- 为什么要用:如果你想在容器启动后输入命令,就必须带上这个参数。它就像是连接了容器的"麦克风",让它能听见你说话。
2. -t:终端 (tty)
- 通俗解释:为容器分配一个伪终端。
-
为什么要用:它会为你提供一个类似于 Linux 终端的命令行界面。通常与
-i连用(-it),让你感觉就像直接登录进了另一台电脑的黑色窗口。
3. -d:后台运行 (detach)
- 通俗解释:容器启动后会在后台运行,不会占用你当前的终端窗口。
-
为什么要用:当你运行一个网站服务器(如 Nginx)或数据库(如 MySQL)时,你不希望它一直霸占着你的屏幕,这时就用
-d。
4. -p:端口映射 (publish)
-
格式:
-p 宿主机端口:容器内端口 - 通俗解释:在容器的"围墙"上开扇窗户。
-
为什么要用:容器内部是一个隔离的网络。如果你在容器内部运行了一个 80 端口的 Web 服务,外部是访问不到的。通过
-p 8080:80,你可以访问电脑的localhost:8080,流量会自动转发到容器内部的 80 端口。
5. --name:指定容器名称
- 通俗解释:给你的容器起个"绰号"。
-
为什么要用:如果不指定,Docker 会随机给它起一个类似
determined_shirley的名字。指定名字(如--name my-web)方便你后续停止或删除它。
优点
不使用 --name 的情况:
docker run nginx
# Docker会自动生成一个随机名称,如:
# romantic_babbage
# angry_goldberg
# sleepy_curie
使用 --name 的好处:
-
易于记忆:
my-nginx比romantic_babbage好记 - 便于管理:停止、启动、删除时不用记ID
- 避免冲突:明确知道每个容器的用途
- 脚本友好:在脚本中使用名称而不是ID
基本用法
给容器起名字
# 运行一个名为 "web-server" 的nginx容器
docker run -d --name web-server nginx
# 运行一个名为 "mysql-db" 的MySQL容器
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=123456 mysql
使用名称管理容器
# 停止容器
docker stop web-server
# 启动容器
docker start web-server
# 重启容器
docker restart web-server
# 查看容器日志
docker logs web-server
# 进入容器
docker exec -it web-server bash
# 删除容器
docker rm web-server
6. -v:挂载卷
在掌握了基础的容器运行(-itd)和端口映射(-p)后,另一个至关重要的参数就是 -v。如果你不学会使用 -v,那么你的 Docker 容器就像一个没有硬盘的临时电脑,一旦关机(删除容器),所有数据都会灰飞烟灭。
6.1 -v 是什么?
-v 代表 Volume(卷),也常被称为 "挂载"。
- 通俗解释:它就像是在你的宿主机(真实的 Windows 或 Linux 电脑)和 Docker 容器之间拉了一根"传送带"或者建立了一个"共享文件夹"。
- 核心功能:将宿主机的目录或文件,映射到容器内部。
6.2 为什么要用 -v?(解决两大痛点)
1. 数据持久化(防止丢失)
默认情况下,你在容器里创建的任何文件(比如数据库里的数据、用户上传的图片)都保存在容器的层中。一旦你执行了 docker rm 删除了容器,这些数据会全部消失。 通过 -v,你把数据存在宿主机上,即使容器删了,新建一个容器挂载同一个目录,数据依然在。
2. 修改方便(实时同步)
如果你想修改容器里的配置文件(比如 Nginx 的 index.html),你不需要每次都进入容器内部去写代码。你只需要在外面(Windows/Linux)修改那个挂载的文件夹,容器内部会实时同步生效。
6.3 -v 的语法格式
-v [宿主机绝对路径]:[容器内绝对路径]:[权限]
1. 宿主机路径 (Host Path)
你电脑上的真实路径,例如 D:\web_data (Windows) 或 /home/user/app (Linux)。
2. 容器内路径 (Container Path)
镜像中预设的路径,例如 Nginx 存放网页的 /usr/share/nginx/html。
3. 权限 (可选)
-
rw: 读写(默认)。 -
ro: 只读(read-only)。如果你希望容器只能看文件,不能改文件,就加上:ro。
6.4 实战案例:一分钟修改网页内容
假设我们想运行一个 Nginx 容器,但不想用它默认的欢迎页面,而是用我们自己电脑上的 HTML 文件。
1. 在宿主机创建文件
在 Linux 的 /root/html 目录下(或 Windows 的某个文件夹下)创建一个 index.html,内容写上 <h1>Hello Docker Volume!</h1>。
2. 运行挂载命令
docker run -d \
--name my-nginx-web \
-p 8080:80 \
-v /root/html:/usr/share/nginx/html \
nginx
命令拆解:
-
-d: 后台运行。 -
-p 8080:80: 电脑 8080 端口映射容器 80 端口。 -
-v /root/html:/usr/share/nginx/html:-
把外部的
/root/html文件夹。 -
映射到内部的
/usr/share/nginx/html。
-
把外部的
-
nginx: 镜像名。
3. 验证结果
现在你访问 http://localhost:8080,看到的不再是 Nginx 默认页面,而是你刚才写的 Hello Docker Volume!。 神奇之处: 此时你修改宿主机 /root/html/index.html 里的内容,刷新浏览器,页面会立刻变化,无需重启容器!
6.5 匿名卷与具名卷(进阶)
除了上面这种指定具体路径的"绑定挂载"(Bind Mount),Docker 还有两种常见方式:
-
匿名卷:
-v /data(只写了容器内路径。Docker 会自动在宿主机深处创建一个随机名字的文件夹。通常用于不关心数据存在哪,只要能持久化就行的情况。) -
具名卷:
-v my_db_data:/var/lib/mysql(my_db_data是一个名字。Docker 会管理这个卷。你可以通过docker volume ls看到它。这种方式最推荐,因为它由 Docker 统一管理,方便备份和迁移。)你要学会管理你的"具名卷",主要靠这几个指令:命令作用docker volume ls查看当前所有的命名卷(看看有哪些保险柜)docker volume inspect <卷名>查看这个卷在硬盘的什么位置(通常在/var/lib/docker/volumes/)docker volume create <卷名>手动创建一个卷(可选,通常运行run时会自动创建)docker volume rm <卷名>删除一个卷(注意:删了数据就真没了)docker volume prune删除所有没在使用的卷(清理空间)
# 默认情况(不加 -a):
docker volume prune
# 只删除未被任何容器引用的卷
# 使用 -a 选项:
docker volume prune -a
# 删除所有未使用的卷,包括:
# 1. 未被引用的卷
# 2. 匿名卷
# 3. 悬空卷
实战演示:如何使用命名卷
第一步:运行容器并绑定命名卷
你不需要手动创建卷,直接运行命令,Docker 发现卷不存在会自动创建:
# 运行一个 Nginx,把网页存到名为 my_web_data 的卷里
docker run -d \
--name my_nginx \
-p 8081:80 \
-v my_web_data:/usr/share/nginx/html \
nginx
第二步:查看卷是否生成
docker volume ls
你会看到列表中多了一个 my_web_data。
第三步:查看卷的真实位置(仅限 Linux)
如果你想知道 Docker 把数据存哪了:
docker volume inspect my_web_data
在输出的 Mountpoint 字段,你会看到类似 /var/lib/docker/volumes/my_web_data/_data 的路径。
常见困惑:命名卷 vs 绑定挂载
| 特性 | 命名卷 (-v my_vol:/app) | 绑定挂载 (-v /root/data:/app) |
|---|---|---|
| 存储位置 | Docker 管理的特定区域 | 你自己指定的任何地方 |
| 管理方式 | 通过 Docker 命令管理 | 通过文件浏览器或系统命令管理 |
| 适用场景 | 数据库存储、持久化配置文件 | 开发环境(需要实时改代码) |
| 对初学者 | 更推荐(不容易写错路径) | 需要搞清楚宿主机绝对路径 |
6.6 小结
| 参数项 | 全称 | 作用 | 就像是... |
|---|---|---|---|
| -v | Volume | 数据挂载 | 给容器插了一块"外接硬盘" |
使用建议:
-
数据库(MySQL/Redis):一定要用
-v,否则删容器等于删库跑路。 -
配置文件:建议用
-v,方便在外面改配置。 -
日志文件:建议用
-v,方便在宿主机直接查看日志,不用进容器。
注意:尽管 -v 是 Docker 的标准操作,但在 Windows 环境下使用 WSL 2 挂载路径时,可能会遇到文件权限或路径格式转换的问题,操作时请留意报错信息。
7. -e:设置环境变量
作用
向容器内部传递环境变量,常用于配置应用程序。
基本语法
docker run -e KEY=VALUE <镜像>
使用示例
# 设置单个环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 设置多个环境变量
docker run -d \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=admin \
mysql
# 从文件读取环境变量
docker run -d --env-file .env mysql
实际应用场景
场景1:运行数据库
# MySQL容器需要root密码
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=mysecretpassword \
-e MYSQL_DATABASE=appdb \
-p 3306:3306 \
mysql:8.0
场景2:运行Web应用
# Node.js应用配置
docker run -d \
--name myapp \
-e NODE_ENV=production \
-e DATABASE_URL=postgres://user:pass@db:5432/db \
-e REDIS_URL=redis://redis:6379 \
-p 3000:3000 \
my-node-app
场景3:运行Redis
# Redis设置密码
docker run -d \
--name redis-cache \
-e REDIS_PASSWORD=myredispass \
-p 6379:6379 \
redis:alpine
组合使用示例
# 典型组合:后台运行 + 环境变量 + 端口映射
docker run -d \
--name webapp \
-e APP_ENV=production \
-e DB_HOST=mysql \
-p 80:80 \
-p 443:443 \
nginx:latest
# 分解:
# -d → 后台运行
# --name → 指定容器名称
# -e → 设置环境变量
# -p → 端口映射
常用组合模式
| 场景 | 典型命令 | 说明 |
|---|---|---|
| 快速测试 | docker run -it --rm alpine sh | 交互式临时容器 |
| 后台服务 | docker run -d -p 80:80 nginx | Web服务器 |
| 数据库 | docker run -d -e VAR=val mysql | 需要配置的服务 |
| 开发环境 | docker run -d -v $(pwd):/app node | 挂载代码目录 |
实用技巧
1. 查看容器环境变量
# 查看已设置的环境变量
docker exec <容器> env
# 查看单个变量
docker exec <容器> printenv NODE_ENV
2. 动态修改环境变量
# 创建时忘记设置?需要重新创建
docker stop <容器>
docker rm <容器>
docker run -d -e NEW_VAR=value ... # 重新创建
3. 使用环境变量文件
# .env 文件内容:
DB_PASSWORD=secret123
API_KEY=abc123xyz
# 启动时引用
docker run -d --env-file .env myapp
注意事项
-e 的注意事项:
-
敏感信息:不要在命令中直接写密码(会出现在history中) # 不安全(密码在history中可见)
docker run -e PASSWORD=123456 app
# 相对安全(从变量读取)
export DB_PASS=123456
docker run -e PASSWORD=$DB_PASS app
# 最安全(使用Docker Secrets或环境文件)
docker run --env-file .secrets app - 变量覆盖:容器内已有的环境变量会被覆盖
- 特殊字符:包含空格或特殊字符的值需要引号 docker run -e GREETING="Hello World" app
-it 与 -d 对比
| 选项 | 用途 | 适用场景 |
|---|---|---|
-it | 交互式终端 | 调试、进入容器、执行命令 |
-d | 后台运行 | 长期运行的服务(Web、DB等) |
# 组合使用:先调试,后后台运行
docker run -it --rm alpine sh # 调试镜像
docker run -d --name myapp alpine # 正式运行
-
-d→ Detached(分离)→ 后台运行 -
-e→ Environment(环境)→ 环境变量 -
-it→ Interactive + TTY → 交互式终端
8. --restart:重启策略
docker run --restart <策略> <镜像>
四种重启策略
1. no - 不自动重启(默认)
docker run --restart no nginx
# 或省略(默认就是no)
docker run nginx
特点:
- 容器退出后不会自动重启
- 适用于一次性任务、测试容器
2. always - 总是重启
docker run --restart always nginx
特点:
- 容器退出时总是重启
- 无论退出状态码是什么(0或非0)
- 适用于必须保持运行的服务
3. on-failure - 失败时重启
docker run --restart on-failure nginx
# 或指定最大重试次数
docker run --restart on-failure:5 nginx
特点:
- 只有非0状态码退出时才重启
- 可以指定最大重试次数
- 适用于可能出错但需要恢复的服务
4. unless-stopped - 除非手动停止
docker run --restart unless-stopped nginx
特点:
- 容器退出时重启,除非用户手动停止
- Docker守护进程重启后,容器也会自动启动
- 最常用的生产环境策略
策略对比表
| 策略 | 退出时重启 | Docker重启时启动 | 手动停止后 | 适用场景 |
|---|---|---|---|---|
no | ❌ 否 | ❌ 否 | - | 测试、一次性任务 |
always | ✅ 总是 | ✅ 是 | ✅ 会重启 | 必须持续运行的服务 |
on-failure | ⚠️ 失败时 | ✅ 是 | - | 可能出错的服务 |
unless-stopped | ✅ 总是 | ✅ 是 | ❌ 不重启 | 生产环境推荐 |
三、综合实战演示
让我们把上面的参数串起来,运行一个 Nginx(网页服务器)容器:
docker run -itd --name my-nginx -p 8888:80 nginx
这段命令的意思是:
-
docker run: 启动一个新容器。 -
-itd: 结合了交互、终端和后台运行。意味着它在后台活着,但如果你想进入它内部,它也为你准备好了终端。 -
--name my-nginx: 给容器起名叫my-nginx。 -
-p 8888:80: 把容器里的 80 端口映射到我电脑的 8888 端口。 -
nginx: 使用的镜像名称。
执行完后,你在浏览器输入 localhost:8888 就能看到 Nginx 的欢迎页面了。
四、常用管理命令
1. 查看容器状态
-
docker ps: 查看当前正在运行的容器。 -
docker ps -a: 查看所有容器(包括已经停止的)。
2. 停止与启动
-
docker stop my-nginx: 停止名为my-nginx的容器。 -
docker start my-nginx: 再次启动它。
3. 进入容器内部与执行命令 (docker exec)
docker exec 是在已运行的容器中执行命令的强大工具,它可以让你进入容器内部进行调试、修改配置或执行任意命令。
3.1 基本语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
3.2 常用参数详解
| 参数 | 全称 | 作用 | 说明 |
|---|---|---|---|
-i | interactive | 保持标准输入开启 | 允许你与容器进行交互 |
-t | tty | 分配伪终端 | 提供类似终端的界面 |
-d | detach | 后台运行 | 命令在后台执行,不占用终端 |
-u | user | 指定执行用户 | 以特定用户身份执行命令 |
-w | workdir | 指定工作目录 | 在指定目录下执行命令 |
-e | env | 设置环境变量 | 传递环境变量到执行环境 |
3.3 进入容器的不同方式
方式一:使用 /bin/bash(推荐)
适用于大多数 Linux 容器,提供完整的 bash 功能:
# Linux 系统(需要 sudo)
sudo docker exec -it my-nginx /bin/bash
# Windows 系统(Docker Desktop)
docker exec -it my-nginx /bin/bash
方式二:使用 /bin/sh
适用于轻量级容器(如 Alpine),或当 bash 不可用时:
# Linux 系统
sudo docker exec -it my-nginx /bin/sh
# Windows 系统
docker exec -it my-nginx /bin/sh
方式三:使用 /bin/sh -c
执行多条命令或复杂命令:
# 执行多条命令
sudo docker exec -it my-nginx /bin/sh -c "cd /tmp && ls -la"
# 查看容器环境变量
sudo docker exec -it my-nginx /bin/sh -c "env | grep PATH"
方式四:不进入终端,直接执行命令
执行单条命令并立即退出:
# 查看容器内的文件
sudo docker exec my-nginx ls -la /usr/share/nginx/html
# 查看容器内的进程
sudo docker exec my-nginx ps aux
# 查看 nginx 版本
sudo docker exec my-nginx nginx -v
3.4 高级用法
3.4.1 后台执行命令(-d)
在容器后台执行命令,不占用终端:
# 后台执行一个长时间运行的脚本
sudo docker exec -d my-nginx /bin/sh -c "while true; do echo 'Hello' >> /tmp/log.txt; sleep 10; done"
# 后台执行数据库备份
sudo docker exec -d mysql-db mysqldump -u root -p123456 mydb > /backup/mydb.sql
3.4.2 以特定用户执行(-u)
以容器内的特定用户身份执行命令:
# 以 root 用户执行
sudo docker exec -it -u root my-nginx /bin/bash
# 以 nginx 用户执行
sudo docker exec -it -u nginx my-nginx /bin/bash
# 指定用户 ID 和组 ID
sudo docker exec -it -u 1000:1000 my-nginx /bin/bash
3.4.3 指定工作目录(-w)
在指定目录下执行命令:
# 在 /tmp 目录下执行
sudo docker exec -it -w /tmp my-nginx /bin/bash
# 在 /var/log 目录下查看日志
sudo docker exec -it -w /var/log my-nginx ls -la
3.4.4 传递环境变量(-e)
为执行的命令传递环境变量:
# 传递单个环境变量
sudo docker exec -it -e DEBUG=true my-nginx /bin/bash
# 传递多个环境变量
sudo docker exec -it -e NODE_ENV=production -e API_KEY=secret my-node-app /bin/bash
# 从宿主机传递变量
export MY_VAR="hello"
sudo docker exec -it -e MY_VAR my-nginx /bin/bash
3.5 实战场景示例
场景1:调试 Nginx 配置
# 1. 进入容器
sudo docker exec -it my-nginx /bin/bash
# 2. 查看配置文件位置
cat /etc/nginx/nginx.conf
# 3. 测试配置文件语法
nginx -t
# 4. 重新加载配置(不重启容器)
nginx -s reload
# 5. 查看错误日志
tail -f /var/log/nginx/error.log
场景2:MySQL 数据库操作
# 1. 进入 MySQL 容器
sudo docker exec -it mysql-db /bin/bash
# 2. 连接到 MySQL
mysql -u root -p
# 3. 或者直接执行 SQL 命令
sudo docker exec -it mysql-db mysql -u root -p123456 -e "SHOW DATABASES;"
# 4. 导出数据库
sudo docker exec mysql-db mysqldump -u root -p123456 mydb > backup.sql
# 5. 导入数据库
sudo docker exec -i mysql-db mysql -u root -p123456 mydb < backup.sql
场景3:Redis 缓存操作
# 1. 进入 Redis 容器
sudo docker exec -it redis-cache /bin/sh
# 2. 连接到 Redis
redis-cli
# 3. 或者直接执行 Redis 命令
sudo docker exec -it redis-cache redis-cli ping
# 4. 查看所有键
sudo docker exec -it redis-cache redis-cli KEYS "*"
# 5. 清空缓存
sudo docker exec -it redis-cache redis-cli FLUSHALL
场景4:查看容器资源使用情况
# 查看容器内进程
sudo docker exec my-nginx ps aux
# 查看容器内磁盘使用
sudo docker exec my-nginx df -h
# 查看容器内内存使用
sudo docker exec my-nginx free -h
# 查看容器内网络连接
sudo docker exec my-nginx netstat -tlnp
场景5:批量操作多个容器
# 批量查看所有运行中容器的 IP 地址
for container in $(sudo docker ps -q); do
echo "Container: $container"
sudo docker exec $container hostname -I
done
# 批量重启容器内的某个服务
for container in $(sudo docker ps --filter "ancestor=nginx" -q); do
echo "Reloading nginx in: $container"
sudo docker exec $container nginx -s reload
done
3.6 常见问题与解决方案
问题1:bash: command not found
原因:容器使用的是轻量级发行版(如 Alpine),没有安装 bash。
解决方案:使用 sh 替代
# 错误
sudo docker exec -it my-container /bin/bash
# 正确
sudo docker exec -it my-container /bin/sh
问题2:Permission denied
原因:当前用户没有足够的权限执行 docker 命令。
解决方案:使用 sudo 或将用户添加到 docker 组
# 方式1:使用 sudo
sudo docker exec -it my-container /bin/bash
# 方式2:将用户添加到 docker 组(需要重新登录)
sudo usermod -aG docker $USER
问题3:容器已停止
原因:容器不在运行状态,无法执行 exec 命令。
解决方案:先启动容器
# 查看容器状态
sudo docker ps -a
# 启动已停止的容器
sudo docker start my-container
# 然后再执行 exec
sudo docker exec -it my-container /bin/bash
3.7 docker exec 与 docker attach 的区别
| 特性 | docker exec | docker attach |
|---|---|---|
| 作用 | 在容器中执行新命令 | 附加到容器的主进程 |
| 影响 | 不影响容器主进程 | 会看到容器主进程的输出 |
| 退出 | 退出命令不影响容器 | 退出会导致容器停止 |
| 用途 | 调试、执行命令 | 查看实时日志、交互 |
# docker exec - 推荐用于调试
sudo docker exec -it my-nginx /bin/bash
# docker attach - 查看容器主进程输出
sudo docker attach my-nginx
# 注意:使用 Ctrl+P 然后 Ctrl+Q 退出而不停止容器
3.8 快速参考
| 操作 | 命令 |
|---|---|
| 进入容器(bash) | sudo docker exec -it <容器> /bin/bash |
| 进入容器(sh) | sudo docker exec -it <容器> /bin/sh |
| 执行单条命令 | sudo docker exec <容器> <命令> |
| 后台执行命令 | sudo docker exec -d <容器> <命令> |
| 以 root 执行 | sudo docker exec -it -u root <容器> /bin/bash |
| 查看环境变量 | sudo docker exec <容器> env |
| 查看进程 | sudo docker exec <容器> ps aux |
| 查看文件 | sudo docker exec <容器> cat <文件路径> |
4. 删除容器与镜像
-
docker rm -f my-nginx: 强制删除运行中的容器。 -
docker rmi nginx: 删除本地的 nginx 镜像。
5. 复制文件进出容器 (docker cp)
docker cp 命令可以在宿主机和容器之间复制文件或目录。
基本语法
# 从容器复制到宿主机
docker cp <容器>:<容器内路径> <宿主机路径>
# 从宿主机复制到容器
docker cp <宿主机路径> <容器>:<容器内路径>
使用示例
# Linux 系统
sudo docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# Windows 系统
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 复制整个目录
sudo docker cp my-nginx:/usr/share/nginx/html ./html_backup
# 复制文件到容器
sudo docker cp ./new_index.html my-nginx:/usr/share/nginx/html/
# 复制目录到容器
sudo docker cp ./config/ my-nginx:/etc/nginx/
五、Docker 常用命令速查表
核心命令对比表
| 命令 | 作用 | 常用选项 | 示例 | 说明 |
|---|---|---|---|---|
docker pull | 拉取镜像 | -a:所有标签 --platform:指定平台 | docker pull nginx:alpine | 只下载镜像,不运行 |
docker create | 创建容器 | --name:命名 -it:交互终端 -p:端口映射 -v:卷挂载 -e:环境变量 | docker create --name myapp nginx | 只创建,不启动 |
docker run | 创建并启动容器 | -d:后台运行 --rm:退出后删除 --restart:重启策略 | docker run -d -p 80:80 nginx | 最常用,等于 create + start |
docker start | 启动已存在的容器 | -a:附加输出 -i:交互模式 | docker start myapp | 启动已停止的容器 |
docker stop | 停止运行中的容器 | -t:超时时间(秒) | docker stop myapp | 优雅停止(SIGTERM) |
docker exec | 在容器中执行命令 | -it:交互终端 -d:后台执行 -u:指定用户 -w:工作目录 | docker exec -it myapp /bin/bash | 进入容器或执行命令 |
docker attach | 附加到容器主进程 | 无 | docker attach myapp | 查看容器实时输出 |
docker logs | 查看容器日志 | -f:实时跟踪 --tail:最后N行 -t:显示时间戳 | docker logs -f myapp | 查看容器输出日志 |
docker cp | 容器与宿主机复制 | 无 | docker cp myapp:/file.txt . | 复制文件进出容器 |
docker stats | 查看容器资源 | --no-stream:不持续更新 | docker stats myapp | 查看CPU、内存使用情况 |
Comments NOTHING