Docker create 命令(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在现代软件开发和部署领域,Docker 已经成为容器化技术的代名词。它简化了应用的打包、分发和运行流程,而 docker create
命令正是这一过程中的核心工具之一。无论是构建微服务架构、快速测试环境,还是实现 DevOps 流程,理解 docker create
的原理和用法,都能显著提升开发者的效率。本文将从零开始,逐步解析 docker create
命令的语法、参数、应用场景,并通过实际案例帮助读者掌握其核心功能。
什么是 Docker create 命令?
docker create
是 Docker 提供的用于创建容器的命令。它通过指定镜像、配置参数等选项,在宿主机上生成一个容器实例,但此时容器处于“未启动”状态。这类似于“搭建帐篷”的过程:你准备好所有材料(镜像、配置),但帐篷(容器)尚未展开使用。
与 docker run
的区别在于,docker create
只负责创建容器,而 docker run
会直接创建并启动容器。因此,docker create
更适合需要精细配置后再启动的场景,例如调试或批量创建容器。
Docker create 命令的基础语法
docker create
的基本语法如下:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
关键参数解释
-i
或--interactive
:保持容器的标准输入打开,即使没有附加到终端。-t
或--tty
:分配一个伪终端(TTY),常与-i
联合使用(即-it
),用于交互式操作。--name
:为容器指定一个自定义名称(默认名称由随机字符串生成)。-p
或--publish
:将容器的端口映射到宿主机,例如-p 8080:80
表示将容器的 80 端口映射到宿主机的 8080 端口。-v
或--volume
:挂载数据卷,用于持久化容器数据。
实战:通过 Docker create 创建基础容器
案例 1:创建一个 Nginx 容器
假设我们需要部署一个静态网页服务器,可以按以下步骤操作:
-
拉取镜像:
docker pull nginx:latest
-
创建容器:
docker create \ --name my-nginx \ -p 8080:80 \ -v /my/local/data:/usr/share/nginx/html \ nginx:latest
参数解析:
--name my-nginx
:容器名称设为my-nginx
,便于后续管理。-p 8080:80
:将容器的 80 端口映射到宿主机的 8080 端口。-v /my/local/data:/usr/share/nginx/html
:将本地的/my/local/data
目录挂载到容器的网页根目录,确保数据持久化。
-
启动容器:
docker start my-nginx
此时,访问
http://localhost:8080
即可看到 Nginx 默认页面。
Docker create 的高级参数与场景
1. 定制化配置:使用 --env
设置环境变量
通过 --env
或 -e
参数,可以在创建容器时注入环境变量。例如,部署一个 MySQL 容器并设置初始密码:
docker create \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-p 3306:3306 \
mysql:5.7
此命令中,MYSQL_ROOT_PASSWORD
环境变量会被 MySQL 镜像自动读取,设置 root 用户的初始密码。
2. 挂载配置文件:使用 -v
实现动态配置
假设我们需要为 Nginx 容器挂载自定义的 nginx.conf
文件:
docker create \
--name custom-nginx \
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
nginx:latest
这样,容器会使用宿主机上的配置文件,而非镜像自带的默认配置。
3. 指定网络与依赖容器
通过 --network
参数,可以将容器加入自定义网络,或与其他容器通信。例如:
docker create \
--name app-container \
--network my-network \
my-app-image:latest
此命令将容器加入名为 my-network
的 Docker 网络,使其能够与同一网络中的其他容器直接通信。
常见问题与解决方案
问题 1:容器创建后如何查看状态?
使用 docker ps -a
可以列出所有容器,包括未运行的容器。例如:
docker ps -a --filter "name=my-nginx"
问题 2:如何删除未启动的容器?
若容器未启动,直接使用 docker rm
即可:
docker rm my-nginx
问题 3:如何修改已创建容器的配置?
一旦容器被创建,其基础配置(如挂载的卷、端口映射)无法直接修改。此时需要删除容器并重新创建。
进阶技巧:组合参数实现复杂场景
案例 2:创建一个包含多层配置的容器
假设我们需部署一个包含以下要求的 PHP 应用:
- 挂载本地代码目录到容器;
- 暴露 80 端口;
- 设置环境变量
APP_ENV=development
; - 使用自定义网络
my-net
。
命令如下:
docker create \
--name my-php-app \
-v /local/code:/var/www/html \
-p 80:80 \
-e APP_ENV=development \
--network my-net \
php:7.4-apache
Docker create 与 Docker run 的对比
虽然 docker create
和 docker run
均用于创建容器,但二者的核心区别在于执行流程:
| 参数 | docker create
| docker run
|
|---------------------|-------------------------------------|---------------------------------|
| 功能 | 仅创建容器,不启动 | 创建并立即启动容器 |
| 适用场景 | 需要精细配置后启动的场景 | 快速测试或临时使用 |
| 后续操作 | 需手动 docker start
启动 | 容器直接运行 |
结论
通过本文,我们系统学习了 docker create
命令的语法、参数、实际案例及进阶技巧。从基础的容器创建,到环境变量、网络配置的高级应用,读者可以逐步掌握这一工具的核心能力。在实际开发中,合理使用 docker create
能够显著提升容器管理的灵活性和可控性。
建议读者动手实践:尝试创建一个包含数据卷和端口映射的容器,并观察其运行状态。通过实践,您将更深入理解 Docker 容器化技术的精髓。