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

Docker 在 Ubuntu 系统中的详细操作指南

🐳 Docker 在 Ubuntu 系统中的详细操作指南


在这里插入图片描述

一、Docker 简介

Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包在一个轻量级、可移植的容器中,实现快速部署和运行。


二、系统要求

  • 操作系统:Ubuntu 20.04 或更高版本(推荐使用 LTS 版本)
  • 用户权限:具有 sudo 权限
  • 网络:能够访问互联网(用于下载 Docker 和镜像)

三、安装 Docker Engine

方法一:使用官方安装脚本(推荐)

# 更新系统软件包
sudo apt update# 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加 Docker 官方仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 更新软件包索引
sudo apt update# 安装 Docker 引擎
sudo apt install -y docker-ce docker-ce-cli containerd.io# 验证是否安装成功
sudo docker --version

四、验证 Docker 是否正常运行

# 运行测试容器
sudo docker run hello-world

如果输出类似下面的内容,说明 Docker 安装成功:

Hello from Docker!
This message shows that your installation appears to be working correctly.

五、配置 Docker 用户权限(避免每次使用 sudo)

默认情况下,只有 root 用户或 docker 组用户才能运行 Docker 命令。

# 创建 docker 用户组(如果尚未存在)
sudo groupadd docker# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER# 重新加载用户组权限
newgrp docker# 验证是否可以不使用 sudo 运行 Docker
docker run hello-world

注意:退出终端后重新登录,权限才会生效。


六、Docker 常用命令

1. 查看运行中的容器

docker ps

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

docker ps -a

3. 查看本地镜像

docker images

4. 拉取镜像

docker pull nginx

5. 运行容器

docker run -d -p 8080:80 --name mynginx nginx
  • -d:后台运行
  • -p 8080:80:将宿主机的 8080 端口映射到容器的 80 端口
  • --name mynginx:为容器指定名称
  • nginx:使用的镜像名

6. 停止容器

docker stop mynginx

7. 启动已存在的容器

docker start mynginx

8. 删除容器

docker rm mynginx

⚠️ 注意:删除前请先停止容器。

9. 删除镜像

docker rmi nginx

七、构建自定义镜像(使用 Dockerfile)

示例:构建一个简单的 Python Web 应用

1. 创建项目目录结构
mkdir myapp
cd myapp
touch app.py Dockerfile
2. 编写 app.py
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return "Hello from Docker!"if __name__ == "__main__":app.run(host='0.0.0.0', port=5000)
3. 编写 Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
4. 构建镜像
docker build -t myapp .
5. 运行容器
docker run -d -p 5000:5000 --name myapp-container myapp
6. 浏览器访问
http://localhost:5000

八、数据卷挂载(Volume)

如果你希望容器内的数据持久化保存,可以使用 Volume。

docker run -d -p 5000:5000 \-v $(pwd)/data:/app/data \--name myapp-container myapp
  • $(pwd)/data:宿主机上的目录
  • /app/data:容器中的目录

九、网络配置

Docker 会自动为容器分配 IP,也可以自定义网络:

docker network create mynetwork
docker run --network mynetwork --name app1 -d myapp
docker run --network mynetwork --name app2 -d anotherapp

十、Docker Compose(多容器管理)

1. 安装 Docker Compose

# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose# 验证安装
docker-compose --version

2. 示例:使用 docker-compose.yml 管理多服务

# docker-compose.yml
version: '3'
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"
# 启动服务
docker-compose up -d# 停止服务
docker-compose down

十一、清理 Docker 资源

1. 删除所有停止的容器

docker container prune

2. 删除所有无用的镜像

docker image prune -a

3. 删除所有未使用的卷

docker volume prune

4. 删除所有未使用的网络

docker network prune

十二、常见问题与解决方法

问题解决方法
权限问题(Permission denied)确保用户已加入 docker 组,使用 newgrp docker 刷新权限
容器无法访问?检查端口映射、防火墙设置
构建失败?检查 Dockerfile 语法,依赖是否完整
磁盘空间不足?使用 docker system prune 清理无用资源

十三、推荐学习资源

  • Docker 官方文档:https://docs.docker.com/
  • Docker Hub 镜像仓库:https://hub.docker.com/
  • 《Docker — 从入门到实践》中文手册:https://juejin.cn/post/6844903446697938958
  • B站 Docker 教程:搜索 “Docker 入门 Ubuntu”

十四、进阶学习建议

  • 学习使用 Docker Compose 构建微服务架构
  • 探索 Docker Swarm / Kubernetes 编排系统
  • 学习编写多阶段构建的 Dockerfile
  • 探索 CI/CD 中使用 Docker 构建部署流程

如果你已经掌握本教程内容,可以尝试使用 Docker Compose 部署 MySQL + Redis + Web 应用的多服务项目。

如需进一步学习 Docker Compose 或 Kubernetes,请告诉我,我可以为你生成详细教程!

祝你学习愉快,早日成为 Docker 高手!🚀

http://www.xdnf.cn/news/1154377.html

相关文章:

  • 事务的传播行为,分别在spring和mysql中讲解
  • CentOS 服务器docker pull 拉取失败
  • 相机模型和对极几何
  • MySQL(147)如何进行跨平台迁移?
  • 【LeetCode 热题 100】124. 二叉树中的最大路径和——DFS
  • 后台管理系统登录模块(双token的实现思路)
  • [Python] -项目实战4- 利用Python进行Excel批量处理
  • 将EXCEL或者CSV转换为键值对形式的Markdown文件
  • 【Settlement】P1:整理GH中的矩形GRID角点到EXCEL中
  • 大语言模型调用方式与函数调用
  • 【并集查找 二分图】P6185 [NOI Online #1 提高组] 序列|省选-
  • 【已解决】GitHub SSH 连接失败解决方案:Permission Denied (publickey) 错误修复指南
  • HarmonyOS 网络请求优化实战指南:从0到1写出流畅不卡顿的应用!
  • EXPLAIN:你的SQL性能优化透视镜
  • C/C++数据结构之单向链表
  • 7-大语言模型—指令理解:指令微调训练+模型微调
  • FFmpeg 图片处理
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • Spring Boot中REST与gRPC并存架构设计与性能优化实践指南
  • 测试学习之——Pytest Day4
  • Cosmos:构建下一代互联网的“区块链互联网
  • 黑马教程Webday6
  • 从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控
  • HTML Style 对象深度解析:从基础到高级应用
  • client-go: k8s选主
  • 【Linux】1. Linux操作系统介绍及环境搭建
  • 20250720-6-Kubernetes 调度-nodeName字段,DaemonS_笔记
  • MySQL笔记3
  • 西门子 S7-1500 系列 PLC CPU 选型全指南:从类型到实战
  • 30天打牢数模基础-K均值聚类