如何在 Linux 上创建 Docker 容器

DockerBeginner
立即练习

简介

本全面的 Docker 教程为开发者和系统管理员提供了一份实用指南,帮助他们理解和实施容器化技术。通过探索 Docker 的核心概念、安装过程和基本命令,学习者将获得创建轻量级、可移植应用程序环境的关键技能。

Docker 基础

容器化技术简介

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

Docker 的核心概念

什么是 Docker?

Docker 是一个用于容器化技术的开源平台,它允许开发者自动化应用程序的部署、扩展和管理。与传统虚拟机不同,Docker 容器共享主机系统的内核,这使得它们轻量级且高效。

graph TD A[应用程序代码] --> B[Docker 容器] B --> C[一致的部署] B --> D[隔离的环境]

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

## 设置稳定仓库
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 --version

## 拉取镜像
docker pull ubuntu:latest

## 列出镜像
docker images

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

Docker 容器化的用例

Docker 广泛应用于:

  • 微服务架构
  • 持续集成/持续部署(CI/CD)
  • 云原生应用开发
  • 一致的开发和生产环境

构建 Docker 镜像

理解 Docker 镜像

Docker 镜像是只读模板,其中包含运行应用程序所需的一切:代码、运行时环境、库、环境变量和配置文件。它们充当创建容器的蓝图。

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

Dockerfile 基础

Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。每条指令都会在镜像中创建一个新层。

Dockerfile 指令类型

指令 用途 示例
FROM 设置基础镜像 FROM ubuntu:22.04
RUN 执行命令 RUN apt-get update
COPY 复制文件 COPY app.py /app/
WORKDIR 设置工作目录 WORKDIR /app
CMD 默认命令 CMD ["python", "app.py"]

创建一个示例 Python 应用镜像

示例项目结构

/project
├── Dockerfile
└── app.py

app.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

## 使用官方 Python 运行时作为基础镜像
FROM python:3.9-slim

## 设置工作目录
WORKDIR /app

## 复制项目文件
COPY app.py requirements.txt./

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

## 暴露端口
EXPOSE 5000

## 定义默认命令
CMD ["python", "app.py"]

构建和管理 Docker 镜像

## 创建 requirements.txt
echo "flask" > requirements.txt

## 构建 Docker 镜像
docker build -t my-flask-app.

## 列出镜像
docker images

## 从镜像运行容器
docker run -p 5000:5000 my-flask-app

镜像优化策略

  • 使用多阶段构建
  • 最小化层数
  • 利用构建缓存
  • 使用特定的镜像标签
  • 删除不必要的文件

容器管理

容器生命周期概述

Docker 容器具有从创建到终止的复杂生命周期,包含多个状态。了解这些状态对于有效管理和编排容器至关重要。

stateDiagram-v2 [*] --> Created Created --> Running Running --> Paused Paused --> Running Running --> Stopped Stopped --> Removed Removed --> [*]

重要的 Docker 容器命令

命令 功能 示例
docker create 创建容器 docker create nginx
docker start 启动容器 docker start container_id
docker stop 停止运行中的容器 docker stop container_id
docker restart 重启容器 docker restart container_id
docker rm 删除容器 docker rm container_id

容器检查与监控

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

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

## 检查容器详细信息
docker inspect container_id

## 查看容器日志
docker logs container_id

## 监控容器资源使用情况
docker stats

容器资源管理

## 运行具有 CPU 和内存限制的容器
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --name limited-container \
  nginx

高级容器网络

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

## 在特定网络中运行容器
docker run -d \
  --network=mynetwork \
  --name web-container \
  nginx

容器扩展策略

## 扩展多个容器实例
docker-compose up -d --scale web=3

持久数据管理

## 创建卷
docker volume create myvolume

## 将卷挂载到容器
docker run -v myvolume:/app/data \
  --name data-container \
  ubuntu

最佳实践

  • 使用轻量级基础镜像
  • 实施健康检查
  • 最小化容器大小
  • 使用多阶段构建
  • 实施适当的日志记录
  • 确保容器配置安全

总结

Docker 代表了一种革命性的软件部署方法,为开发者提供了一个强大的平台,用于创建一致、隔离且可扩展的应用容器。通过掌握 Docker 的基本技术,专业人员可以简化开发工作流程、提高系统效率,并在各种计算基础设施中简化复杂的应用管理。