当前位置: 首页 > news >正文

Docker 开发与使用教程 - Ubuntu 24.04 完整指南

目录

  1. 容器的概念
  2. Docker 与 Docker Compose 安装
  3. Docker 常用操作
  4. Docker-Compose 常用操作
  5. 镜像与容器管理
  6. 实用示例
  7. 最佳实践
  8. 常见问题

容器的概念

什么是容器?

容器是一种轻量级、可移植、自包含的软件打包技术,它将应用程序及其所有依赖项(库、配置文件、运行时环境等)打包在一起,确保应用在任何环境中都能以相同的方式运行。

容器的特点

  • 轻量级:共享主机操作系统内核,启动速度快,资源占用少
  • 可移植性:一次构建,到处运行(Build once, run anywhere)
  • 隔离性:每个容器都有独立的文件系统、进程空间和网络接口
  • 标准化:通过统一的镜像格式和运行时规范

容器 vs 虚拟机

特性 容器 虚拟机
启动时间 秒级 分钟级
资源占用
系统开销
隔离级别 进程级隔离 系统级隔离
镜像大小 MB 级别 GB 级别

Docker 与 Docker Compose 安装

系统环境

  • 操作系统:Ubuntu 24.04 LTS
  • 架构:x86_64 或 ARM64
  • 权限:具有 sudo 权限的用户

安装 Docker

1. 卸载旧版本(如有)

sudo apt-get remove docker docker-engine docker.io containerd runc

2. 更新软件包索引

sudo apt-get update

3. 安装必要的依赖包

sudo apt-get install \ca-certificates \curl \gnupg \lsb-release

4. 添加 Docker 官方 GPG 密钥

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

5. 设置 Docker 软件源

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

6. 更新软件包索引并安装 Docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

7. 验证安装

# 检查 Docker 版本
docker --version# 运行测试容器
sudo docker run hello-world

8. 配置用户权限(可选)

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER# 重新登录或刷新组权限
newgrp docker

安装 Docker Compose

从 Docker Compose v2 开始,它作为 Docker 插件包含在 docker-compose-plugin 包中。如果你已经按照上面的步骤安装了 Docker,那么 Docker Compose 应该已经安装好了。

验证 Docker Compose 安装

# 检查 Docker Compose 版本
docker compose version# 或者使用旧版命令格式
docker-compose version

如果未安装,可以手动安装

# 安装 Docker Compose v2(独立二进制文件)
sudo apt-get install docker-compose-plugin# 或者安装旧版本(不推荐)
sudo apt-get install docker-compose

配置加速镜像(中国用户推荐)

# 创建配置文件
sudo mkdir -p /etc/docker# 编辑配置文件
sudo nano /etc/docker/daemon.json# 添加以下内容(使用阿里云镜像加速器)
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com","https://mirror.ccs.tencentyun.com","https://docker.mirrors.ustc.edu.cn"]
}# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker 常用操作

镜像操作

搜索镜像

# 搜索 nginx 镜像
docker search nginx# 搜索指定 star 数的镜像
docker search --filter=stars=100 nginx

拉取镜像

# 拉取最新版本
docker pull nginx# 拉取指定版本
docker pull nginx:1.25.3# 拉取特定平台的镜像
docker pull --platform linux/amd64 nginx

列出镜像

# 列出所有镜像
docker images# 或
docker image ls# 列出特定镜像
docker images nginx# 查看镜像详细信息
docker image inspect nginx

删除镜像

# 删除指定镜像
docker rmi nginx# 强制删除
docker rmi -f nginx# 删除所有未使用的镜像
docker image prune -a# 强制删除所有未使用的镜像
docker image prune -a -f

导出和导入镜像

# 导出镜像为 tar 文件
docker save -o nginx.tar nginx:latest# 从 tar 文件导入镜像
docker load -i nginx.tar

构建镜像

# 使用 Dockerfile 构建镜像
docker build -t myapp:latest .# 指定 Dockerfile 文件名
docker build -f Dockerfile.prod -t myapp:prod .# 带构建参数的构建
docker build --build-arg VERSION=1.0 -t myapp:1.0 .

容器操作

创建并运行容器

# 运行容器(后台模式)
docker run -d --name my-nginx -p 80:80 nginx# 运行容器(交互模式)
docker run -it --name my-ubuntu ubuntu:24.04 /bin/bash# 运行容器并挂载卷
docker run -d --name my-nginx \-v /host/path:/container/path \-p 80:80 nginx# 运行容器并设置环境变量
docker run -d --name my-app \-e "ENV_VAR=value" \-p 3000:3000 myapp# 运行容器并链接到其他容器
docker run -d --name my-app --link redis:redis myapp

列出容器

