如何创建 Docker 镜像和容器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面的 Docker 教程为开发者和系统管理员提供了一份实用指南,帮助他们理解和应用容器技术。通过探索 Docker 的核心原理、架构和基本命令,学习者将获得在各种计算环境中高效打包、分发和运行应用程序所需的技能。

Docker 基础

什么是 Docker?

Docker 是一项强大的容器化技术,它彻底改变了软件的打包和部署方式。它使开发者能够在不同的计算环境中一致地创建、分发和运行应用程序。

Docker 的核心概念

容器化原理

容器化允许将应用程序与其所有依赖项捆绑在一起,确保在各种平台上统一执行。与传统虚拟机不同,容器共享主机系统的内核,这使得它们轻量级且高效。

graph TD A[应用程序代码] --> B[Docker 容器] B --> C[一致的部署] B --> D[隔离] B --> E[可移植性]

Docker 架构

组件 描述
Docker 守护进程 管理容器的后台服务
Docker 客户端 用于与 Docker 交互的命令行界面
Docker 镜像仓库 Docker 镜像的存储和分发平台

在 Ubuntu 22.04 上安装

## 更新软件包索引
sudo apt update

## 安装所需的依赖项
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 设置 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Docker 基本命令

## 检查 Docker 版本
docker --version

## 从 Docker Hub 拉取镜像
docker pull ubuntu:latest

## 列出可用镜像
docker images

## 运行容器
docker run -it ubuntu:latest /bin/bash

Docker 的主要优势

  • 一致的开发和生产环境
  • 快速的应用程序部署
  • 高效的资源利用
  • 简化的依赖管理
  • 增强的可扩展性和可移植性

构建 Docker 镜像

理解 Docker 镜像

Docker 镜像是只读模板,其中包含一组用于创建 Docker 容器的指令。它们是容器化应用程序的基础,打包了所有必要的依赖项和配置。

Dockerfile 基础

Dockerfile 是一个文本文件,其中包含用于组装 Docker 镜像的命令。它提供了一种系统的方法来创建和配置镜像。

graph TD A[Dockerfile] --> B[构建命令] B --> C[Docker 镜像] C --> D[容器部署]

Dockerfile 指令类型

指令 用途
FROM 指定基础镜像
RUN 在镜像构建期间执行命令
COPY 将文件复制到镜像中
WORKDIR 设置工作目录
EXPOSE 声明网络端口
CMD 定义默认的容器执行命令

创建一个示例 Dockerfile

## 使用官方 Ubuntu 基础镜像
FROM ubuntu:22.04

## 更新系统软件包
RUN apt-get update && apt-get upgrade -y

## 安装 Python
RUN apt-get install -y python3 python3-pip

## 设置工作目录
WORKDIR /app

## 复制应用程序文件
COPY. /app

## 安装依赖项
RUN pip3 install -r requirements.txt

## 指定默认命令
CMD ["python3", "app.py"]

构建 Docker 镜像

## 导航到包含 Dockerfile 的目录
cd /path/to/project

## 构建 Docker 镜像
docker build -t myapp:v1.

## 验证创建的镜像
docker images

镜像管理命令

## 列出本地镜像
docker images

## 删除特定镜像
docker rmi myapp:v1

## 标记镜像
docker tag myapp:v1 myregistry/myapp:latest

## 将镜像推送到镜像仓库
docker push myregistry/myapp:latest

镜像创建的最佳实践

  • 最小化镜像大小
  • 使用多阶段构建
  • 利用缓存机制
  • 避免安装不必要的软件包
  • 实施安全扫描

容器部署

容器生命周期管理

容器部署涉及管理 Docker 容器的整个生命周期,从创建到终止,确保应用程序高效且可靠地运行。

graph LR A[拉取镜像] --> B[创建容器] B --> C[启动容器] C --> D[运行状态] D --> E[停止容器] E --> F[删除容器]

容器部署策略

策略 描述
单容器 单个容器的基本部署
多容器 部署相互连接的容器
扩展 容器实例的水平扩展
滚动更新 逐步替换容器

基本容器部署命令

## 运行一个简单的容器
docker run -d --name web-app nginx:latest

## 运行带有端口映射的容器
docker run -p 8080:80 -d nginx:latest

## 运行带有环境变量的容器
docker run -e DATABASE_URL=postgres://user:pass@host/db -d myapp:v1

高级部署选项

## 容器资源限制
docker run --cpus=2 --memory=1g nginx:latest

## 卷挂载
docker run -v /host/path:/container/path nginx:latest

## 网络配置
docker run --network=custom_network nginx:latest

容器管理命令

## 列出正在运行的容器
docker ps

## 列出所有容器
docker ps -a

## 停止一个容器
docker stop web-app

## 删除一个容器
docker rm web-app

## 重启一个容器
docker restart web-app

容器编排基础

## 使用 Docker Compose 部署
docker-compose up -d

## 扩展容器
docker-compose scale web=3

## 检查服务状态
docker-compose ps

监控容器性能

## 实时容器资源使用情况
docker stats

## 容器日志
docker logs web-app

## 检查容器详细信息
docker inspect web-app

总结

Docker 通过提供轻量级、可移植的容器化解决方案,彻底改变了软件开发方式,确保应用程序能够一致地部署。通过掌握 Docker 的基本概念、安装过程和关键命令,专业人员可以简化他们的开发工作流程,提高系统可靠性,并在不同平台和云环境中实现更高的基础设施灵活性。