Docker命令解析:加速你的容器化之旅(以Nginx为例)

一、前言

在现代软件开发和运维中,容器化技术已经成为不可或缺的一部分。Docker作为最流行的容器平台之一,通过其强大的命令行工具简化了应用的打包、部署和运行过程。本文不仅会详细介绍常用的Docker命令及其功能,还会以Nginx为例,展示如何使用这些命令来构建、运行和管理容器实例。

无论你是新手还是有一定经验的开发者,本文都将为你提供实用的知识和操作技巧,帮助你更高效地利用Docker的强大功能。让我们一起探索Docker命令的魅力吧!

二、Docker命令

Docker提供了一系列强大的命令行工具,用于管理容器、镜像、网络和卷等资源。

Docker 命令可以按照不同的功能进行分类,主要包括以下几类:镜像管理命令、容器管理命令、网络管理命令、数据管理命令、信息查看命令和系统管理命令

2.1 镜像管理

核心功能:镜像的获取、构建、查看与清理。

命令 说明 示例
docker pull 拉取镜像 docker pull nginx:1.25
docker images 列出本地镜像 docker images -a
docker rmi 删除镜像 docker rmi nginx:old
docker build 构建镜像 docker build -t myapp:v1 .
docker tag 标记镜像 docker tag myapp:v1 myrepo/myapp:latest
docker push 推送镜像 docker push myrepo/myapp:latest

  1. 拉取镜像

    bash 复制代码
    docker pull [镜像名]:[标签]  # 默认拉取最新版(latest)

    示例

    bash 复制代码
    docker pull nginx:1.21.6    # 拉取指定版本Nginx
  2. 构建镜像

    bash 复制代码
    docker build -t [自定义镜像名]:[标签] [Dockerfile路径]

    参数

    • -t:指定镜像名称和标签
    • -f:指定自定义Dockerfile文件名
  3. 列出镜像

    bash 复制代码
    docker images       # 显示所有镜像
    docker image ls     # 同上(新语法)
  4. 删除镜像

    bash 复制代码
    docker rmi [镜像ID或名称]  # 删除单个镜像
    docker image prune        # 清理未被使用的镜像

2.2 容器管理

核心功能:容器的启动、停止、删除及状态监控。

命令 说明 示例
docker run 启动容器 docker run -d --name web nginx
docker start 启动已停止的容器 docker start web
docker stop 停止容器 docker stop web
docker restart 重启容器 docker restart web
docker rm 删除容器 docker rm -f web
docker ps 查看容器 docker ps -a

