Docker 基础入门教程

𝓹𝓻𝓲𝓷𝓽𝓯 发布于 18 天前 208 次阅读 预计阅读时间: 29 分钟


文章目录[隐藏]

  • 7. -e:设置环境变量
  • 8. --restart:重启策略
  • 三、综合实战演示
  • 四、常用管理命令
  • 4. 删除容器与镜像
  • 5. 复制文件进出容器 (docker cp)
  • 五、Docker 常用命令速查表
  • Docker 基础入门教程

    img

    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。这个命令后面经常跟着一串"英文字母"参数,理解这些参数是入门的关键。

    image-20260116161801658

    以下是常用参数的深度解析:

    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 的好处:

    1. 易于记忆my-nginxromantic_babbage 好记
    2. 便于管理:停止、启动、删除时不用记ID
    3. 避免冲突:明确知道每个容器的用途
    4. 脚本友好:在脚本中使用名称而不是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 还有两种常见方式:

    1. 匿名卷-v /data (只写了容器内路径。Docker 会自动在宿主机深处创建一个随机名字的文件夹。通常用于不关心数据存在哪,只要能持久化就行的情况。)
    2. 具名卷-v my_db_data:/var/lib/mysqlmy_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 小结

    参数项全称作用就像是...
    -vVolume数据挂载给容器插了一块"外接硬盘"

    使用建议:

    • 数据库(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 nginxWeb服务器
    数据库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 的注意事项:
    1. 敏感信息:不要在命令中直接写密码(会出现在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
    2. 变量覆盖:容器内已有的环境变量会被覆盖
    3. 特殊字符:包含空格或特殊字符的值需要引号 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  # 正式运行
    • -dDetached(分离)→ 后台运行
    • -eEnvironment(环境)→ 环境变量
    • -itInteractive + 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

    这段命令的意思是:

    1. docker run: 启动一个新容器。
    2. -itd: 结合了交互、终端和后台运行。意味着它在后台活着,但如果你想进入它内部,它也为你准备好了终端。
    3. --name my-nginx: 给容器起名叫 my-nginx
    4. -p 8888:80: 把容器里的 80 端口映射到我电脑的 8888 端口。
    5. 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 常用参数详解

    参数全称作用说明
    -iinteractive保持标准输入开启允许你与容器进行交互
    -ttty分配伪终端提供类似终端的界面
    -ddetach后台运行命令在后台执行,不占用终端
    -uuser指定执行用户以特定用户身份执行命令
    -wworkdir指定工作目录在指定目录下执行命令
    -eenv设置环境变量传递环境变量到执行环境

    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 execdocker 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、内存使用情况