【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,并且方便后续的更新和维护。
步骤:
-
更新 apt 包索引:
bash
sudo apt update -
安装必要的软件包,允许 apt 通过 HTTPS 使用仓库:
bash
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -
添加 Docker 的官方 GPG 密钥:
bash
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
设置稳定版仓库:
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 -
再次更新 apt 包索引:
bash
sudo apt update -
安装 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 -
验证 Docker 是否安装成功:
bash
sudo docker run hello-world如果一切正常,你将看到一条消息,表明 Docker 已正确安装并正在运行。
2. 使用便捷脚本安装
Docker 官方提供了一个便捷脚本,可以快速安装 Docker。这种方式比较简单,但可能不适合生产环境。
步骤:
-
下载并运行安装脚本:
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh -
验证 Docker 是否安装成功:
bash
sudo docker run hello-world
3. 非 root 用户使用 Docker(重要)
默认情况下,Docker 命令需要 root 权限才能运行。为了方便日常使用,建议将当前用户添加到 docker
用户组,这样就可以在不使用 sudo
的情况下运行 Docker 命令。
步骤:
-
创建
docker
用户组(如果不存在):bash
sudo groupadd docker -
将当前用户添加到
docker
用户组:bash
sudo usermod -aG docker $USER -
重新登录或注销并重新登录,使更改生效。 或者,你也可以运行以下命令来激活更改,而无需重新登录:
bash
newgrp docker -
验证是否可以在不使用
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 的更多高级功能。