Linux 移植 Docker 详解
一、移植前的环境准备
在将 Docker 移植到 Linux 系统之前,需要确保系统满足一定的条件,以保证 Docker 能够稳定运行。
1. 操作系统版本要求
Docker 对 Linux 操作系统版本有一定的要求,不同的 Docker 版本适配不同的 Linux 发行版及版本。常见的 Linux 发行版如 Ubuntu、Debian、CentOS、RHEL 等都支持 Docker 安装。例如,Ubuntu 16.04 及以上版本、CentOS 7 及以上版本能够较好地兼容 Docker。在安装之前,通过命令查看系统版本信息。
- 在 Ubuntu 和 Debian 系统中,使用命令lsb_release -a,会显示类似如下信息:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
- 在 CentOS 和 RHEL 系统中,使用命令cat /etc/redhat-release,显示内容如CentOS Linux release 8.5.2111。
2. 内核版本要求
Docker 依赖于 Linux 内核的一些特性,如命名空间(Namespaces)、控制组(Control Groups,cgroups)等,因此需要确保 Linux 内核版本在 3.10 及以上。通过命令uname -r查看内核版本,若版本过低,可能需要升级内核。升级内核是一个复杂的操作,在 CentOS 系统中,可以通过 ELRepo 仓库来升级内核,步骤如下:
- 安装 ELRepo 仓库的 GPG 密钥:rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- 安装 ELRepo 仓库:yum install https://www.elrepo.org/elrepo-release-$(rpm -E %rhel).rpm
- 安装最新的内核包:yum --enablerepo=elrepo-kernel install kernel-ml
- 设置新内核为默认启动项,重启系统使新内核生效。
3. 关闭防火墙和 SELinux(测试环境)
在测试环境中,为了避免防火墙和 SELinux 对 Docker 网络及容器运行产生干扰,可以先将它们关闭。
- 关闭防火墙:
- 在 CentOS 和 RHEL 系统中,使用命令systemctl stop firewalld停止防火墙,systemctl disable firewalld禁止防火墙开机自启。
- 在 Ubuntu 和 Debian 系统中,使用命令ufw disable关闭防火墙。
- 关闭 SELinux:编辑/etc/selinux/config文件,将SELINUX的值改为disabled,然后重启系统。在生产环境中,不建议直接关闭,可以通过配置规则来允许 Docker 相关操作。
二、Docker 的安装
1. Ubuntu 和 Debian 系统安装 Docker
- 更新系统软件包索引:sudo apt update
- 安装必要的依赖包,用于通过 HTTPS 来获取软件包:sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 官方 GPG 密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
- 添加 Docker 软件源:sudo add-apt-repository "deb [arch=amd64] Index of linux/ubuntu/ $(lsb_release -cs) stable"
- 更新软件包索引:sudo apt update
- 安装 Docker:sudo apt install docker-ce docker-ce-cli containerd.io
2. CentOS 和 RHEL 系统安装 Docker
- 安装所需的软件包:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置 Docker 软件源:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker:sudo yum install docker-ce docker-ce-cli containerd.io
3. 验证安装
安装完成后,通过命令docker version查看 Docker 版本信息,若成功显示客户端和服务端的版本信息,则说明 Docker 安装成功。也可以运行一个简单的测试容器,如docker run hello-world,该命令会从 Docker Hub 下载一个测试镜像并运行,输出一些提示信息,表明 Docker 能够正常工作。
三、Docker 的基本配置与优化
1. 配置 Docker 镜像源
默认情况下,Docker 从官方镜像仓库拉取镜像,由于网络原因,拉取速度可能较慢。可以配置国内的镜像源,如阿里云镜像源。
- 编辑 Docker 配置文件,在 Ubuntu 和 Debian 系统中,配置文件为/etc/docker/daemon.json,在 CentOS 和 RHEL 系统中,若文件不存在则需要创建:
{
"registry-mirrors": ["https://<你的阿里云镜像地址>.mirror.aliyuncs.com"]
}
将<你的阿里云镜像地址>替换为在阿里云控制台获取的专属镜像地址。
- 重启 Docker 服务使配置生效:sudo systemctl restart docker
2. 设置 Docker 开机自启
为了在系统启动时自动启动 Docker 服务,执行命令sudo systemctl enable docker。这样,每次系统重启后,Docker 都会自动运行。
3. 调整 Docker 存储驱动
Docker 支持多种存储驱动,如 AUFS、Overlay2 等。不同的存储驱动在性能和功能上有所差异。在大多数现代 Linux 系统中,推荐使用 Overlay2 存储驱动。可以通过查看/etc/docker/daemon.json文件中的storage-driver字段来确认当前使用的存储驱动。如果需要更改存储驱动,在daemon.json文件中添加或修改storage-driver字段,例如:
{
"storage-driver": "overlay2"
}
修改后,重启 Docker 服务。
4. 限制 Docker 资源使用
可以通过 cgroups 对 Docker 容器使用的 CPU、内存等资源进行限制。例如,限制容器使用的内存为 1GB,在运行容器时使用-m或--memory参数:docker run -m 1g ubuntu:latest。限制容器使用的 CPU 核心数,可以使用--cpus参数,如docker run --cpus="0.5" ubuntu:latest表示容器最多使用半个 CPU 核心。
四、Docker 的高级应用与管理
1. Docker 容器网络配置
Docker 默认提供了多种网络模式,如 bridge、host、none 等。可以通过docker network命令管理网络。例如,创建一个自定义的 bridge 网络:docker network create my-bridge-network。在运行容器时,可以使用--network参数指定容器使用的网络,如docker run --network my-bridge-network -it ubuntu:latest。还可以通过配置端口映射,实现容器与宿主机之间的通信,如docker run -p 8080:80 ubuntu:latest将容器的 80 端口映射到宿主机的 8080 端口。
2. Docker 镜像管理
可以使用docker pull命令从镜像仓库拉取镜像,docker push命令将本地镜像推送到镜像仓库。为了节省磁盘空间,可以使用docker image prune命令删除未使用的镜像。还可以通过docker image tag命令为镜像打标签,方便管理和推送。
3. Docker Compose 的使用
Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。通过编写docker-compose.yml文件,可以一次性启动、停止多个相互关联的容器。例如,一个简单的 Web 应用,包含一个 Web 服务器容器和一个数据库容器,可以在docker-compose.yml文件中定义它们的服务配置:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- db
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: mypassword
然后在包含docker-compose.yml文件的目录下,使用命令docker-compose up -d启动服务。
通过以上步骤,我们完成了 Linux 系统上 Docker 的移植、配置和基本管理。在实际应用中,还可以根据具体需求进一步探索 Docker 的高级功能和应用场景,如容器编排工具 Kubernetes 与 Docker 的结合使用等。
上述内容涵盖了 Linux 移植 Docker 的主要流程和关键要点。如果你在移植过程中遇到特定问题,或想了解某方面的进阶内容,欢迎随时和我说说。