简介
本教程将指导你完成使用 Dockerfile 创建自定义 Docker 镜像、部署和管理 Docker 应用程序的过程。你将学习从自定义 Dockerfile 构建 Docker 镜像的命令,从而简化你的容器化工作流程并更高效地部署应用程序。
Docker 容器简介
Docker 是一个广受欢迎的开源平台,它使开发者能够在容器化环境中构建、部署和运行应用程序。容器是轻量级、独立且可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。
什么是 Docker?
Docker 是一种工具,旨在通过使用容器来简化创建、部署和运行应用程序的过程。容器允许开发者将应用程序及其所需的所有部件(如库和其他依赖项)打包在一起,并作为一个包进行交付。
Docker 容器的优点
- 可移植性:Docker 容器可以在任何环境中一致地运行,从开发者的本地机器到生产服务器,确保应用程序无论在何种底层基础设施上运行,其行为都是相同的。
- 可扩展性:Docker 使根据需要轻松扩展应用程序变得容易,通过添加或删除容器即可实现。
- 高效性:Docker 容器是轻量级的,并且共享主机操作系统,这使得它们比传统虚拟机更高效。
- 一致性:Docker 确保应用程序从开发到生产都以相同的方式运行,消除了“在我的机器上能运行”的问题。
Docker 架构
Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程进行通信,Docker 守护进程负责构建、运行和分发 Docker 容器。
graph LD
subgraph Docker 架构
client[Docker 客户端]
daemon[Docker 守护进程]
client -- API --> daemon
daemon -- 镜像 --> registry[Docker 镜像仓库]
end
Docker 容器与虚拟机对比
虽然容器和虚拟机(VM)都用于在隔离环境中运行应用程序,但它们存在一些关键区别:
| 特性 | Docker 容器 | 虚拟机 |
|---|---|---|
| 隔离性 | 容器共享主机的操作系统内核,提供更轻量级的隔离。 | 虚拟机有自己完整的操作系统,提供更强的隔离。 |
| 资源使用 | 容器更高效,因为它们共享主机资源,无需运行完整的操作系统。 | 虚拟机需要更多资源,因为每个虚拟机都有自己的操作系统。 |
| 启动时间 | 容器可以在几秒钟内启动,因为它们无需启动完整的操作系统。 | 虚拟机可能需要几分钟才能启动,因为它们需要启动整个操作系统。 |
开始使用 Docker
要开始使用 Docker,你需要在系统上安装 Docker 引擎。你可以从 Docker 官方网站(https://www.docker.com/get-started)下载并安装 Docker。安装完成后,你就可以开始使用 Docker 来构建、部署和运行你的应用程序了。
创建自定义 Docker 镜像
创建自定义 Docker 镜像是基于现有基础镜像构建新镜像,然后添加你自己的自定义内容的过程,比如应用程序代码、依赖项和配置。
Dockerfile
Dockerfile 是一个文本文件,其中包含构建 Docker 镜像所需的所有指令。它指定了基础镜像、构建过程中要执行的步骤以及镜像的最终配置。
以下是一个 Dockerfile 示例:
## 使用官方 Ubuntu 22.04 基础镜像
FROM ubuntu:22.04
## 更新软件包索引并安装必要的软件包
RUN apt-get update && apt-get install -y \
git \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
## 设置工作目录
WORKDIR /app
## 复制应用程序代码
COPY. /app
## 安装 Python 依赖项
RUN pip3 install --no-cache-dir -r requirements.txt
## 暴露应用程序将运行的端口
EXPOSE 8080
## 设置运行应用程序的命令
CMD ["python3", "app.py"]
构建自定义镜像
要使用 Dockerfile 构建自定义 Docker 镜像,请执行以下步骤:
在项目目录中创建一个 Dockerfile。
打开终端并导航到项目目录。
运行以下命令来构建镜像:
docker build -t my-custom-image.此命令将使用 Dockerfile 中的指令构建一个名为“my-custom-image”的新 Docker 镜像。
将镜像推送到镜像仓库
构建自定义 Docker 镜像后,可以将其推送到 Docker 镜像仓库,如 Docker Hub 或私有镜像仓库,以便在其他系统上共享和部署。
登录到 Docker 镜像仓库:
docker login使用镜像仓库的 URL 和你的用户名标记镜像:
docker tag my-custom-image username/my-custom-image:latest将镜像推送到镜像仓库:
docker push username/my-custom-image:latest
现在,你的自定义 Docker 镜像已在镜像仓库中可用,其他开发者可以拉取并使用它,或者将其部署到生产环境中。
部署和管理 Docker 应用程序
创建自定义 Docker 镜像后,就可以部署和管理基于 Docker 的应用程序了。本节将介绍部署和管理 Docker 应用程序所涉及的关键概念和步骤。
部署 Docker 容器
要部署 Docker 容器,可以使用 docker run 命令。该命令基于指定的镜像启动一个新容器,并允许你配置各种选项,如端口映射、环境变量和卷挂载。
以下是基于“my-custom-image”镜像运行容器的示例:
docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image
此命令将:
- 以分离模式运行容器(
-d) - 将容器的 8080 端口映射到主机的 8080 端口(
-p 8080:8080) - 设置环境变量
DB_HOST,其值为192.168.1.100(-e DB_HOST=192.168.1.100) - 将主机目录
/data挂载到容器的/app/data目录(-v /data:/app/data) - 使用“my-custom-image”镜像启动容器
管理 Docker 容器
Docker 提供了几个命令来管理正在运行的容器:
docker ps:列出所有正在运行的容器docker stop <容器ID>:停止正在运行的容器docker start <容器ID>:启动已停止的容器docker logs <容器ID>:查看容器的日志docker exec -it <容器ID> /bin/bash:访问正在运行的容器的 shell
Docker Compose
Docker Compose 是一个工具,允许你定义和管理多容器 Docker 应用程序。它使用 YAML 文件为你的应用程序配置服务、网络和卷。
以下是一个 docker-compose.yml 文件示例:
version: "3"
services:
web:
build:.
ports:
- "8080:8080"
environment:
- DB_HOST=database
depends_on:
- database
database:
image: mysql:5.7
environment:
- MYSQL_DATABASE=myapp
- MYSQL_ROOT_PASSWORD=secret
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
此 Compose 文件定义了两个服务:一个 web 服务和一个数据库服务。web 服务从当前目录构建,而数据库服务使用官方 MySQL 5.7 镜像。这些服务通过网络连接,数据库服务的数据持久保存在一个命名卷中。
要部署此应用程序,可以在与 docker-compose.yml 文件相同的目录中运行 docker-compose up -d。
扩展 Docker 应用程序
通过添加或删除容器,Docker 使扩展应用程序变得容易。可以使用 Docker Compose 来扩展服务:
docker-compose up -d --scale web=3
此命令将启动三个“web”服务实例。
监控和日志记录
Docker 提供了用于监控和记录容器的内置工具。可以使用 docker stats 命令查看实时资源使用情况,使用 docker logs 命令访问容器的日志。
此外,可以将 Docker 应用程序与外部监控和日志记录工具(如 Prometheus、Grafana 和 Elasticsearch)集成,以获得更高级的见解和功能。
总结
在本教程中,你已经学习了如何使用 Dockerfile 创建自定义 Docker 镜像、部署和管理 Docker 应用程序。你现在知道了从自定义 Dockerfile 构建 Docker 镜像的命令,这使你能够简化容器化过程并更有效地部署应用程序。



