构建一个 Web 服务器 Dockerfile
Docker - 构建一个 Web 服务器 Dockerfile
Section titled “Docker - 构建一个 Web 服务器 Dockerfile”我们已经学习了如何使用现有镜像。现在,让我们使用 Dockerfile 构建自己的定制镜像。我们将创建一个基于 Ubuntu 并安装了 Apache 的简单 Web 服务器镜像。
创建 Dockerfile
Section titled “创建 Dockerfile”步骤 1:在一个新的、空目录中创建一个名为 Dockerfile 的文件(区分大小写,无扩展名)。使用文本编辑器添加以下内容:
# 使用官方 Ubuntu 基础镜像(指定版本以确保可重复性)FROM ubuntu:22.04
# 设置标签(可选,良好实践)LABEL maintainer="Your Name <your.email@example.com>"LABEL description="Simple Apache web server based on Ubuntu"
# 更新软件包列表,安装 Apache,并在一个层中清理# 使用非交互模式避免构建期间的提示RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 apache2-utils && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*
# 暴露端口 80(Apache 监听的标准 HTTP 端口)EXPOSE 80
# 容器启动时运行的命令# 在前台运行 Apache,这对于 Docker 是必需的CMD ["apache2ctl", "-D", "FOREGROUND"]关于此 Dockerfile 的关键点:
FROM ubuntu:22.04:指定基础镜像。使用22.04这样的特定标签比latest更有利于构建的一致性。LABEL:提供关于镜像的元数据(取代了已废弃的MAINTAINER)。RUN:在镜像构建过程中执行命令。我们使用&& \链接命令以最小化镜像层,并清理 apt 缓存(apt-get clean、rm -rf ...)以减小镜像大小。DEBIAN_FRONTEND=noninteractive:防止在软件包安装过程中出现交互式提示。EXPOSE 80:表明容器在端口 80 上监听。它实际上不发布端口;这通过docker run -p完成。CMD:指定从此镜像启动容器时要运行的默认命令。apache2ctl -D FOREGROUND通过在前台运行 Apache 来保持容器运行。
步骤 2:打开终端,导航到包含 Dockerfile 的目录,然后运行 docker build 命令:
# 构建镜像并将其标记为 'my-apache-server:1.0'docker build -t my-apache-server:1.0 .-t my-apache-server:1.0:用名称(my-apache-server)和版本标签(1.0)标记镜像。这使得引用变得容易。.:指定构建上下文(当前目录),Docker 在其中查找Dockerfile以及COPY或ADD指令所需的任何文件(此处未使用)。
Docker 将逐步执行 Dockerfile 中的指令,如有必要会下载基础镜像,运行命令,并创建层。您会看到每个步骤的输出。成功完成后,您将拥有一个名为 my-apache-server:1.0 的新镜像。
您可以使用以下命令验证镜像是否存在:
docker images步骤 3:现在,从您新构建的镜像运行一个容器:
# 以分离模式 (-d) 运行容器,并将主机端口 8080 映射到容器端口 80 (-p)docker run -d -p 8080:80 --name my-running-webserver my-apache-server:1.0-d:以分离模式(在后台)运行容器。-p 8080:80:将主机上的端口 8080 映射到容器内部的端口 80(Apache 在此监听)。--name my-running-webserver:为容器指定一个名称,以便更轻松地管理。my-apache-server:1.0:要运行的镜像。
要测试它,打开 Web 浏览器并导航到 http://localhost:8080(如果 Docker 未在本地运行,则为 http://<your-docker-host-ip>:8080)。您应该会看到默认的 Apache Ubuntu 页面,这确认了您的定制 Web 服务器容器正在运行!