在 Ubuntu 上安装和配置 Docker

DockerDockerBeginner
立即练习

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

简介

本教程提供了运行 Docker 镜像和管理 Docker 容器的全面指南。你将学习 Docker 的基础知识,探索 Docker 镜像及其用例,并发现拉取、管理和与 Docker 容器进行交互的技术。此外,本教程还涵盖了高级容器管理主题,如 Docker 卷、网络、Compose 和 Swarm,以帮助你使用 Docker 有效地部署和管理应用程序。

Docker 基础

什么是 Docker?

Docker 是一项强大的容器化技术,它彻底改变了应用程序的部署和开发方式。它允许开发者将应用程序及其所有依赖项打包成称为容器的标准化单元,确保在不同的计算环境中具有一致的性能。

Docker 的核心概念

容器化技术

容器化使应用程序能够在隔离的环境中运行,具有以下几个关键优势:

特性 描述
隔离性 每个容器独立运行
可移植性 容器可以在任何支持 Docker 的系统上运行
高效性 与传统虚拟机相比更轻量级
graph TD A[应用程序代码] --> B[Docker 容器] B --> C[主机操作系统] C --> D[基础设施]

Docker 架构

Docker 使用客户端 - 服务器架构,包含以下关键组件:

  1. Docker 守护进程
  2. Docker 客户端
  3. Docker 镜像仓库
  4. Docker 镜像
  5. 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

## 设置稳定仓库
echo "deb [arch=$(dpatch -s)]  $(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 pull ubuntu:latest

## 列出镜像
docker images

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

Docker 的主要优点

  • 一致的开发环境
  • 更快的部署
  • 资源高效利用
  • 可扩展性
  • 简化的配置管理

使用 Docker 镜像

理解 Docker 镜像

Docker 镜像是用于创建容器的只读模板。它们包含运行应用程序所需的应用代码、运行时环境、库和系统工具。

graph LR A[Dockerfile] --> B[Docker 镜像] B --> C[Docker 容器]

镜像管理命令

命令 描述
docker images 列出本地镜像
docker pull 从镜像仓库下载镜像
docker rmi 删除镜像
docker tag 为镜像打标签以便版本控制

创建 Dockerfile

## 基础镜像
FROM ubuntu:22.04

## 元数据
LABEL maintainer="[email protected]"

## 更新系统
RUN apt-get update && apt-get install -y \
  python3 \
  pip

## 设置工作目录
WORKDIR /app

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

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

## 暴露端口
EXPOSE 5000

## 运行应用
CMD ["python3", "app.py"]

构建 Docker 镜像

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

## 使用特定标签构建
docker build -t myapp:latest.

## 使用构建参数构建
docker build --build-arg VERSION=1.0 -t myapp:v1.

Docker 镜像层

graph TD A[基础镜像] --> B[系统更新] B --> C[安装依赖项] C --> D[复制应用代码] D --> E[定义启动命令]

镜像存储与共享

## 登录到 Docker Hub
docker login

## 将镜像推送到镜像仓库
docker push username/myapp:v1

## 从镜像仓库拉取镜像
docker pull username/myapp:v1

最佳实践

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

Docker 实践

容器网络

Docker 为容器通信提供了多种网络模式:

网络模式 描述
桥接(Bridge) 默认网络模式
主机(Host) 直接访问主机网络
无(None) 无网络连接
## 创建自定义网络
docker network create mynetwork

## 在特定网络上运行容器
docker run --network=mynetwork ubuntu

Docker Compose

version: "3"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  database:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret

容器编排工作流程

graph TD A[开发] --> B[容器化] B --> C[测试] C --> D[预发布] D --> E[生产部署]

扩展应用程序

## 扩展服务
docker-compose up -d --scale web=3

## 监控容器资源
docker stats

生产部署策略

## 滚动更新
docker service update \
  --image myapp:v2 \
  --update-parallelism 2 \
  --update-delay 10s \
  myservice

容器监控

## 查看容器日志
docker logs mycontainer

## 实时资源使用情况
docker top mycontainer

高级网络

## 创建覆盖网络
docker network create \
  -d overlay \
  --subnet 10.0.0.0/24 \
  my_overlay_network

安全实践

实践 描述
资源限制 限制 CPU/内存
只读文件系统 防止修改
非根用户 降低容器权限

总结

在本教程结束时,你将对如何运行 Docker 镜像、管理 Docker 容器以及利用高级容器管理技术更高效地部署和管理应用程序有扎实的理解。从本教程中学到的知识将使你能够在软件开发和部署过程中利用 Docker 的优势,如一致性、可扩展性和可移植性。