ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Ubuntu安装Docker完整指南与优化实践

Ubuntu安装Docker完整指南与优化实践

1. 为什么要在Ubuntu上安装Docker?

作为Linux发行版中最流行的选择之一,Ubuntu与Docker的组合已经成为开发者构建、测试和部署应用的黄金标准。我最初接触这个组合是在2016年一个微服务项目中,当时手动配置环境依赖花了整整两天,而改用Docker后同样的工作只需几分钟。

Docker的核心价值在于它提供的容器化技术。与虚拟机不同,容器直接共享主机操作系统内核,这使得它们更加轻量级——通常只有几十MB大小,却能完整封装应用运行所需的所有依赖。在Ubuntu上运行Docker,相当于拥有了一个可移植的、一致的开发与生产环境。

重要提示:虽然Ubuntu 22.04 LTS是目前最稳定的选择,但如果你使用较旧的18.04版本,某些Docker功能可能会受限。建议至少使用20.04及以上版本。

2. 准备工作与环境检查

2.1 系统要求确认

在开始安装前,我们需要确认几个关键点:

  1. Ubuntu版本:打开终端执行lsb_release -a,查看Description行。我推荐使用22.04 LTS,它的长期支持会持续到2027年。

  2. 架构兼容性:运行uname -m,x86_64表示64位系统,这是Docker官方支持最好的架构。如果是ARM设备(如树莓派),需要额外注意镜像兼容性。

  3. 存储空间:执行df -h,确保至少有20GB可用空间。Docker默认将镜像存储在/var/lib/docker,这个分区需要有足够容量。

2.2 卸载旧版本(如有)

如果你之前尝试过安装Docker,强烈建议先彻底清理:

sudo apt-get remove docker docker-engine docker.io containerd runc sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd

我在帮同事解决问题时,经常发现残留的配置文件导致新版本无法正常工作。这个清理步骤能避免90%的安装冲突。

3. 安装Docker引擎的三种方法

3.1 官方推荐方法:使用apt仓库

这是最稳妥的安装方式,也是Docker官方文档首推的方案:

# 1. 更新apt索引并安装依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg # 2. 添加Docker官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # 3. 设置仓库 echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 4. 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

这个流程看似复杂,但每一步都有其必要性:

  • GPG密钥验证软件包真实性
  • 特定架构的仓库确保兼容性
  • 同时安装的docker-compose-plugin让你后续可以直接使用docker compose命令

3.2 便捷方法:使用自动化脚本

对于快速测试环境,可以使用Docker提供的便捷脚本:

curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh

虽然这个方法简单,但我只在临时环境使用它。在生产环境中,明确知道每个安装步骤更为安全。

3.3 手动安装.deb包

当服务器无法访问外网时,可以下载离线包手动安装:

  1. 从https://download.docker.com/linux/ubuntu/dists/ 选择对应版本的pool/stable目录
  2. 下载以下三个核心包:
    • docker-ce_xxx.deb
    • docker-ce-cli_xxx.deb
    • containerd.io_xxx.deb
  3. 使用sudo dpkg -i *.deb安装

这种方法需要自行解决依赖关系,适合有经验的系统管理员。

4. 安装后的关键配置

4.1 用户权限配置

默认只有root用户能运行docker命令,这既不安全也不方便。将当前用户加入docker组:

sudo usermod -aG docker $USER newgrp docker # 立即生效无需注销

安全警告:docker组实际上等同于root权限。在多用户系统中,应当谨慎分配此权限。

4.2 镜像加速配置

国内访问Docker Hub可能很慢,修改/etc/docker/daemon.json(不存在则创建):

{ "registry-mirrors": [ "https://registry.cn-hangzhou.aliyuncs.com", "https://hub-mirror.c.163.com" ] }

然后重启服务:

sudo systemctl restart docker

4.3 存储驱动选择

对于Ubuntu,通常有两种推荐选择:

  • overlay2(默认):性能好,兼容性强
  • btrfs:如果你使用btrfs文件系统

查看当前驱动:

docker info | grep "Storage Driver"

5. 验证安装与基本使用

5.1 运行测试容器

执行以下命令验证安装是否成功:

docker run --rm hello-world

你应该看到"Hello from Docker!"的消息。这个命令会:

  1. 自动从Docker Hub拉取hello-world镜像
  2. 创建并运行容器
  3. 输出信息后自动删除容器(--rm参数作用)

5.2 常用命令速查

# 镜像管理 docker pull ubuntu:22.04 # 拉取镜像 docker images # 列出本地镜像 docker rmi <镜像ID> # 删除镜像 # 容器管理 docker ps -a # 查看所有容器 docker start/stop <容器ID> # 启停容器 docker exec -it <容器ID> bash # 进入运行中的容器 docker rm <容器ID> # 删除容器

6. 常见问题与解决方案

6.1 "Got permission denied"错误

如果看到这类错误,说明当前用户没有docker组权限。检查:

groups | grep docker

如果没有输出,确认是否执行了newgrp docker或已注销重新登录。

6.2 服务启动失败

检查docker服务状态:

sudo systemctl status docker

常见原因及解决:

  1. 端口冲突:修改/etc/docker/daemon.json中的"hosts"配置
  2. 存储驱动问题:尝试删除/var/lib/docker并重启
  3. 内核模块缺失:安装linux-modules-extra包

6.3 镜像拉取缓慢

除了配置镜像加速器,还可以:

  1. 直接使用国内镜像站的镜像
  2. 设置代理(如果有合法网络权限):
    mkdir -p ~/.docker echo '{"proxies":{"default":{"httpProxy":"http://proxy.example.com:8080"}}}' > ~/.docker/config.json

7. 进阶配置建议

7.1 资源限制配置

防止容器占用过多资源,在daemon.json中添加:

{ "default-ulimits": { "nofile": { "Name": "nofile", "Hard": 64000, "Soft": 64000 } }, "storage-opts": [ "size=100G" ] }

7.2 日志轮转配置

避免容器日志占满磁盘:

{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }

7.3 安全加固建议

  1. 启用用户命名空间:
    echo '{"userns-remap":"default"}' | sudo tee /etc/docker/daemon.json
  2. 禁用特权容器:
    docker run --security-opt=no-new-privileges ...

8. 性能优化技巧

经过多年使用,我总结出几个特别实用的优化点:

  1. 使用SSD存储:/var/lib/docker最好放在SSD上,IO性能提升显著
  2. 调整CPU调度:对于CPU密集型容器,设置--cpuset-cpus参数绑定核心
  3. 内存限制:通过-m参数限制容器内存,避免OOM killer误杀重要进程
  4. 网络性能:对于高吞吐应用,使用--network=host模式(牺牲部分隔离性)

一个生产环境示例:

docker run -d --name myapp \ --cpus 2 \ -m 4g \ --network host \ -v /ssd_data:/data \ myapp-image

9. 容器编排初探

虽然这超出了基础安装范围,但了解Docker Compose会让你事半功倍。安装时我们已经包含了compose插件,创建一个docker-compose.yml:

version: '3' services: web: image: nginx ports: - "8080:80" db: image: postgres environment: POSTGRES_PASSWORD: example

启动服务栈:

docker compose up -d

这个简单的编排文件就能定义和管理多容器应用,非常适合开发环境。

返回列表