news 2026/11/3 6:47:11

Ubuntu系统下Docker安装与容器化实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu系统下Docker安装与容器化实践指南

1. 为什么选择Docker?

Docker作为当前最流行的容器化技术,已经成为开发者和运维人员的标配工具。相比传统虚拟机,Docker容器更加轻量级,启动速度更快,资源占用更少。在Ubuntu上使用Docker,可以轻松实现开发环境与生产环境的一致性,避免"在我机器上能跑"的尴尬情况。

我最初接触Docker是在2016年,当时为了解决多个Python项目依赖冲突的问题。传统方式需要在不同虚拟环境中来回切换,而使用Docker后,每个项目都可以拥有完全隔离的运行环境,大大提高了开发效率。

2. Ubuntu环境准备

2.1 系统要求检查

在安装Docker之前,建议先检查Ubuntu系统版本和内核信息:

lsb_release -a uname -r

Docker CE支持以下Ubuntu版本:

  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Impish 21.10
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)

注意:建议使用LTS(Long Term Support)版本以获得长期支持。我在生产环境中主要使用20.04和22.04版本。

2.2 卸载旧版本

如果你的系统上安装过旧版Docker,建议先彻底卸载:

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

这个步骤可以避免新旧版本冲突问题。我曾经因为没彻底卸载旧版本导致端口映射失效,花了半天时间排查。

3. Docker安装详解

3.1 使用官方脚本安装

这是最简单快捷的安装方式:

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

安装完成后,将当前用户加入docker组,避免每次都要sudo:

sudo usermod -aG docker $USER newgrp docker

重要:需要注销重新登录或重启终端才能使组权限生效。这个细节经常被忽略,导致用户以为安装失败。

3.2 通过APT仓库安装

如果你更喜欢传统的包管理方式:

sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3.3 验证安装

安装完成后,运行测试容器验证:

docker run hello-world

如果看到"Hello from Docker!"消息,说明安装成功。我第一次看到这个输出时,感觉特别有成就感。

4. Docker镜像管理实战

4.1 镜像基础操作

查看本地镜像列表:

docker images

搜索Docker Hub上的镜像:

docker search ubuntu

拉取镜像到本地:

docker pull ubuntu:22.04

删除本地镜像:

docker rmi ubuntu:22.04

技巧:使用docker image prune可以清理未被任何容器引用的悬空镜像,释放磁盘空间。

4.2 镜像标签管理

给镜像打标签:

docker tag ubuntu:22.04 my-ubuntu:v1

这个功能在构建自定义镜像时特别有用。我曾经管理过多个版本的Python应用镜像,通过标签可以清晰地区分不同版本。

4.3 镜像导出与导入

导出镜像为tar文件:

docker save -o ubuntu22.tar ubuntu:22.04

从tar文件导入镜像:

docker load -i ubuntu22.tar

这个功能在内网环境中特别实用。有一次客户现场没有外网,我就是通过预先导出的镜像文件完成了部署。

5. 容器生命周期管理

5.1 容器基本操作

运行容器:

docker run -it --name my-ubuntu ubuntu:22.04 /bin/bash

查看运行中的容器:

docker ps

查看所有容器(包括已停止的):

docker ps -a

启动/停止/重启容器:

docker start my-ubuntu docker stop my-ubuntu docker restart my-ubuntu

删除容器:

docker rm my-ubuntu

5.2 容器与主机交互

从主机复制文件到容器:

docker cp host_file.txt my-ubuntu:/path/in/container/

从容器复制文件到主机:

docker cp my-ubuntu:/path/in/container/file.txt host_file.txt

这个功能在调试时非常有用。记得有一次应用在容器中运行异常,我就是通过复制日志文件出来分析解决了问题。

6. 数据持久化方案

6.1 挂载主机目录

docker run -v /host/path:/container/path ubuntu:22.04

这种方式简单直接,适合开发环境。但要注意权限问题,容器内的进程可能没有权限访问主机目录。

6.2 使用数据卷

创建数据卷:

docker volume create my-vol

使用数据卷:

docker run -v my-vol:/container/path ubuntu:22.04

数据卷相比目录挂载有更好的性能,适合生产环境。我曾经对比测试过,在高IO场景下,数据卷的性能优势明显。

7. 网络配置技巧

7.1 端口映射

docker run -p 8080:80 nginx

这样就将容器的80端口映射到主机的8080端口。注意如果主机端口小于1024,需要root权限。

7.2 自定义网络

