简介
本全面的 Docker 教程为开发者和 IT 专业人员提供了对容器技术的基本理解。通过探索 Docker 的核心概念、架构和实际应用,学习者将获得现代软件部署和应用开发策略方面的关键技能。
本全面的 Docker 教程为开发者和 IT 专业人员提供了对容器技术的基本理解。通过探索 Docker 的核心概念、架构和实际应用,学习者将获得现代软件部署和应用开发策略方面的关键技能。
Docker 是一项强大的容器技术,它彻底改变了软件部署和应用开发方式。它使开发者能够将应用及其所有依赖项打包成称为容器的标准化单元,确保在不同的计算环境中具有一致的性能。
Docker 提供了一种轻量级的替代传统虚拟机的方案,使软件能够在隔离的环境中运行,开销极小。Docker 的关键组件包括:
| 组件 | 描述 |
|---|---|
| Docker 引擎 | 用于创建和管理容器的核心运行时环境 |
| 容器 | 包含应用及其依赖项的轻量级可执行包 |
| Docker 镜像 | 用于创建容器的只读模板 |
| Docker 仓库 | Docker 镜像的存储和分发平台 |
## 更新软件包索引
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
## 设置稳定仓库
echo "deb [arch=amd64 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 --version
## 从 Docker Hub 拉取镜像
docker pull ubuntu:latest
## 列出可用镜像
docker images
## 运行容器
docker run -it ubuntu:latest /bin/bash
Docker 支持在各种场景下进行高效的软件部署:
Docker 容器在资源利用方面具有显著优势:
Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。它定义了在容器内运行应用所需的环境、依赖项和配置。
| 指令 | 用途 | 示例 |
|---|---|---|
| FROM | 指定基础镜像 | FROM ubuntu:22.04 |
| RUN | 执行命令 | RUN apt-get update |
| COPY | 将文件复制到镜像中 | COPY./app /application |
| WORKDIR | 设置工作目录 | WORKDIR /application |
| ENV | 设置环境变量 | ENV PORT=8080 |
| EXPOSE | 声明容器端口 | EXPOSE 8080 |
| CMD | 定义默认命令 | CMD ["python", "app.py"] |
## 选择基础镜像
FROM python:3.9-slim
## 设置工作目录
WORKDIR /app
## 安装系统依赖项
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
## 复制应用文件
COPY. /app
## 安装 Python 依赖项
RUN pip install --no-cache-dir -r requirements.txt
## 暴露应用端口
EXPOSE 5000
## 定义启动命令
CMD ["python", "app.py"]
## 使用标签构建镜像
docker build -t myapp:v1.
## 列出创建的镜像
docker images
## 验证镜像详细信息
docker inspect myapp:v1
## 构建阶段
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml.
COPY src./src
RUN mvn package
## 运行时阶段
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
Docker 容器在其运行生命周期中会经历多个状态,提供了灵活的管理和部署能力。
| 命令 | 操作 | 描述 |
|---|---|---|
| docker create | 初始化 | 创建容器但不启动 |
| docker start | 启动 | 启动已停止的容器 |
| docker run | 实例化 | 创建并立即启动容器 |
| docker stop | 终止 | 优雅地停止运行中的容器 |
| docker pause | 暂停 | 冻结容器进程 |
| docker unpause | 恢复 | 恢复已暂停的容器 |
| docker rm | 删除 | 永久删除容器 |
## 创建 nginx 容器
docker create --name web-server nginx:latest
## 启动容器
docker start web-server
## 运行交互式容器
docker run -it ubuntu:22.04 /bin/bash
## 停止运行中的容器
docker stop web-server
## 删除已停止的容器
docker rm web-server
## 创建多个容器实例
docker run -d --name web1 nginx:latest
docker run -d --name web2 nginx:latest
docker run -d --name web3 nginx:latest
## 列出运行中的容器
docker ps
## 检查容器详细信息
docker inspect web1
## 限制容器资源
docker run -d \
--name limited-container \
--cpus="0.5" \
--memory="512m" \
nginx:latest
## 监控容器性能
docker stats limited-container
## 使用 docker-compose 进行多容器管理
version: '3'
services:
web:
image: nginx:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
## 创建自定义网络
docker network create mynetwork
## 在特定网络中运行容器
docker run -d --name app --network mynetwork nginx:latest
Docker 代表了一种变革性的软件开发和部署方法,它在不同的计算平台上提供轻量级、可移植且一致的环境。通过掌握 Docker 基础知识,开发者可以通过容器化技术简化应用程序打包、提高可扩展性并增强整体系统效率。