简介
本全面的 Docker 教程为开发者和 IT 专业人员深入介绍了容器化技术。通过探索 Docker 的核心概念、架构和实际实施策略,学习者将获得在不同计算环境中打包、部署和管理应用程序的实用技能。
本全面的 Docker 教程为开发者和 IT 专业人员深入介绍了容器化技术。通过探索 Docker 的核心概念、架构和实际实施策略,学习者将获得在不同计算环境中打包、部署和管理应用程序的实用技能。
Docker 是一个强大的容器化平台,它彻底改变了应用程序的部署和开发方式。作为一项开源技术,Docker 使开发者能够在不同的计算环境中一致地打包、分发和运行应用程序。
特性 | Docker 容器 | 虚拟机 |
---|---|---|
资源使用 | 轻量级 | 资源密集型 |
启动时间 | 秒级 | 分钟级 |
隔离级别 | 进程级 | 整个系统 |
Docker 使用客户端 - 服务器架构,包含以下关键组件:
在 Ubuntu 22.04 上安装 Docker:
## 更新系统软件包
sudo apt update
## 安装 Docker 依赖项
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 安装
sudo docker --version
## 拉取 Ubuntu 镜像
sudo docker pull ubuntu:latest
## 运行一个交互式容器
sudo docker run -it ubuntu:latest /bin/bash
## 列出正在运行的容器
sudo docker ps
## 列出所有容器
sudo docker ps -a
## 搜索镜像
sudo docker search nginx
## 下载一个镜像
sudo docker pull nginx
## 列出本地镜像
sudo docker images
网络类型 | 描述 | 使用场景 |
---|---|---|
桥接 | 默认网络 | 隔离容器通信 |
主机 | 直接使用主机网络 | 对性能要求极高的应用程序 |
无网络 | 无网络访问权限 | 完全隔离的容器 |
覆盖 | 多主机网络 | 分布式容器系统 |
## 将容器端口 80 映射到主机端口 8080
sudo docker run -p 8080:80 nginx
## 映射多个端口
sudo docker run -p 8080:80 -p 3306:3306 myapp
## 列出 Docker 网络
sudo docker network ls
## 创建自定义网络
sudo docker network create mynetwork
## 将容器连接到网络
sudo docker network connect mynetwork mycontainer
## 检查网络详细信息
sudo docker network inspect bridge
## 创建自定义桥接网络
sudo docker network create --driver bridge isolated_network
## 在自定义网络中运行容器
sudo docker run -d --name web1 --network isolated_network nginx
sudo docker run -d --name web2 --network isolated_network httpd
## 禁用外部网络访问
sudo docker run --network none mycontainer
## 直接使用主机网络
sudo docker run --network host mycontainer
## 启用容器之间的自动 DNS
sudo docker run --name db-container mysql
sudo docker run --name app-container --link db-container:database myapp
## 将容器限制为 1 个 CPU 核心和 512MB 内存
sudo docker run -it --cpus=1 --memory=512m ubuntu /bin/bash
## 设置内存和交换空间限制
sudo docker run -it --memory=1g --memory-swap=2g ubuntu /bin/bash
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: mysecretpassword
安全技术 | 实施方法 |
---|---|
非 root 容器 | 在 Dockerfile 中使用 USER 指令 |
只读文件系统 | 在卷挂载中添加 :ro 标志 |
限制容器能力 | 使用 --cap-drop 和 --cap-add |
## 初始化 Swarm 集群
sudo docker swarm init
## 创建带有副本的服务
sudo docker service create --replicas 3 --name web nginx
## 动态扩展服务
sudo docker service scale web=5
## 使用子网创建自定义网络
sudo docker network create \
--driver bridge \
--subnet 192.168.0.0/24 \
--gateway 192.168.0.1 \
custom_network
## 实时查看容器日志
sudo docker logs -f container_name
## 检查容器指标
sudo docker stats container_name
## 限制日志文件大小
sudo docker run --log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
## 多阶段构建
FROM maven:3.8.1-openjdk-11 AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package
FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Docker 代表了一种变革性的软件部署方法,提供轻量级、可移植且高效的容器化解决方案。通过掌握 Docker 的基本概念、架构和命令行技术,开发者可以简化应用程序开发、提高系统一致性,并增强整体基础设施的可扩展性和性能。