如何在 Linux 中创建 Docker 容器

DockerDockerBeginner
立即练习

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

简介

Docker 是一个强大的容器化平台,它彻底改变了开发者和 IT 专业人员管理和部署应用程序的方式。在本教程中,我们将指导你完成在 Linux 系统上创建 Docker 容器的过程,从安装和配置 Docker 到构建和运行你自己的自定义容器。

理解 Docker 容器

Docker 是一个广受欢迎的开源平台,它使开发者能够在容器化环境中构建、部署和运行应用程序。容器是轻量级、独立且可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

什么是 Docker 容器?

Docker 容器是一种标准化的软件单元,它将代码及其所有依赖项打包在一起,这样应用程序就能在不同的计算环境中快速且可靠地运行。容器由 Docker 镜像创建而来,而 Docker 镜像是创建容器的蓝图。Docker 容器相互隔离,并且与主机操作系统隔离,从而提供一个一致且可预测的运行时环境。

Docker 容器的优点

  • 可移植性:无论底层基础设施或操作系统如何,安装了 Docker 的任何机器上都可以运行 Docker 容器。
  • 一致性:Docker 容器确保应用程序在任何环境下都以相同的方式运行。
  • 高效性:Docker 容器是轻量级的,并且由于它们共享主机操作系统的内核,因此比虚拟机使用的资源更少。
  • 可扩展性:Docker 容器可以轻松地进行扩展或缩减,从而更易于管理和部署应用程序。
  • 隔离性:Docker 容器相互隔离,并且与主机操作系统隔离,从而提高了安全性和稳定性。

Docker 容器架构

graph TD A[Docker 主机] --> B[Docker 引擎] B --> C[Docker 镜像] B --> D[Docker 容器] D --> E[应用程序] D --> F[库] D --> G[系统工具]

Docker 容器生命周期

  1. 构建:从 Dockerfile 创建一个 Docker 镜像。
  2. 分发:将 Docker 镜像存储在一个镜像仓库中,例如 Docker Hub。
  3. 运行:从该镜像创建并运行一个 Docker 容器。

Docker 容器的用例

  • 微服务:Docker 容器非常适合构建和部署基于微服务的应用程序。
  • 持续集成与部署:Docker 容器可用于自动化应用程序的构建、测试和部署。
  • 云托管:Docker 容器可以轻松地在云平台(如 AWS、Azure 和 Google Cloud)上进行部署和扩展。
  • 机器学习和数据科学:Docker 容器可用于打包和部署机器学习模型以及数据处理管道。

在 Linux 上安装和配置 Docker

在 Ubuntu 22.04 上安装 Docker

  1. 更新软件包索引:
sudo apt-get update
  1. 安装必要的软件包,以便 apt 可以通过 HTTPS 使用软件仓库:
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 添加官方 Docker GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 设置 Docker 软件仓库:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker 引擎、containerd 和 Docker Compose:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

配置 Docker

  1. 验证 Docker 安装:
sudo docker run hello-world
  1. 将你的用户添加到 Docker 组,以便无需使用 sudo 即可运行 Docker 命令:
sudo usermod -aG docker $USER
  1. 配置 Docker 在系统启动时自动启动:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
  1. (可选)配置 Docker 使用不同的存储驱动:
sudo vi /etc/docker/daemon.json

添加以下配置并保存文件:

{
  "storage-driver": "overlay2"
}
  1. 重启 Docker 服务:
sudo systemctl restart docker

Docker Compose 安装

  1. 下载最新版本的 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 使二进制文件可执行:
sudo chmod +x /usr/local/bin/docker-compose
  1. 验证 Docker Compose 安装:
docker-compose --version

构建和运行 Docker 容器

构建 Docker 镜像

  1. 为你的项目创建一个新目录:
mkdir my-docker-project
cd my-docker-project
  1. 在项目目录中创建一个 Dockerfile
touch Dockerfile
  1. 打开 Dockerfile 并添加以下内容:
## 使用官方 Ubuntu 22.04 镜像作为基础
FROM ubuntu:22.04

## 更新软件包索引并安装必要的软件包
RUN apt-get update && apt-get install -y \
    nginx \
    curl \
    && rm -rf /var/lib/apt/lists/*

## 复制默认的 Nginx 配置文件
COPY default.conf /etc/nginx/conf.d/

## 为 Nginx 暴露端口 80
EXPOSE 80

## 容器启动时启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
  1. 创建一个默认的 Nginx 配置文件 default.conf
server {
    listen 80;
    server_name example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
  1. 构建 Docker 镜像:
docker build -t my-nginx-app.

运行 Docker 容器

  1. 运行 Docker 容器:
docker run -d --name my-nginx-app -p 80:80 my-nginx-app
  1. 验证容器是否正在运行:
docker ps
  1. 访问容器中运行的 Nginx 网络服务器:
curl http://localhost

管理 Docker 容器

  1. 停止正在运行的容器:
docker stop my-nginx-app
  1. 启动已停止的容器:
docker start my-nginx-app
  1. 删除容器:
docker rm my-nginx-app
  1. 删除 Docker 镜像:
docker rmi my-nginx-app

Docker Compose

  1. 创建一个 docker-compose.yml 文件:
version: '3'
services:
  web:
    build:.
    ports:
     - "80:80"
  1. 构建并运行 Docker Compose 应用程序:
docker-compose up -d
  1. 停止并删除 Docker Compose 应用程序:
docker-compose down

总结

在本教程结束时,你将对 Docker 及其功能有扎实的理解,同时掌握在 Linux 系统上创建、管理和运行 Docker 容器的实践技能。这些知识将使你能够简化应用程序部署、提高可扩展性并优化整个 DevOps 工作流程。