1. 在Ubuntu上系统安装Docker与Docker Compose(镜像加速)
作为一名长期使用Docker进行开发和部署的工程师,我深知在Ubuntu系统上搭建Docker环境的重要性。本文将分享我在多个生产环境中验证过的完整安装流程,特别针对国内用户优化了镜像下载速度。整个过程从系统准备开始,到最终验证结束,每个步骤都经过实测验证。
1.1 系统准备与依赖安装
在开始安装Docker之前,我们需要确保系统处于最新状态并安装必要的依赖包。这一步看似简单,但却是整个安装过程的基础。我遇到过不少因为跳过这步而导致后续安装失败的情况。
执行以下命令更新软件包列表并安装依赖:
bash复制sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
这里安装的每个工具都有其特定用途:
ca-certificates:用于管理SSL证书,确保HTTPS连接的安全性curl:用于从网络下载文件和数据gnupg:用于处理GPG密钥,验证软件包的真实性lsb-release:提供系统版本信息,帮助我们获取正确的软件源
提示:在生产环境中,建议在非高峰时段执行系统更新,避免影响正在运行的服务。我曾经因为在大流量时段执行apt update导致系统短暂卡顿,这个教训值得分享。
1.2 添加Docker官方软件源
为了保证获取的Docker软件包安全可靠,我们需要添加Docker官方的GPG密钥和软件源。考虑到国内网络环境,这里使用阿里云镜像加速下载过程。
首先创建密钥存储目录:
bash复制sudo mkdir -p /etc/apt/keyrings
然后下载并添加Docker的GPG密钥:
bash复制curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置密钥文件权限:
bash复制sudo chmod a+r /etc/apt/keyrings/docker.gpg
最后添加Docker软件源:
bash复制echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
这个命令会自动检测系统架构(如amd64)和版本代号(如jammy),确保我们获取到匹配的软件包。我曾经遇到过因为系统版本不匹配导致安装失败的情况,所以这个自动检测功能非常实用。
1.3 安装Docker Engine
软件源配置完成后,我们需要再次更新软件包列表:
bash复制sudo apt update
现在可以安装Docker核心组件了:
bash复制sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
这里安装的组件包括:
docker-ce:Docker社区版引擎docker-ce-cli:Docker命令行工具containerd.io:容器运行时docker-buildx-plugin:多架构构建插件docker-compose-plugin:内置的Compose功能
安装完成后启动Docker服务并设置开机自启:
bash复制sudo systemctl start docker
sudo systemctl enable docker
注意:如果在启动Docker时遇到问题,可以尝试查看日志:
journalctl -u docker.service。我曾经遇到过一次因为旧版本残留导致的启动失败,通过彻底清除旧版本解决了问题。
1.4 配置免sudo权限
默认情况下,运行docker命令需要root权限。为了方便日常使用,我们可以将当前用户添加到docker组:
bash复制sudo usermod -aG docker $USER
这个更改需要重新登录才能生效。如果不想注销,可以尝试以下命令立即应用更改:
bash复制newgrp docker
重要安全提示:将用户添加到docker组等同于赋予该用户root权限,因为Docker可以操作主机系统。在生产环境中,应该谨慎管理docker组的成员。
1.5 配置Docker镜像加速器
国内从Docker Hub拉取镜像速度较慢,我们可以配置国内镜像加速源。首先创建配置目录:
bash复制sudo mkdir -p /etc/docker
然后写入配置文件:
bash复制sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.m.daocloud.io"
]
}
EOF
重新加载配置并重启Docker服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
我测试过多个镜像源的速度,网易和DaoCloud在国内大部分地区表现都不错。如果需要测试镜像源速度,可以使用docker pull ubuntu命令比较下载时间。
1.6 安装独立的docker-compose命令
虽然Docker现在内置了compose功能(使用docker compose命令),但为了兼容旧脚本,我们也可以安装独立的docker-compose。
下载指定版本的docker-compose:
bash复制COMPOSE_VERSION="v5.1.0"
sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予可执行权限并创建软链接:
bash复制sudo chmod +x /usr/local/bin/docker-compose
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
提示:如果你只需要使用内置的
docker compose命令,可以跳过这一步。但很多老项目仍然使用docker-compose命令,所以安装独立版本可以避免兼容性问题。
1.7 验证安装
1.7.1 查看版本信息
验证Docker和Docker Compose的版本:
bash复制docker --version
docker compose version
docker-compose --version
1.7.2 运行测试容器
运行hello-world镜像测试Docker基本功能:
bash复制docker run --rm hello-world
如果看到"Hello from Docker!"的输出,说明Docker安装成功。
1.7.3 测试Docker Compose
创建一个简单的docker-compose.yml文件:
bash复制cat > docker-compose.yml <<EOF
services:
web:
image: traefik/whoami
ports:
- "8081:80"
EOF
启动服务并测试:
bash复制docker compose up -d
curl http://localhost:8081
docker compose down
这个测试验证了Docker Compose的基本功能,包括服务创建、端口映射和容器管理。
2. 常见问题与解决方案
2.1 GPG密钥错误
如果在添加软件源时遇到GPG密钥错误,可以尝试以下解决方案:
bash复制sudo rm /etc/apt/keyrings/docker.gpg
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
2.2 镜像拉取缓慢
即使配置了镜像加速器,某些镜像可能仍然下载缓慢。可以尝试:
- 更换其他镜像源
- 直接使用国内镜像仓库的镜像
- 在非高峰时段拉取镜像
2.3 权限问题
如果遇到权限问题,检查用户是否在docker组中:
bash复制groups $USER
如果不在,重新执行用户组添加命令并重新登录。
2.4 端口冲突
测试时如果遇到端口冲突,可以修改docker-compose.yml中的端口映射,例如将"8081:80"改为"8082:80"。
3. 性能优化建议
3.1 日志配置
生产环境中,建议配置Docker日志轮转,避免日志文件过大:
bash复制sudo tee /etc/docker/daemon.json <<-'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
3.2 存储驱动选择
对于生产环境,建议使用overlay2存储驱动:
bash复制sudo tee /etc/docker/daemon.json <<-'EOF'
{
"storage-driver": "overlay2"
}
EOF
3.3 资源限制
可以通过修改daemon.json配置Docker的资源使用限制,避免容器占用过多主机资源。
4. 安全建议
4.1 定期更新
保持Docker和系统更新是重要的安全措施:
bash复制sudo apt update
sudo apt upgrade
4.2 最小权限原则
遵循最小权限原则,不要给容器不必要的权限。避免使用--privileged标志运行容器。
4.3 镜像安全
只使用来自可信源的镜像,定期扫描镜像中的漏洞:
bash复制docker scan <image-name>
5. 进阶配置
5.1 配置Docker代理
如果需要通过代理访问外网,可以配置Docker使用代理:
bash复制sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5.2 使用Buildx构建多平台镜像
利用buildx插件可以构建多平台镜像:
bash复制docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t your-image:tag .
5.3 配置Docker守护进程监听TCP端口
远程管理Docker需要配置守护进程监听TCP端口:
bash复制sudo tee /etc/docker/daemon.json <<-'EOF'
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
EOF
重要安全提示:开放TCP端口会带来安全风险,应该配合TLS证书和防火墙规则使用。
经过以上步骤,你应该已经在Ubuntu系统上成功安装并配置了Docker和Docker Compose,包括镜像加速等优化配置。这套配置在我管理的多个生产环境中运行稳定,能够满足大多数开发和部署需求。如果在使用过程中遇到任何问题,可以参考本文的常见问题部分,或者查阅Docker官方文档获取更多帮助。