# 列出正在运行的容器
docker ps# 列出所有容器(包括停止的)
docker ps -a# 列出最近创建的容器
docker ps -l# 只显示容器 ID
docker ps -q

启动和停止容器

# 启动容器
docker start my-nginx# 停止容器
docker stop my-nginx# 重启容器
docker restart my-nginx# 暂停容器
docker pause my-nginx# 恢复暂停的容器
docker unpause my-nginx# 强制停止容器
docker kill my-nginx

进入容器

# 使用 exec 进入正在运行的容器
docker exec -it my-nginx /bin/bash# 使用 nsenter(需要安装)
docker run --rm -it --pid=container:my-nginx \--privileged nicolaka/netshoot nsenter -t 1 -m -u -i -n -p# 使用 docker attach(不推荐)
docker attach my-nginx

查看容器信息

# 查看容器日志
docker logs my-nginx
docker logs -f my-nginx  # 实时跟踪
docker logs --tail 100 my-nginx  # 查看最后 100 行# 查看容器进程
docker top my-nginx# 查看容器资源使用情况
docker stats my-nginx# 查看容器详细信息
docker inspect my-nginx# 查看容器端口映射
docker port my-nginx

复制文件

# 从容器复制文件到主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf# 从主机复制文件到容器
docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf

删除容器

# 删除容器
docker rm my-nginx# 强制删除运行中的容器
docker rm -f my-nginx# 删除所有已停止的容器
docker container prune# 强制删除所有容器
docker rm -f $(docker ps -aq)

网络操作

列出网络

docker network ls

创建网络

# 创建桥接网络
docker network create my-network# 创建自定义子网的网络
docker network create --subnet=172.20.0.0/16 my-network# 创建 overlay 网络(Swarm 模式)
docker network create --driver overlay --attachable my-overlay

删除网络

docker network rm my-network

查看网络详情

docker network inspect my-network

卷操作

创建卷

docker volume create my-volume

列出卷

docker volume ls

查看卷详情

docker volume inspect my-volume

删除卷

docker volume rm my-volume# 删除所有未使用的卷
docker volume prune

Docker-Compose 常用操作

Docker Compose 文件结构

version: '3.8'services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/htmldepends_on:- appnetworks:- my-networkapp:build: .ports:- "3000:3000"environment:- NODE_ENV=productionvolumes:- ./app:/appnetworks:- my-networkdatabase:image: postgres:15environment:POSTGRES_DB: myappPOSTGRES_USER: userPOSTGRES_PASSWORD: passwordvolumes:- db-data:/var/lib/postgresql/datanetworks:- my-networkvolumes:db-data:networks:my-network:driver: bridge

常用命令

启动服务

# 启动所有服务
docker compose up# 后台启动
docker compose up -d# 重新构建镜像后启动
docker compose up --build# 强制重新创建容器
docker compose up --force-recreate

停止服务

# 停止所有服务
docker compose stop# 停止并删除容器
docker compose down# 停止并删除容器、网络和卷
docker compose down --volumes

查看服务状态

# 查看运行中的服务
docker compose ps# 查看服务日志
docker compose logs
docker compose logs -f web
docker compose logs --tail 100 app# 查看服务资源使用
docker compose stats

管理服务

# 启动特定服务
docker compose start web# 停止特定服务
docker compose stop web# 重启特定服务
docker compose restart web# 扩展服务实例
docker compose up -d --scale web=3

执行命令

# 在服务容器中执行命令
docker compose exec web bash# 在特定服务容器中运行一次性命令
docker compose run --rm app npm install

构建服务

# 构建所有服务
docker compose build# 构建特定服务
docker compose build web# 不带缓存构建
docker compose build --no-cache

拉取和推送镜像

# 拉取所有服务的镜像
docker compose pull# 推送所有服务的镜像
docker compose push

镜像与容器管理

镜像管理最佳实践

1. 使用官方镜像

# 推荐使用官方镜像作为基础
FROM node:18-alpine# 避免使用 latest 标签
FROM node:18.19.0-alpine

2. 优化镜像大小

# 使用多阶段构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=productionFROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

3. 清理不必要的文件

