初学者如何掌握 Docker 基础

DockerBeginner
立即练习

简介

本全面的 Docker 教程为开发者和 IT 专业人员提供了对容器技术的基本理解。通过探索 Docker 的核心概念、安装过程和实用的命令行技术,学习者将获得在不同计算环境中打包、部署和管理应用程序的实用技能。

Docker 基础

Docker 与容器技术简介

Docker 是一个强大的容器化平台,使开发者能够在不同的计算环境中一致地打包、分发和运行应用程序。作为现代软件部署中的关键工具,Docker 简化了创建、管理和扩展应用程序的过程。

Docker 的核心概念

graph TD
    A[Docker 镜像] --> B[Docker 容器]
    A --> C[Dockerfile]
    B --> D[容器运行时]

Docker 引入了几个基本概念:

概念 描述
Docker 镜像 包含应用程序代码和依赖项的只读模板
Docker 容器 镜像的可运行实例
Dockerfile 定义镜像构建指令的文本文件
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=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 版本

## 从 Docker Hub 拉取镜像

## 列出可用镜像

## 运行容器

## 列出正在运行的容器

## 停止容器

实际示例:运行一个简单的 Web 应用程序

## 拉取 Nginx 镜像
docker pull nginx:latest

## 运行 Nginx 容器
docker run -d -p 8080:80 nginx:latest

## 验证容器是否正在运行
docker ps

此示例展示了如何使用 Docker 快速部署 Web 服务器,体现了其在软件部署中的简单性和高效性。

容器管理

容器生命周期操作

Docker 提供了全面的工具来管理容器的生命周期,使开发者能够高效地控制和操作容器。

graph LR
    A[已创建] --> B[正在运行]
    B --> C[已停止]
    C --> D[已删除]
    D --> E[已重启]

容器管理命令

命令 功能 示例
docker create 创建一个容器 docker create nginx
docker start 启动一个已停止的容器 docker start <容器ID>
docker stop 停止一个正在运行的容器 docker stop <容器ID>
docker restart 重启一个容器 docker restart <容器ID>
docker rm 删除一个容器 docker rm <容器ID>

高级容器控制

## 使用自定义名称运行容器
docker run --name web-server -d nginx:latest

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

## 查看容器日志
docker logs web-server

## 在正在运行的容器内执行命令
docker exec -it web-server /bin/bash

容器资源管理

## 限制容器的 CPU 和内存
docker run -d --cpus=0.5 --memory=512m nginx:latest

## 列出正在运行的容器及其资源使用情况
docker stats

镜像管理操作

## 列出本地镜像
docker images

## 删除特定镜像
docker rmi nginx:latest

## 删除未使用的镜像
docker image prune

## 拉取特定版本的镜像
docker pull ubuntu:20.04

容器网络管理

## 创建自定义网络
docker network create mynetwork

## 在特定网络中运行容器
docker run --network=mynetwork nginx:latest

高级 Docker 技术

多阶段构建

多阶段构建可优化 Dockerfile 的复杂性并减小最终镜像的大小。

## 构建阶段
FROM golang:1.17 AS builder
WORKDIR /app
COPY..
RUN go build -o myapp

## 生产阶段
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]

Docker Compose 工作流程

graph LR
    A[Docker Compose 文件] --> B[服务定义]
    B --> C[容器编排]
    C --> D[联网应用程序]

Compose 配置示例

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

性能优化技术

技术 描述
层缓存 尽量减少层的重新构建
.dockerignore 排除不必要的文件
Alpine 镜像 使用最小化的基础镜像

高级网络

## 创建自定义桥接网络
docker network create --driver bridge isolated_network

## 将容器连接到特定网络
docker run --network=isolated_network nginx:latest

卷管理策略

## 创建命名卷
docker volume create app-data

## 将卷挂载到容器
docker run -v app-data:/var/lib/data nginx:latest

容器监控

## 实时容器指标

## 检查容器日志

安全最佳实践

## 以非 root 用户身份运行容器
docker run --user 1000 nginx:latest

## 设置只读文件系统
docker run --read-only nginx:latest

总结

Docker 通过提供一个用于容器化的一致、高效的平台,彻底改变了软件部署方式。通过本教程,读者已经学习了诸如 Docker 镜像、容器和 Dockerfile 基础等基本概念,以及安装 Docker、管理容器和运行 Web 应用程序的实用技能。这些技能构成了现代软件开发和基础设施管理的关键基础。