CentOS 7 Docker环境搭建实战教程
CentOS 7 Docker 环境搭建实战教程
Docker 作为一种轻量级的虚拟化技术,近年来在软件开发、测试和部署领域获得了广泛的应用。它通过容器化技术,将应用程序及其依赖项打包到一个可移植的容器中,从而实现了应用程序在不同环境中的一致性运行。CentOS 7 作为一款稳定、可靠的 Linux 发行版,是运行 Docker 的理想选择。本文将详细介绍在 CentOS 7 上搭建 Docker 环境的步骤,并提供一些实用的技巧和注意事项,帮助你快速上手 Docker。
一、 准备工作
在开始安装 Docker 之前,我们需要确保 CentOS 7 系统满足以下要求:
-
内核版本: Docker 要求 CentOS 7 的内核版本为 3.10 或更高。你可以通过以下命令查看当前内核版本:
bash
uname -r如果内核版本低于 3.10,你需要先升级内核。
-
系统更新: 建议将 CentOS 7 系统更新到最新状态,以获取最新的软件包和安全补丁。可以使用以下命令更新系统:
bash
sudo yum update -y -
禁用 SELinux (可选): SELinux (Security-Enhanced Linux) 是 CentOS 7 的一个安全模块,可能会对 Docker 的运行产生影响。如果你不熟悉 SELinux 的配置,建议暂时禁用它。可以通过编辑
/etc/selinux/config
文件,将SELINUX
的值设置为disabled
,然后重启系统。```bash
sudo vi /etc/selinux/config将 SELINUX=enforcing 改为 SELINUX=disabled
sudo reboot
```注意:禁用SELinux会降低系统安全性,建议在熟悉SELinux配置后再启用。
-
安装必要的软件包:
安装yum-utils
、device-mapper-persistent-data
和lvm2
。yum-utils
提供了yum-config-manager
实用程序,device-mapper-persistent-data
和lvm2
是 devicemapper 存储驱动程序所需要的。bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
二、 安装 Docker
CentOS 7 上安装 Docker 有多种方式,我们将介绍两种常用的方法:
1. 使用 Docker 官方仓库安装(推荐)
这是官方推荐的安装方式,可以确保你安装的是最新版本的 Docker。
-
添加 Docker 仓库: 首先,我们需要添加 Docker 的官方 Yum 仓库。
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装 Docker Engine: 添加仓库后,就可以安装 Docker Engine 了。
bash
sudo yum install -y docker-ce docker-ce-cli containerd.io -
启动 Docker 服务: 安装完成后,启动 Docker 服务并设置为开机自启。
bash
sudo systemctl start docker
sudo systemctl enable docker -
验证安装: 运行一个简单的 Docker 容器来验证安装是否成功。
bash
sudo docker run hello-world如果一切正常,你将看到类似以下的输出:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
2. 使用 CentOS 官方仓库安装 (较旧版本)
CentOS 7 的官方仓库也提供了 Docker 软件包,但版本可能不是最新的。
-
安装 Docker: 直接使用 Yum 安装 Docker。
bash
sudo yum install -y docker -
启动 Docker 服务: 安装完成后,启动 Docker 服务并设置为开机自启。
bash
sudo systemctl start docker
sudo systemctl enable docker -
验证安装: 同样,运行一个简单的 Docker 容器来验证安装。
bash
sudo docker run hello-world
注意:使用CentOS官方仓库安装,你可能会遇到一些问题,比如版本过旧,缺少某些新特性。因此,强烈建议使用Docker官方仓库安装。
三、 Docker 常用命令
安装完成后,我们来学习一些 Docker 的常用命令,以便更好地管理容器。
-
docker run
: 运行一个新的容器。
bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例如:docker run -d -p 8080:80 nginx
(以后台模式运行一个 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口) -
docker ps
: 列出正在运行的容器。
bash
docker ps [OPTIONS]
例如:docker ps -a
(列出所有容器,包括已停止的) -
docker stop
: 停止一个正在运行的容器。
bash
docker stop CONTAINER_ID -
docker start
: 启动一个已停止的容器。
bash
docker start CONTAINER_ID -
docker rm
: 删除一个容器。
bash
docker rm CONTAINER_ID
例如:docker rm -f CONTAINER_ID
(强制删除一个正在运行的容器) -
docker rmi
: 删除一个镜像。
bash
docker rmi IMAGE_ID -
docker images
: 列出本地镜像。 -
docker pull
: 从 Docker Hub 或私有仓库拉取镜像。
bash
docker pull IMAGE_NAME[:TAG]
例如:docker pull ubuntu:latest
(拉取最新版本的 Ubuntu 镜像) -
docker build
: 从 Dockerfile 构建镜像。 -
docker exec
: 在运行的容器中执行命令。
bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
例如:docker exec -it CONTAINER_ID bash
(进入容器的交互式 shell) -
docker logs
: 查看容器的日志。
bash
docker logs [OPTIONS] CONTAINER
例如:docker logs -f CONTAINER_ID
(实时跟踪容器日志) -
docker inspect
: 获取容器或镜像的详细信息。 -
docker network
: 管理 Docker 网络。 -
docker volume
: 管理 Docker 数据卷。
这只是 Docker 命令的一小部分,Docker 提供了非常丰富的命令和选项,你可以通过 docker --help
或 docker <command> --help
查看更详细的帮助信息。
四、 Docker 镜像加速
由于国内网络环境的原因,从 Docker Hub 拉取镜像可能会比较慢。为了提高镜像拉取速度,我们可以配置 Docker 镜像加速器。国内有很多云服务商提供了免费的 Docker 镜像加速服务,例如阿里云、腾讯云、DaoCloud 等。
这里以阿里云的镜像加速器为例,介绍配置方法:
-
获取加速器地址: 登录阿里云容器镜像服务控制台(https://cr.console.aliyun.com/),找到“镜像加速器”页面,获取你的专属加速器地址。
-
配置 Docker Daemon: 修改 Docker Daemon 的配置文件
/etc/docker/daemon.json
(如果文件不存在,则创建它),添加以下内容:json
{
"registry-mirrors": ["你的阿里云加速器地址"]
}
将你的阿里云加速器地址
替换为你实际获取到的地址。 -
重启 Docker 服务:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
配置完成后,Docker 将会优先从镜像加速器拉取镜像,从而提高下载速度。
五、 Docker Compose 安装与使用(可选)
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件,你可以配置应用程序的服务、网络和数据卷,然后使用一个简单的命令启动和管理整个应用程序。
1. 安装 Docker Compose
```bash
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装
docker-compose --version
```
注意:
1. 如果curl
命令下载缓慢,可以尝试其他下载方式。
2. 请替换v2.24.6
为你想要安装的具体版本号。你可以在Docker Compose Releases 页面查找最新版本。
2. 使用 Docker Compose
-
创建
docker-compose.yml
文件: 在你的项目目录下创建一个名为docker-compose.yml
的文件,并在其中定义你的应用程序服务。yaml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
这个示例定义了两个服务:web
(使用 Nginx 镜像) 和db
(使用 PostgreSQL 镜像)。web
服务将容器的 80 端口映射到主机的 8080 端口,db
服务设置了一个环境变量。 -
启动应用程序: 在
docker-compose.yml
文件所在的目录下,运行以下命令启动应用程序:bash
docker-compose up -d-d
参数表示以后台模式运行。 -
停止应用程序:
bash
docker-compose down
Docker Compose 还有很多其他命令和选项,可以帮助你更方便地管理多容器应用程序。
六、 Docker 安全加固
Docker 的安全性非常重要,以下是一些建议的安全加固措施:
-
保持 Docker 更新: 定期更新 Docker 到最新版本,以获取最新的安全补丁。
-
使用非 root 用户运行 Docker: 默认情况下,Docker Daemon 以 root 用户权限运行。为了降低安全风险,可以创建一个普通用户,并将其添加到
docker
用户组,然后使用该用户运行 Docker 命令。bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker #或者退出当前会话重新登录
执行此操作后,注销并重新登录以使更改生效。 -
限制容器的资源使用: 通过 Docker 的资源限制功能,可以限制容器的 CPU、内存等资源使用,防止容器过度消耗系统资源。
-
使用安全的镜像: 尽量使用官方镜像或经过验证的镜像,避免使用来源不明的镜像。
-
配置 Docker Daemon 的安全选项: 可以通过修改 Docker Daemon 的配置文件
/etc/docker/daemon.json
,配置一些安全选项,例如启用 TLS 加密、限制网络访问等。 -
使用 Docker 安全扫描工具: 可以使用一些 Docker 安全扫描工具,例如 Clair、Anchore 等,扫描镜像中的漏洞。
-
最小化容器内的权限: 尽量以普通用户身份在容器内运行应用程序,避免使用 root 用户。
-
不共享宿主机敏感目录: 避免将宿主机的敏感目录(如
/etc
、/root
)挂载到容器中。
七、 进阶技巧
- Dockerfile 最佳实践:
- 使用多阶段构建,减小镜像体积。
- 选择合适的基础镜像。
- 利用缓存机制,加快构建速度。
- 避免在镜像中包含敏感信息。
- 使用
.dockerignore
文件排除不必要的文件。 - 为镜像打上合适的标签。
-
使用私有仓库: 如果你需要存储和管理自己的私有镜像,可以搭建一个私有 Docker Registry,例如使用 Docker 官方提供的 Registry 镜像,或者使用 Harbor 等开源项目。
-
Docker 与 CI/CD 集成: 将 Docker 集成到你的持续集成/持续交付 (CI/CD) 流程中,可以实现自动化构建、测试和部署。
-
容器编排工具: 对于复杂的应用程序,可以使用容器编排工具,例如 Kubernetes、Docker Swarm 等,来管理和调度多个容器。
Docker环境搭建后的思考
通过以上步骤,我们已经在 CentOS 7 上成功搭建了 Docker 环境,并了解了一些常用的 Docker 命令、镜像加速、Docker Compose 以及安全加固等方面的知识。Docker 的强大功能和灵活性为我们带来了很多便利,但同时也需要我们不断学习和探索。
Docker 的生态系统非常庞大,除了本文介绍的内容外,还有很多其他的工具和技术值得我们去学习,例如 Docker 网络、数据卷、日志管理、监控等等。希望本文能够帮助你入门 Docker,并在实践中不断提升你的 Docker 技能。 Docker的学习永无止境,希望大家都能在容器化的道路上不断探索,享受技术带来的乐趣!