常用参数

  • -d:后台运行
  • --name:指定容器名称
  • -p:端口映射(主机端口:容器端口
  • -v:挂载数据卷(主机目录:容器目录
  • --network:指定网络

  1. 启动容器

    bash 复制代码
    docker run [参数] [镜像名]

    常用参数

    • -d:后台运行(守护模式)
    • --name:自定义容器名称
    • -p [宿主机端口]:[容器端口]:端口映射
    • -v [宿主机路径]:[容器路径]:数据卷挂载
    • --restart=always:容器自动重启

    示例

    bash 复制代码
    docker run -d --name my-nginx -p 80:80 -v ./html:/usr/share/nginx/html nginx
  2. 停止/删除容器

    bash 复制代码
    docker stop [容器ID或名称]    # 停止容器
    docker start [容器ID或名称]   # 启动已停止的容器
    docker rm [容器ID或名称]      # 删除已停止的容器
    docker rm -f [容器ID或名称]   # 强制删除运行中的容器
  3. 查看容器状态

    bash 复制代码
    docker ps           # 查看运行中的容器
    docker ps -a        # 查看所有容器(包括已停止的)
    docker stats        # 实时监控容器资源占用(CPU/内存)

2.3 容器交互与调试

核心功能:进入容器内部操作、日志查看与文件传输。

  1. 进入容器终端

    bash 复制代码
    docker exec -it [容器名] /bin/bash  # 启动交互式终端

    参数

    • -i:保持标准输入打开
    • -t:分配伪终端
  2. 查看容器日志

    bash 复制代码
    docker logs [容器名]        # 查看全部日志
    docker logs -f [容器名]     # 实时追踪日志(类似tail -f)
    docker logs --tail 100 [容器名]  # 查看最后100行日志
  3. 文件复制

    bash 复制代码
    docker cp [宿主机文件路径] [容器名]:[容器路径]  # 复制到容器
    docker cp [容器名]:[容器文件路径] [宿主机路径]  # 复制到宿主机

2.4 网络管理

核心功能:容器网络配置与连接管理。

命令 说明 示例
docker network ls 列出网络 docker network ls
docker network create 创建网络 docker network create mynet
docker network connect 连接容器到网络 docker network connect mynet web
docker network inspect 查看网络详情 docker network inspect mynet

  1. 查看网络

    bash 复制代码
    docker network ls      # 列出所有网络
    docker network inspect [网络名]  # 查看网络详细信息
  2. 创建自定义网络

    bash 复制代码
    docker network create [网络名]

    示例

    bash 复制代码
    docker network create my-net  # 创建桥接网络
  3. 容器加入网络

    bash 复制代码
    docker run --net=[网络名] [其他参数] [镜像名]

    示例

    bash 复制代码
    docker run -d --net=my-net --name nginx1 nginx

2.5 数据持久化

核心功能:通过数据卷实现容器数据的持久存储。

命令 说明 示例
docker volume create 创建数据卷 docker volume create myvol
docker volume ls 列出数据卷 docker volume ls
docker volume inspect 查看数据卷详情 docker volume inspect myvol
docker volume rm 删除数据卷 docker volume rm myvol

  1. 创建数据卷

    bash 复制代码
    docker volume create [卷名]   # 创建命名卷
  2. 挂载数据卷

    bash 复制代码
    docker run -v [卷名]:[容器路径] [镜像名]       # 挂载命名卷
    docker run -v [宿主机路径]:[容器路径] [镜像名]  # 挂载主机目录

    示例(Nginx配置持久化):

    bash 复制代码
    docker run -d -p 80:80 -v nginx-config:/etc/nginx nginx

2.6 容器编排(Docker Compose)

核心功能:通过YAML文件定义和管理多容器应用。

命令 说明 示例
docker-compose up 启动服务 docker-compose up -d
docker-compose down 停止服务 docker-compose down
docker-compose logs 查看日志 docker-compose logs -f
docker-compose build 构建镜像 docker-compose build

  1. 启动服务

    bash 复制代码
    docker-compose up -d    # 后台启动所有服务
  2. 停止服务

    bash 复制代码
    docker-compose down     # 停止并删除容器、网络
  3. 配置文件示例docker-compose.yml​):

    yaml 复制代码
    version: '3'
    services:
      nginx:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf
      backend:
        image: node:14
        command: npm start

2.7 系统维护与清理

核心功能:资源监控与垃圾清理。

  1. 查看磁盘占用

    bash 复制代码
    docker system df  # 显示镜像、容器、卷的磁盘使用情况
  2. 清理无用资源

    bash 复制代码
    docker system prune       # 删除所有停止的容器、未被使用的镜像和卷
    docker system prune -a    # 额外清理未被任何容器引用的镜像

2.8 安全与权限管理

核心功能:限制容器权限,提升安全性。

  1. 以非root用户运行容器

    bash 复制代码
    docker run -u [用户名或UID] [镜像名]

    示例

    bash 复制代码
    docker run -u 1000 nginx  # 使用UID 1000运行
  2. 限制容器资源

    bash 复制代码
    docker run --memory=512m --cpus=1 [镜像名]  # 限制内存和CPU

三、示例---Docker命令管理Nginx

3.1 拉取 Nginx 镜像

  1. 打开 Windows PowerShell 或命令提示符(CMD),确保以管理员身份运行。

  2. 输入以下命令拉取 Nginx 镜像:

    复制代码
    docker pull nginx

    该命令将从 Docker Hub 下载最新的 Nginx 镜像。

3.2 运行 Nginx 容器

成功拉取 Nginx 镜像后,可以启动一个 Nginx 容器:

1.运行以下命令:

bash 复制代码
docker run --name mynginx -p 8080:80 -d nginx

解析命令参数:

  • --name mynginx:为容器指定一个名称为 mynginx
  • -p 8080:80:将主机的 8080 端口映射到容器的 80 端口。(将容器的 80 端口映射到主机的 8080 端口,这样我们就可以通过主机的 8080 端口访问 Nginx 服务)
  • -d:以后台模式运行容器。
  • nginx:指定要运行的镜像。

2.成功启动后,您可以使用以下命令查看正在运行的容器:

bash 复制代码
docker ps

3.3 Nginx跳转到指定域名

需求 :访问 http://localhost:8080​ 时反向代理到 https://www.xiaomiev.com​,保留URI路径,且浏览器地址栏保持 localhost:8080​ 不变。

以下是完整配置方案和分步说明:

配置文件 C:\nginx-proxy-config\default.conf

nginx 复制代码
server {
    listen 80;  # 容器内监听80端口
    server_name localhost;

    location / {
        # 代理到目标域名(HTTPS协议)
        proxy_pass https://www.xiaomiev.com;

        # 关键请求头设置
        proxy_set_header Host www.xiaomiev.com;  # 强制指定目标域名
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # SSL相关配置
        proxy_ssl_server_name on;          # 启用SNI
        proxy_ssl_protocols TLSv1.2 TLSv1.3;  # 指定TLS版本
        proxy_ssl_verify off;              # 关闭证书验证(测试环境用)
  
        # 重定向处理
        proxy_redirect ~^(https?://)www\.xiaomiev\.com(.*) $scheme://localhost:8080$2;
    }
}

配置项 作用说明
proxy_ssl_server_name 启用SNI(Server Name Indication),确保正确解析HTTPS域名证书
proxy_ssl_verify off 测试环境专用,跳过SSL证书验证(生产环境应配置证书)
proxy_redirect 重写响应头中的Location字段,防止目标站点的重定向导致浏览器跳转

步骤 1:创建配置文件

  1. 在Windows主机创建目录:

    powershell 复制代码
    mkdir C:\nginx-proxy-config
  2. 新建配置文件 C:\nginx-proxy-config\default.conf​,内容使用上述完整配置

步骤 2:启动/重建容器

powershell 复制代码
# 停止并删除旧容器(如果存在)
docker stop my-nginx 2> $null
docker rm my-nginx 2> $null

# 启动新容器
docker run -d --name my-nginx -p 8080:80 -v C:\nginx-proxy-config:/etc/nginx/conf.d nginx
  • 关键参数-v C:\nginx-proxy-config:/etc/nginx/conf.d

    • 含义 :将主机的 C:\nginx-proxy-config 目录挂载到容器的 /etc/nginx/conf.d 目录
    • 效果 :容器启动时会自动加载该目录下的 所有 .conf 文件(包括 default.conf

步骤 3:验证配置

  1. 检查Nginx配置语法:

    powershell 复制代码
    docker exec my-nginx nginx -t

    应输出:

    复制代码
    nginx: configuration file /etc/nginx/nginx.conf test is successful

  2. 测试代理效果:

    powershell 复制代码
    # 检查HTTP响应头
    curl -I http://localhost:8080
    
    # 预期输出包含:
    # HTTP/1.1 200 OK
    # Server: nginx
    # 实际内容来自www.xiaomiev.com

3.4 Nginx容器删除

步骤 1: 列出正在运行的容器

使用以下命令查看当前正在运行的容器:

复制代码
docker ps

步骤 2: 停止容器

找到您要删除的容器的名称或 ID,然后使用以下命令停止它(将 [容器ID或名称]​ 替换为实际的容器 ID 或名称):

复制代码
docker stop [容器ID或名称]

例如,如果容器名称是 mynginx​,可以执行:

复制代码
docker stop mynginx

步骤 3: 删除容器

容器停止后,可以使用以下命令删除它:

复制代码
docker rm [容器ID或名称]

例如:

复制代码
docker rm mynginx

一步到位的命令

如果希望在停止和删除容器时一步到位,可以使用 -f​(强制)选项。这将强制停止并删除容器:

复制代码
docker rm -f [容器ID或名称]

注意事项
  • 在删除容器之前,确保您已经备份了任何需要的数据。
  • 被删除的容器无法恢复,所以请谨慎操作。

3.5 保存自有镜像

针对上述对容器中做的修改,修改保存。可以保存自有镜像方式实现

步骤 1: 确保容器的修改已完成

在保存镜像之前,确保您在 Nginx 容器中所做的所有修改(例如,配置文件、静态文件或其他内容的更新)已经完成。

步骤 2: 获取容器 ID 或名称

使用以下命令查看当前正在运行的容器,找到您想要保存的 Nginx 容器的 ID 或名称:

复制代码
docker ps

步骤 3: 提交容器为新镜像

使用 docker commit​ 命令将修改后的 Nginx 容器保存为新镜像。命令的基本语法如下:

复制代码
docker commit [容器ID或名称] [镜像名称:标签]

例如,如果您的容器名称是 mynginx​,您想将其保存为名为 mycustomnginx​ 的镜像,可以使用以下命令:

复制代码
docker commit mynginx mycustomnginx:latest

bash 复制代码
docker commit mynginx mycustomnginx:v1.0

步骤 4: 验证新镜像

提交完成后,您可以使用以下命令查看新的镜像是否成功创建:

复制代码
docker images

该命令会列出所有可用的镜像,您应该能在列表中找到 mycustomnginx​。

步骤 5: 使用新镜像

完成镜像创建后,您可以使用以下命令来启动一个新的容器:

复制代码
docker run --name newnginx -p 8080:80 -d mycustomnginx:latest

这将使用新创建的镜像启动一个名为 newnginx​ 的容器,并将其端口 80 映射到主机的端口 8080。

可以看到启动后,就是保存的自有镜像运行结果

结束语

Docker命令作为容器化技术的核心工具,不仅简化了应用的部署与管理,更重塑了开发与运维的高效协作范式。通过本文的镜像管理、容器操作、网络配置等命令解析,您已掌握从单服务部署到多容器联动的关键技能。无论是快速搭建Nginx服务,还是构建复杂微服务架构,Docker命令都能将环境差异和配置难题化繁为简。

建议在实践中结合场景需求,逐步探索Docker Compose、Swarm等进阶工具,持续释放容器化技术的潜力。唯有将命令转化为解决实际问题的能力,方能在云原生浪潮中游刃有余。

相关推荐
若云止水3 小时前
ngx_http_conf_ctx_t
nginx
神奇的海马体7 小时前
Kubeasz工具快速部署K8Sv1.27版本集群(二进制方式)
docker·容器·kubernetes·kubeasz
Psycho_MrZhang8 小时前
Docker DockerFile和Django最佳实践
数据库·docker·django
程序漫游人9 小时前
Nginx参数调优脚本
运维·网络·nginx
love530love12 小时前
巧用符号链接搬移C盘中的软件数据目录到其他盘
运维·开发语言·windows·docker
kaikai_sk12 小时前
Docker和Dify学习笔记
笔记·学习·docker
原野朝上13 小时前
Docker安装Nginx,轻松搭建属于自己的Web服务器
docker
Charlie不才13 小时前
【记录】使用 Docker 搭建 MongoDB 分布
mongodb·docker·容器
mumu-hn14 小时前
Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍
运维·docker·容器