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 容器

假设我们需要部署一个静态网页服务器,可以按以下步骤操作:

  1. 拉取镜像

    docker pull nginx:latest  
    
  2. 创建容器

    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 目录挂载到容器的网页根目录,确保数据持久化。
  3. 启动容器

    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 应用:

  1. 挂载本地代码目录到容器;
  2. 暴露 80 端口;
  3. 设置环境变量 APP_ENV=development
  4. 使用自定义网络 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 createdocker run 均用于创建容器,但二者的核心区别在于执行流程:
| 参数 | docker create | docker run |
|---------------------|-------------------------------------|---------------------------------|
| 功能 | 仅创建容器,不启动 | 创建并立即启动容器 |
| 适用场景 | 需要精细配置后启动的场景 | 快速测试或临时使用 |
| 后续操作 | 需手动 docker start 启动 | 容器直接运行 |


结论

通过本文,我们系统学习了 docker create 命令的语法、参数、实际案例及进阶技巧。从基础的容器创建,到环境变量、网络配置的高级应用,读者可以逐步掌握这一工具的核心能力。在实际开发中,合理使用 docker create 能够显著提升容器管理的灵活性和可控性。

建议读者动手实践:尝试创建一个包含数据卷和端口映射的容器,并观察其运行状态。通过实践,您将更深入理解 Docker 容器化技术的精髓。

最新发布