CentOS Docker 安装与配置
CentOS 上 Docker 的详细安装与配置指南
Docker 已经成为现代软件开发和部署中不可或缺的工具。它提供了一种轻量级、可移植的方式来打包、分发和运行应用程序。本文将深入探讨在 CentOS 系统上安装、配置和使用 Docker 的各个方面,旨在提供一份全面的指南,帮助您在 CentOS 环境中充分利用 Docker 的强大功能。
一、Docker 简介与优势
在深入安装细节之前,让我们先简要回顾一下 Docker 的概念和它带来的主要优势。
1.1 什么是 Docker?
Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何支持 Docker 的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 App)。
1.2 Docker 的核心概念
- 镜像 (Image): Docker 镜像是一个只读的模板,包含了运行应用程序所需的所有内容:代码、运行时环境、库、环境变量和配置文件。
- 容器 (Container): Docker 容器是镜像的可运行实例。您可以启动、停止、删除和移动容器。每个容器都是隔离的,拥有自己的文件系统、网络和进程空间。
- 仓库 (Registry): Docker 仓库用于存储和分发 Docker 镜像。Docker Hub 是一个公共的仓库,您也可以创建私有仓库。
- Dockerfile: 一个文本文件,其中包含一系列用于构建 Docker 镜像的指令。
1.3 Docker 的优势
- 轻量级和高效: Docker 容器共享宿主机的内核,不需要额外的操作系统,因此比传统的虚拟机更轻量、更快速。
- 可移植性: Docker 容器可以在任何支持 Docker 的平台上运行,无需修改,实现了“一次构建,随处运行”。
- 隔离性: 每个 Docker 容器都是隔离的,互不干扰,确保了应用程序的稳定性和安全性。
- 版本控制: Docker 镜像可以进行版本控制,方便回滚和管理。
- 快速部署: Docker 容器的启动和停止非常快,可以大大缩短应用程序的部署时间。
- 可扩展性: Docker 可以轻松地进行水平扩展,以应对高负载和高可用性需求。
- DevOps 友好: Docker 与 DevOps 理念高度契合,促进了开发、测试和运维之间的协作。
二、CentOS 上 Docker 的安装
在 CentOS 上安装 Docker 有多种方法,我们将介绍两种最常用的方法:使用 Docker 官方仓库和使用便捷脚本。
2.1 系统要求
在开始安装之前,请确保您的 CentOS 系统满足以下要求:
- CentOS 7 或更高版本(建议使用 CentOS 7 或 CentOS 8)。
- 64 位系统架构。
- 内核版本 3.10 或更高。
- 建议至少 2GB 的内存。
- 稳定的网络连接。
- 建议以 root 用户或具有 sudo 权限的用户进行安装。
2.2 使用 Docker 官方仓库安装 (推荐)
这种方法通过添加 Docker 官方的 Yum 仓库来安装,可以确保您获得最新版本的 Docker,并且方便后续的更新。
-
卸载旧版本 (如果存在):
如果您之前安装过旧版本的 Docker,请先卸载它们:
bash
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine -
安装必要的软件包:
bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -
添加 Docker 官方仓库:
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装 Docker Engine:
bash
sudo yum install docker-ce docker-ce-cli containerd.io
如果出现错误,提示No package docker-ce available
,可能是yum
的缓存未更新,尝试使用sudo yum makecache
更新缓存 -
启动 Docker 服务:
bash
sudo systemctl start docker -
设置 Docker 开机自启:
bash
sudo systemctl enable docker -
验证安装:
运行以下命令来验证 Docker 是否已正确安装:
bash
sudo docker run hello-world如果一切正常,您将看到一条消息,表明 Docker 已成功安装并正在运行。
2.3 使用便捷脚本安装
Docker 提供了一个便捷的安装脚本,可以简化安装过程。但请注意,这种方法可能不适用于生产环境,因为它可能无法提供最新的稳定版本。
-
下载并运行安装脚本:
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh -
启动 Docker 服务:
bash
sudo systemctl start docker -
设置 Docker 开机自启:
bash
sudo systemctl enable docker -
验证安装:
bash
sudo docker run hello-world
三、Docker 的基本配置
安装完成后,您可能需要进行一些基本的配置,以优化 Docker 的使用体验。
3.1 配置 Docker 用户组
默认情况下,只有 root 用户才能运行 Docker 命令。为了避免每次都使用 sudo
,您可以将您的用户添加到 docker
用户组:
-
创建
docker
用户组 (如果不存在):bash
sudo groupadd docker -
将您的用户添加到
docker
用户组:```bash
sudo usermod -aG docker $USER # 将当前用户添加到 docker 组或者
sudo usermod -aG docker your_username # 将指定用户添加到 docker 组
``` -
重新登录或重启系统:
为了使更改生效,您需要重新登录或重启系统。
-
验证:
重新登录后,尝试运行
docker
命令,而无需使用sudo
。
3.2 配置 Docker 镜像加速器 (可选)
由于国内网络环境的特殊性,从 Docker Hub 下载镜像可能会很慢。您可以配置 Docker 镜像加速器来加速镜像的下载。
常用的 Docker 镜像加速器有:
- 阿里云镜像加速器
- DaoCloud 镜像加速器
- 网易云镜像加速器
- Docker 官方中国镜像加速器
以下以阿里云镜像加速器为例进行配置:
-
获取您的专属加速器地址:
登录阿里云容器镜像服务控制台,找到您的专属加速器地址。
-
修改 Docker 配置文件:
创建或编辑
/etc/docker/daemon.json
文件(如果文件不存在,则创建它):bash
sudo vi /etc/docker/daemon.json添加以下内容(将
<your_aliyun_mirror_address>
替换为您的阿里云镜像加速器地址):json
{
"registry-mirrors": ["<your_aliyun_mirror_address>"]
} -
重启 Docker 服务:
bash
sudo systemctl restart docker
3.3 配置 Docker 存储驱动 (可选)
Docker 支持多种存储驱动,用于管理镜像和容器的文件系统。默认情况下,CentOS 上的 Docker 通常使用 overlay2
存储驱动。
您可以通过以下命令查看当前的存储驱动:
bash
docker info | grep Storage
如果您需要更改存储驱动,可以编辑 /etc/docker/daemon.json
文件,添加 storage-driver
选项。例如,要使用 devicemapper
存储驱动:
json
{
"storage-driver": "devicemapper"
}
注意: 更改存储驱动可能会导致现有镜像和容器不可用,请谨慎操作。
3.4 配置 Docker 日志 (可选)
Docker 默认将容器的日志输出到标准输出 (stdout) 和标准错误 (stderr)。您可以通过配置 Docker 日志驱动来更改日志的存储位置和方式。
常用的日志驱动有:
json-file
(默认)syslog
journald
gelf
fluentd
awslogs
splunk
例如,要使用 syslog
日志驱动,可以编辑 /etc/docker/daemon.json
文件,添加 log-driver
选项:
json
{
"log-driver": "syslog"
}
您还可以配置日志驱动的选项,例如日志文件的大小和数量限制。
3.5 配置 Docker 网络 (可选)
Docker 默认使用桥接网络 (bridge network)。您可以通过创建自定义网络来满足更复杂的网络需求。
例如,创建一个名为 my-network
的自定义桥接网络:
bash
docker network create my-network
在运行容器时,可以使用 --network
选项指定容器连接到哪个网络:
bash
docker run -d --network my-network my-image
四、Docker 的常用命令
掌握 Docker 的常用命令是高效使用 Docker 的关键。以下是一些最常用的命令:
4.1 镜像管理
docker images
: 列出本地镜像。docker pull <image_name>:<tag>
: 从仓库拉取镜像。docker build -t <image_name>:<tag> .
: 从 Dockerfile 构建镜像。docker rmi <image_id>
或docker rmi <image_name>:<tag>
: 删除镜像。docker tag <source_image>:<tag> <target_image>:<tag>
: 为镜像打标签。docker push <image_name>:<tag>
: 将镜像推送到仓库。docker search <keyword>
: 在 Docker Hub 上搜索镜像。docker image inspect <image_id>
或docker image inspect <image_name:tag>
: 显示镜像的详细信息
4.2 容器管理
docker ps
: 列出正在运行的容器。docker ps -a
: 列出所有容器(包括已停止的容器)。docker run -d -p <host_port>:<container_port> --name <container_name> <image_name>:<tag>
: 运行一个容器。-d
: 后台运行。-p
: 端口映射。--name
: 容器名称。
docker start <container_id>
或docker start <container_name>
: 启动一个已停止的容器。docker stop <container_id>
或docker stop <container_name>
: 停止一个正在运行的容器。docker restart <container_id>
或docker restart <container_name>
: 重启一个容器。docker rm <container_id>
或docker rm <container_name>
: 删除一个容器。docker exec -it <container_id> <command>
: 在正在运行的容器中执行命令。-it
: 交互式终端。
docker logs <container_id>
或docker logs <container_name>
: 查看容器的日志。docker inspect <container_id>
或docker inspect <container_name>
: 查看容器的详细信息。docker cp <container_id>:<container_path> <host_path>
或docker cp <host_path> <container_id>:<container_path>
: 在容器和宿主机之间复制文件。docker commit <container_id> <new_image_name>:<tag>
将容器更改保存为新的镜像
4.3 网络管理
docker network ls
: 列出现有的网络docker network inspect <network_name>
: 查看指定网络的详细信息docker network rm <network_name>
:删除指定网络
4.4 其他常用命令
docker info
: 显示 Docker 系统信息。docker version
: 显示 Docker 版本信息。docker login
: 登录到 Docker 仓库。docker logout
: 登出 Docker 仓库。
五、Dockerfile 最佳实践
Dockerfile 是构建 Docker 镜像的蓝图。编写良好的 Dockerfile 可以提高镜像的构建效率、可维护性和安全性。
5.1 最佳实践
- 使用官方基础镜像: 尽量使用官方提供的基础镜像,例如
centos
、ubuntu
、alpine
等。 - 选择合适的基础镜像: 根据您的应用程序需求选择合适的基础镜像。例如,对于小型应用程序,可以选择
alpine
镜像以减小镜像大小。 - 使用
.dockerignore
文件: 创建.dockerignore
文件,排除不需要包含在镜像中的文件和目录,例如临时文件、构建产物等。 - 最小化镜像层数: 每个
RUN
、COPY
、ADD
指令都会创建一个新的镜像层。尽量将多个命令合并到一个RUN
指令中,以减少镜像层数。 - 使用多阶段构建: 多阶段构建可以将构建过程分为多个阶段,只保留最终所需的产物,从而减小最终镜像的大小。
- 避免安装不必要的软件包: 只安装应用程序运行所需的软件包,避免安装不必要的工具和依赖项。
- 使用非 root 用户: 为了安全起见,尽量避免在容器中以 root 用户运行应用程序。可以创建一个普通用户,并使用
USER
指令切换到该用户。 - 设置工作目录: 使用
WORKDIR
指令设置容器的工作目录,避免在根目录下执行命令。 - 使用环境变量: 使用
ENV
指令设置环境变量,使镜像更具可配置性。 - 明确指定端口: 使用
EXPOSE
指令明确指定容器暴露的端口。 - 使用标签: 使用
LABEL
指令为镜像添加元数据,例如作者、版本、描述等。 - 定期更新基础镜像: 定期更新基础镜像,以获取最新的安全补丁和功能更新。
- 使用构建缓存: docker build 默认会缓存每一层的构建结果。
- 指定版本号:对于需要安装的包,尽量指定版本号。
5.2 示例 Dockerfile
```dockerfile
使用官方 CentOS 基础镜像
FROM centos:7
设置维护者信息
LABEL maintainer="Your Name your.email@example.com"
设置工作目录
WORKDIR /app
安装必要的软件包
RUN yum update -y && \
yum install -y \
python3 \
python3-pip && \
yum clean all
复制应用程序代码
COPY . /app
安装 Python 依赖项
RUN pip3 install --no-cache-dir -r requirements.txt
设置环境变量
ENV PYTHONUNBUFFERED=1
暴露端口
EXPOSE 8000
创建普通用户
RUN useradd -m myuser
USER myuser
运行应用程序
CMD ["python3", "app.py"]
```
六、Docker Compose (可选)
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件来配置应用程序的服务、网络和卷。
6.1 安装 Docker Compose
-
下载 Docker Compose:
bash
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注意:这里的v2.23.0
是compose的版本号,应该选择合适的版本号替换。查看最新版本号,可以进入Docker Compose Release页面查看。 -
添加可执行权限:
bash
sudo chmod +x /usr/local/bin/docker-compose -
验证安装:
bash
docker-compose --version
6.2 使用 Docker Compose
-
创建
docker-compose.yml
文件:在您的项目目录中创建一个名为
docker-compose.yml
的文件。 -
定义服务:
在
docker-compose.yml
文件中定义您的应用程序的服务、网络和卷。```yaml
version: "3.9" # 指定 docker-compose.yml 文件的版本services:
web: # 服务名称
image: nginx:latest # 使用的镜像
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 卷挂载
depends_on:
- app # 依赖关系app:
build: . # 从当前目录的 Dockerfile 构建镜像
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydb # 环境变量db:
image: postgres:latest
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb```
-
运行应用程序:
在
docker-compose.yml
文件所在的目录中运行以下命令:bash
docker-compose up -d # -d 表示后台运行 -
停止应用程序:
bash
docker-compose down
其他常用命令包括docker-compose ps
,docker-compose logs
,docker-compose build
,docker-compose start
,docker-compose stop
等。
七、总结
本文详细介绍了在 CentOS 系统上安装、配置和使用 Docker 的各个方面,包括 Docker 的基本概念、安装方法、基本配置、常用命令、Dockerfile 最佳实践以及 Docker Compose 的使用。
希望这篇指南能够帮助您在 CentOS 环境中充分利用 Docker 的强大功能,提高您的开发和部署效率。Docker 是一个不断发展的技术,建议您持续关注 Docker 的最新动态和最佳实践。