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

发布于:2025-07-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

🐳 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 Flask

app = 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 高手!🚀


网站公告

今日签到

点亮在社区的每一天
去签到