【Debian】Docker 安装、配置与使用

Debian 上 Docker 的安装、配置与使用详解

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

本文将详细介绍在 Debian 系统上安装、配置和使用 Docker 的全过程,内容涵盖从基础安装到高级配置,旨在为读者提供一份全面的 Docker 使用指南。

一、Docker 的优势与应用场景

在深入安装和配置细节之前,我们先来了解一下 Docker 的主要优势和典型的应用场景,这将有助于你更好地理解为什么选择 Docker 以及如何在实际工作中应用它。

Docker 的优势:

  • 轻量级: Docker 容器共享主机操作系统内核,无需像虚拟机那样模拟整个操作系统,因此更加轻量级,启动速度更快,资源占用更少。
  • 一致性: Docker 容器包含了应用程序及其所有依赖项,确保了应用程序在不同环境(开发、测试、生产)中的一致性运行,避免了“在我机器上可以运行”的问题。
  • 可移植性: Docker 容器可以在任何支持 Docker 的平台上运行,无论是本地机器、云服务器还是其他数据中心,实现了应用程序的“一次构建,到处运行”。
  • 可扩展性: Docker 容器可以轻松地进行水平扩展,通过部署多个容器实例来应对高负载和高并发的场景。
  • 隔离性: Docker 容器之间相互隔离,一个容器的崩溃不会影响其他容器的运行,提高了应用程序的稳定性和安全性。
  • 版本控制: Docker 镜像支持版本控制,可以方便地回滚到之前的版本,简化了应用程序的部署和管理。
  • 快速部署: Docker 容器的启动和停止都非常快速,可以实现应用程序的快速部署和更新。

Docker 的应用场景:

  • Web 应用部署: Docker 可以轻松打包和部署各种 Web 应用程序,如 Node.js、Python、Java、Ruby 等。
  • 微服务架构: Docker 是构建微服务架构的理想选择,每个微服务可以打包成一个独立的容器,方便部署和管理。
  • 持续集成/持续部署 (CI/CD): Docker 可以与各种 CI/CD 工具集成,实现自动化构建、测试和部署。
  • 数据库部署: Docker 可以用于部署各种数据库,如 MySQL、PostgreSQL、MongoDB 等。
  • 开发环境搭建: Docker 可以快速搭建各种开发环境,避免了复杂的环境配置过程。
  • 测试环境隔离: Docker 可以为每个测试用例创建独立的容器,确保测试环境的隔离性和一致性。
  • 大数据处理: Docker 可以用于部署和管理大数据处理平台,如 Hadoop、Spark 等。

二、Debian 上 Docker 的安装

在 Debian 上安装 Docker 有多种方式,我们将介绍最常用的两种:使用 Docker 官方仓库安装和使用便捷脚本安装。

1. 使用 Docker 官方仓库安装 (推荐)

这是官方推荐的安装方式,可以确保安装最新版本的 Docker,并且方便后续的更新和维护。

步骤:

  1. 更新 apt 包索引:

    bash
    sudo apt update

  2. 安装必要的软件包,允许 apt 通过 HTTPS 使用仓库:

    bash
    sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

  3. 添加 Docker 的官方 GPG 密钥:

    bash
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  4. 设置稳定版仓库:

    bash
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  5. 再次更新 apt 包索引:

    bash
    sudo apt update

  6. 安装 Docker Engine、containerd 和 Docker Compose:

    bash
    sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    如果需要安装特定版本,可以先列出可用版本:
    bash
    apt-cache madison docker-ce

    然后指定版本安装,例如:
    bash
    sudo apt install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin

  7. 验证 Docker 是否安装成功:

    bash
    sudo docker run hello-world

    如果一切正常,你将看到一条消息,表明 Docker 已正确安装并正在运行。

2. 使用便捷脚本安装

Docker 官方提供了一个便捷脚本,可以快速安装 Docker。这种方式比较简单,但可能不适合生产环境。

步骤:

  1. 下载并运行安装脚本:

    bash
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh

  2. 验证 Docker 是否安装成功:

    bash
    sudo docker run hello-world

3. 非 root 用户使用 Docker(重要)

默认情况下,Docker 命令需要 root 权限才能运行。为了方便日常使用,建议将当前用户添加到 docker 用户组,这样就可以在不使用 sudo 的情况下运行 Docker 命令。

步骤:

  1. 创建 docker 用户组(如果不存在):

    bash
    sudo groupadd docker

  2. 将当前用户添加到 docker 用户组:

    bash
    sudo usermod -aG docker $USER

  3. 重新登录或注销并重新登录,使更改生效。 或者,你也可以运行以下命令来激活更改,而无需重新登录:

    bash
    newgrp docker

  4. 验证是否可以在不使用 sudo 的情况下运行 Docker 命令:

    bash
    docker run hello-world

三、Docker 的基本使用

安装完成后,我们来学习 Docker 的一些基本使用方法,包括镜像管理、容器管理、网络配置等。

1. 镜像管理

Docker 镜像是用于创建 Docker 容器的模板,包含了应用程序及其所有依赖项。

  • 搜索镜像:

    bash
    docker search <image_name> # 例如:docker search ubuntu

  • 拉取镜像:

    bash
    docker pull <image_name>:<tag> # 例如:docker pull ubuntu:20.04

    如果不指定 tag,默认会拉取 latest 标签的镜像。

  • 列出本地镜像:

    bash
    docker images

  • 删除镜像:

    bash
    docker rmi <image_id> # 或 docker rmi <image_name>:<tag>

    可以使用docker images 查到的 IMAGE ID 或 REPOSITORY:TAG 来指定

  • 构建镜像 (Dockerfile):

    Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。

    示例 Dockerfile (Dockerfile):

    ```dockerfile

    使用官方 Ubuntu 20.04 镜像作为基础镜像

    FROM ubuntu:20.04

    安装 Nginx

    RUN apt update && apt install -y nginx

    复制配置文件

    COPY nginx.conf /etc/nginx/nginx.conf

    暴露 80 端口

    EXPOSE 80

    启动 Nginx

    CMD ["nginx", "-g", "daemon off;"]
    ```

    构建镜像:

    bash
    docker build -t my-nginx:1.0 . # 在 Dockerfile 所在目录下执行

    -t 参数用于指定镜像的名称和标签。