创建自定义网络:

docker network create my-net

使用自定义网络运行容器:

docker run --network=my-net ubuntu:22.04

自定义网络可以提供更好的隔离性和灵活性。在多容器应用场景下,我通常会为每个项目创建独立的网络。

8. Dockerfile最佳实践

8.1 基础Dockerfile示例

FROM ubuntu:22.04 RUN apt-get update && apt-get install -y python3 pip COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python3", "app.py"]

8.2 构建优化技巧

  1. 合理使用.dockerignore文件,避免不必要的文件被复制到镜像中
  2. 合并RUN指令减少镜像层数
  3. 使用多阶段构建减小最终镜像体积
  4. 固定基础镜像版本,避免自动更新导致的不一致

我曾经通过优化Dockerfile,将一个Python应用的镜像大小从1.2GB减小到不到300MB,大大提高了部署效率。

9. 常见问题排查

9.1 容器启动失败

检查容器日志:

docker logs container_name

查看容器详细信息:

docker inspect container_name

9.2 网络连接问题

检查容器网络配置:

docker network inspect bridge

测试容器网络连通性:

docker exec -it container_name ping google.com

9.3 存储空间不足

查看Docker磁盘使用情况:

docker system df

清理无用资源:

docker system prune

警告:这个命令会删除所有未被使用的资源,包括停止的容器、悬空镜像和网络等。执行前请确认。

10. 生产环境建议

  1. 使用非root用户运行容器
  2. 限制容器资源使用(CPU、内存)
  3. 配置日志轮转
  4. 定期更新基础镜像和安全补丁
  5. 使用编排工具管理多容器应用

在实际运维中,我曾经遇到过因为没限制容器内存导致主机OOM的情况。从那以后,我都会为每个容器设置合理的资源限制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 6:46:46

机器人单次学习技术:仿多巴胺奖励机制实现高效训练

1. 项目背景与核心突破北京大学团队近期在机器人学习领域取得了一项突破性进展——通过模拟人类大脑中的"多巴胺"奖励机制,让机器人仅需一次示范就能从笨拙新手快速成长为操作高手。这项研究彻底改变了传统机器人需要数百次重复训练才能掌握新技能的学习模…

作者头像 李华
网站建设 2026/11/3 6:46:27

公钥、私钥、数字签名与证书:一条链讲透加密体系

简介:一份围绕公钥、私钥、数字签名与数字证书展开的密码学基础解析文档,适合刚接触信息安全、Web 开发或准备面试复习的读者,用于厘清单钥与双钥加密的差别、密钥保存风险以及公钥体系的基本信任问题。压缩包内为 1 个 docx 文件&#xff0c…

作者头像 李华
网站建设 2026/11/3 6:46:16

智能决策系统接口文档设计的四大原则与实践

1. 项目背景与核心挑战决策支持系统在现代企业运营中扮演着越来越重要的角色。根据Gartner的调研数据显示,到2025年,超过75%的企业将把AI驱动的决策支持系统纳入核心业务流程。作为架构师,我们面临的最大挑战不是技术实现本身,而是…

作者头像 李华
网站建设 2026/11/3 6:46:11

推理模型与通用模型提示语设计:从指令到需求的机制与避坑

简介:《DeepSeek从入门到精通》是一份面向AI从业者、大模型学习者及技术研发人员的PDF讲义,围绕国产开源推理模型DeepSeek-R1展开,帮助读者从基础认知逐步过渡到高质量提示语设计与实际应用。内容覆盖模型背景、核心技术、智能对话与文本创作…

作者头像 李华
网站建设 2026/11/3 6:44:03

MySQL锁机制实战:行锁、间隙锁与临键锁详解

1. MySQL锁机制深度解析:行锁、间隙锁与临键锁实战指南作为数据库工程师,我们每天都在与锁打交道。MySQL的InnoDB引擎通过精细的锁机制实现了事务隔离,但锁的复杂性常常让开发者踩坑。今天我将结合多年实战经验,带大家彻底搞懂行锁…

作者头像 李华
网站建设 2026/11/3 6:44:00

PostgreSQL与pgvector实现高效RAG语义检索方案

1. 项目概述:PostgreSQL pgvector 实现 RAG 语义检索在构建 RAG(检索增强生成)系统时,向量存储与检索环节的性能和易用性直接影响最终效果。传统方案通常需要引入专用向量数据库,但维护多套系统会显著增加架构复杂度。…

作者头像 李华