# 在 RUN 命令中清理缓存
RUN apt-get update && apt-get install -y \build-essential \&& rm -rf /var/lib/apt/lists/*# 使用 .dockerignore 文件
# .dockerignore
node_modules
.git
.env
*.log

容器管理最佳实践

1. 数据持久化

# 使用卷存储数据
docker volume create app-data
docker run -d \-v app-data:/app/data \--name my-app myapp# 使用绑定挂载进行开发
docker run -d \-v $(pwd):/app \-v /app/node_modules \--name my-app myapp

2. 环境配置

# 使用环境变量
docker run -d \-e "NODE_ENV=production" \-e "DATABASE_URL=postgresql://..." \--name my-app myapp# 使用 env 文件
docker run -d \--env-file .env \--name my-app myapp

3. 健康检查

# 在 Dockerfile 中添加健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \CMD curl -f http://localhost:3000/health || exit 1

4. 资源限制

# 限制 CPU 和内存
docker run -d \--memory="512m" \--cpus="1.0" \--name my-app myapp

容器编排

1. 使用 Docker Compose 管理服务

# docker-compose.yml
version: '3.8'services:frontend:build: ./frontendports:- "80:80"depends_on:- backendnetworks:- app-networkbackend:build: ./backendports:- "3000:3000"environment:- DATABASE_URL=postgresql://user:pass@database:5432/myappdepends_on:- databasenetworks:- app-networkdatabase:image: postgres:15environment:POSTGRES_DB: myappPOSTGRES_USER: userPOSTGRES_PASSWORD: passwordvolumes:- postgres-data:/var/lib/postgresql/datanetworks:- app-networkvolumes:postgres-data:networks:app-network:driver: bridge

2. 使用环境变量文件

# .env
POSTGRES_DB=myapp
POSTGRES_USER=user
POSTGRES_PASSWORD=changeme
NODE_ENV=production
# docker-compose.yml
version: '3.8'services:app:image: myapp:${VERSION:-latest}environment:- NODE_ENV=${NODE_ENV}- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}

参考资源

  • Docker 官方文档
  • Docker Compose 官方文档
  • Docker Hub
  • Ubuntu 官方文档

版权声明

本文采用 CC BY-SA 4.0 许可协议,转载请注明出处。


希望这篇教程对你有所帮助!如果有任何问题或建议,欢迎在评论区留言。 🐳

http://www.jsqmd.com/news/103995/

相关文章:

  • 天津市自建房设计公司哪家强?2025 最新评测排行榜 + 5 星企业推荐 - 苏木2025
  • 架构设计:Rocketmq - 消息0丢失企业级实践
  • 【2025市场分析】沸腾干燥机高精度实力厂家哪家好/行业领先企业定制推荐 - 品牌推荐大师
  • 【Java毕设源码分享】基于springboot+vue的少数民族音乐网站的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2025年质量好的金蝶印刷ERP行业口碑榜 - 行业平台推荐
  • watch 防抖设计
  • 2025年年终西安管道疏通推荐:热门服务商榜单及全方位对比解读 - 品牌推荐
  • 技术日报|AI工作流工具Sim二连冠日增1357星,Claude记忆插件强势回归第二
  • 2025年潮州专业新媒体运营公司排行榜,推荐专业诚信的新媒体 - 工业推荐榜
  • 2025年终总结:国产洗板机知名品牌厂家推荐,附北京普天选购建议 - 品牌推荐大师
  • 提升企业数据安全的文件外发系统有哪些特点与优势
  • 2025年惠州审计公司权威推荐榜单:专业代账/公司注销/税务优化源头公司精选 - 品牌推荐官
  • 2025 年 12 月活性炭厂家权威推荐榜:蜂窝/柱状/颗粒全系解析,废气净化与深度过滤的工业级优选方案 - 品牌企业推荐师(官方)
  • 面试官一句话把我问懵了:Java 都不快了,为什么公司还在用?
  • 告别播放难题!m3u8play.cn——专业M3U8流媒体播放神器来袭
  • 高质量财务分析报告:全流程指南与实操技巧
  • 2025年12月湖南环保家装板材,全屋定制家装板材,好看家装板材厂家测评:甲醛释放量达标品牌推荐 - 品牌鉴赏师
  • 钓鱼攻击低谷期的战术潜伏与防御前瞻
  • 【time-rs】解释://! Error that occurred at some stage of parsing(error/parse.rs)
  • 启天 M 系列 Smart Power On/Fast boot 置灰?2 步解锁修改权限!
  • 2025 年 12 月周转箱模具厂家权威推荐榜:折叠/物流/蔬菜/大型/注塑/PP/HDPE塑料周转箱模具,创新设计与耐用品质深度解析 - 品牌企业推荐师(官方)
  • 情感强度滑动调节功能上线!EmotiVoice更灵活
  • 清醒的堕落
  • 使用 Google Antigravity 在大地上码代码码
  • 告别实习报告“挠头时刻”!百考通AI智能助手,5分钟生成专业、高分实践报告
  • EmotiVoice语音合成在博物馆导览系统中的智能化升级
  • 基于Java开发的eHR企业级人力资源应用系统,支持简历解析(java+vue+源码)
  • Nginx | HTTP 反向代理:与上游服务端建立连接处理实践
  • 告别PPT焦虑!百考通AI智能助手,一键生成专业答辩与开题PPT,让您的汇报闪耀全场
  • 基于深度学习YOLOV8道路裂缝检测系统 yolov8如何训练道路裂缝检测数据集