一、前言
在现代软件开发和运维中,容器化技术已经成为不可或缺的一部分。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 |
-
拉取镜像
bashdocker pull [镜像名]:[标签] # 默认拉取最新版(latest)
示例:
bashdocker pull nginx:1.21.6 # 拉取指定版本Nginx
-
构建镜像
bashdocker build -t [自定义镜像名]:[标签] [Dockerfile路径]
参数:
-t
:指定镜像名称和标签-f
:指定自定义Dockerfile文件名
-
列出镜像
bashdocker images # 显示所有镜像 docker image ls # 同上(新语法)
-
删除镜像
bashdocker 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
:指定网络
-
启动容器
bashdocker run [参数] [镜像名]
常用参数:
-d
:后台运行(守护模式)--name
:自定义容器名称-p [宿主机端口]:[容器端口]
:端口映射-v [宿主机路径]:[容器路径]
:数据卷挂载--restart=always
:容器自动重启
示例:
bashdocker run -d --name my-nginx -p 80:80 -v ./html:/usr/share/nginx/html nginx
-
停止/删除容器
bashdocker stop [容器ID或名称] # 停止容器 docker start [容器ID或名称] # 启动已停止的容器 docker rm [容器ID或名称] # 删除已停止的容器 docker rm -f [容器ID或名称] # 强制删除运行中的容器
-
查看容器状态
bashdocker ps # 查看运行中的容器 docker ps -a # 查看所有容器(包括已停止的) docker stats # 实时监控容器资源占用(CPU/内存)
2.3 容器交互与调试
核心功能:进入容器内部操作、日志查看与文件传输。
-
进入容器终端
bashdocker exec -it [容器名] /bin/bash # 启动交互式终端
参数:
-i
:保持标准输入打开-t
:分配伪终端
-
查看容器日志
bashdocker logs [容器名] # 查看全部日志 docker logs -f [容器名] # 实时追踪日志(类似tail -f) docker logs --tail 100 [容器名] # 查看最后100行日志
-
文件复制
bashdocker 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 |
-
查看网络
bashdocker network ls # 列出所有网络 docker network inspect [网络名] # 查看网络详细信息
-
创建自定义网络
bashdocker network create [网络名]
示例:
bashdocker network create my-net # 创建桥接网络
-
容器加入网络
bashdocker run --net=[网络名] [其他参数] [镜像名]
示例:
bashdocker 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 |
-
创建数据卷
bashdocker volume create [卷名] # 创建命名卷
-
挂载数据卷
bashdocker run -v [卷名]:[容器路径] [镜像名] # 挂载命名卷 docker run -v [宿主机路径]:[容器路径] [镜像名] # 挂载主机目录
示例(Nginx配置持久化):
bashdocker 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 |
-
启动服务
bashdocker-compose up -d # 后台启动所有服务
-
停止服务
bashdocker-compose down # 停止并删除容器、网络
-
配置文件示例 (
docker-compose.yml
):yamlversion: '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 系统维护与清理
核心功能:资源监控与垃圾清理。
-
查看磁盘占用
bashdocker system df # 显示镜像、容器、卷的磁盘使用情况
-
清理无用资源
bashdocker system prune # 删除所有停止的容器、未被使用的镜像和卷 docker system prune -a # 额外清理未被任何容器引用的镜像
2.8 安全与权限管理
核心功能:限制容器权限,提升安全性。
-
以非root用户运行容器
bashdocker run -u [用户名或UID] [镜像名]
示例:
bashdocker run -u 1000 nginx # 使用UID 1000运行
-
限制容器资源
bashdocker run --memory=512m --cpus=1 [镜像名] # 限制内存和CPU
三、示例---Docker命令管理Nginx
3.1 拉取 Nginx 镜像
-
打开 Windows PowerShell 或命令提示符(CMD),确保以管理员身份运行。
-
输入以下命令拉取 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:创建配置文件
-
在Windows主机创建目录:
powershellmkdir C:\nginx-proxy-config
-
新建配置文件
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:验证配置
-
检查Nginx配置语法:
powershelldocker exec my-nginx nginx -t
应输出:
nginx: configuration file /etc/nginx/nginx.conf test is successful
-
测试代理效果:
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等进阶工具,持续释放容器化技术的潜力。唯有将命令转化为解决实际问题的能力,方能在云原生浪潮中游刃有余。