2. 容器管理

Docker 容器是 Docker 镜像的运行实例。

  • 创建并启动容器:

    bash
    docker run -d -p 8080:80 --name my-container <image_name>:<tag>

    • -d: 后台运行容器。
    • -p 8080:80: 将主机的 8080 端口映射到容器的 80 端口。
    • --name my-container: 为容器指定一个名称。
    • <image_name>:<tag>:指定要使用的镜像和标签。
  • 查看正在运行的容器:

    bash
    docker ps

  • 查看所有容器(包括已停止的):

    bash
    docker ps -a

  • 停止容器:

    bash
    docker stop <container_id> # 或 docker stop <container_name>

  • 启动已停止的容器:

    bash
    docker start <container_id> # 或 docker start <container_name>

  • 重启容器:

    bash
    docker restart <container_id> # 或 docker restart <container_name>

  • 进入容器:

    bash
    docker exec -it <container_id> bash # 或 docker exec -it <container_name> bash

    -it 参数表示以交互模式进入容器的 bash shell。

  • 删除容器:

    bash
    docker rm <container_id> # 或 docker rm <container_name>

    要删除正在运行的容器,需要先停止容器,或者使用-f参数强制删除

    bash
    docker rm -f <container_id>

  • 查看容器日志:

    bash
    docker logs <container_id> # 或 docker logs <container_name>

    添加-f参数可以实时查看日志

3. 数据卷 (Volumes)

Docker 数据卷用于持久化容器数据,避免容器删除后数据丢失。

  • 创建数据卷:

    bash
    docker volume create my-volume

  • 将数据卷挂载到容器:

    bash
    docker run -d -v my-volume:/data --name my-container <image_name>:<tag>

    -v my-volume:/data 将名为 my-volume 的数据卷挂载到容器的 /data 目录。

  • 查看数据卷列表
    bash
    docker volume ls

  • 查看数据卷详情
    bash
    docker volume inspect my-volume
  • 删除数据卷
    bash
    docker volume rm my-volume

4. Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件 (docker-compose.yml) 来配置应用程序的服务、网络和卷。

示例 docker-compose.yml:

yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:

常用命令:

  • 启动应用:

    bash
    docker-compose up -d # 在 docker-compose.yml 所在目录下执行

  • 停止应用:

    bash
    docker-compose down

  • 查看应用状态:

    bash
    docker-compose ps

  • 构建服务
    bash
    docker-compose build

  • 查看服务日志
    bash
    docker-compose logs web #查看web服务的日志

四、Docker 的高级配置

1. 配置 Docker 守护进程

Docker 守护进程的配置文件通常位于 /etc/docker/daemon.json。你可以在此文件中配置各种选项,如镜像加速器、存储驱动、日志驱动等。

示例 daemon.json:

json
{
"registry-mirrors": ["https://<your-mirror-address>"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}

  • registry-mirrors: 配置镜像加速器,可以加快镜像拉取速度。
  • log-driver: 配置日志驱动,默认为 json-file
  • log-opts: 配置日志选项,如最大文件大小和最大文件数量。

修改配置文件后,需要重启 Docker 守护进程才能生效:

bash
sudo systemctl restart docker

2. 配置 Docker 网络

Docker 提供了多种网络模式,可以根据应用程序的需求进行选择。

  • bridge (默认): 容器连接到 Docker 创建的虚拟网桥,可以与主机和其他容器通信。
  • host: 容器与主机共享网络命名空间,容器直接使用主机的网络接口。
  • none: 容器没有网络连接。
  • container: 容器与另一个容器共享网络命名空间。
  • 自定义网络: 可以创建自定义网络,实现更灵活的网络配置。

创建自定义网络:

bash
docker network create my-network

将容器连接到自定义网络:

bash
docker run -d --network my-network --name my-container <image_name>:<tag>

3. 使用 Docker Swarm (集群)

Docker Swarm 是 Docker 官方提供的容器编排工具,可以将多个 Docker 主机组成一个集群,实现容器的跨主机部署和管理。

初始化 Swarm 集群:

bash
docker swarm init --advertise-addr <your-ip-address>

加入 Swarm 集群:

在其他主机上执行 docker swarm init 后输出的 docker swarm join 命令。

部署服务:

bash
docker service create --replicas 3 --name my-service -p 8080:80 <image_name>:<tag>

--replicas 参数指定服务的副本数。

五、总结

本文详细介绍了在 Debian 系统上安装、配置和使用 Docker 的全过程,涵盖了基础安装、镜像管理、容器管理、数据卷、Docker Compose、高级配置以及 Docker Swarm 等方面。希望这篇文章能够帮助你全面了解 Docker,并在实际工作中熟练运用 Docker 技术。

Docker 是一个强大而灵活的工具,可以极大地简化应用程序的开发、部署和管理。随着云计算和微服务架构的普及,Docker 的应用越来越广泛。掌握 Docker 技术将为你的职业发展带来更多机会。 建议读者在阅读本文的基础上,多进行实践操作,深入理解 Docker 的原理和机制,不断探索 Docker 的更多高级功能。

THE END