mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
1036 字
3 分钟
Linux操作大全(十):Docker与容器技术详解
2026-05-25

Linux操作大全(十):Docker与容器技术详解#

本文是Linux操作大全系列的第十篇,详细讲解Docker容器技术。


一、Docker基础概念#

1.1 什么是Docker?#

Docker是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。

核心概念

  • 镜像(Image):只读模板,包含运行应用所需的一切
  • 容器(Container):镜像的运行实例
  • 仓库(Registry):存储镜像的地方(如Docker Hub)

1.2 容器 vs 虚拟机#

特性容器虚拟机
启动速度秒级分钟级
资源占用
隔离性进程级系统级
镜像大小MB级GB级
性能接近原生有损耗

1.3 Docker架构#

┌─────────────────────────────────────┐
│ Docker Client │
├─────────────────────────────────────┤
│ Docker Daemon │
├─────────┬─────────┬─────────────────┤
│ Images │Container│ Networks │
└─────────┴─────────┴─────────────────┘

二、Docker安装#

2.1 Ubuntu安装Docker#

# 更新包索引
sudo apt update
# 安装依赖
sudo apt install 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
# 安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# 将当前用户加入docker组
sudo usermod -aG docker $USER
# 重新登录或运行
newgrp docker

2.2 CentOS安装Docker#

# 安装依赖
sudo yum install -y yum-utils
# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入docker组
sudo usermod -aG docker $USER

2.3 验证安装#

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

三、镜像管理#

3.1 搜索镜像#

# 搜索镜像
docker search nginx
# 指定数量
docker search --limit 10 nginx
# 按星数排序
docker search --filter=stars=100 nginx

3.2 拉取镜像#

# 拉取最新版
docker pull nginx
# 指定版本
docker pull nginx:1.24
# 拉取所有标签
docker pull --all-tags nginx
# 从私有仓库拉取
docker pull registry.example.com/myapp:v1

3.3 查看镜像#

# 列出本地镜像
docker images
# 显示所有镜像(包括中间层)
docker images -a
# 只显示镜像ID
docker images -q
# 显示摘要
docker images --digests
# 过滤镜像
docker images --filter "dangling=true"

3.4 删除镜像#

# 删除指定镜像
docker rmi nginx
# 删除指定版本
docker rmi nginx:1.24
# 强制删除
docker rmi -f nginx
# 删除所有未使用的镜像
docker image prune
# 删除所有镜像
docker rmi $(docker images -q)

3.5 镜像标签#

# 给镜像打标签
docker tag nginx:latest myrepo/nginx:v1
# 推送镜像
docker push myrepo/nginx:v1

四、容器操作#

4.1 创建并运行容器#

# 基本运行
docker run nginx
# 后台运行
docker run -d nginx
# 指定名称
docker run -d --name my-nginx nginx
# 端口映射
docker run -d -p 8080:80 nginx
# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx
# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql
# 挂载卷
docker run -d -v /host/path:/container/path nginx
# 重启策略
docker run -d --restart=always nginx

4.2 查看容器#

# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 只显示容器ID
docker ps -q
# 显示大小
docker ps -s
# 过滤容器
docker ps --filter "status=exited"

4.3 容器生命周期#

# 启动容器
docker start my-nginx
# 停止容器
docker stop my-nginx
# 重启容器
docker restart my-nginx
# 暂停容器
docker pause my-nginx
# 恢复容器
docker unpause my-nginx
# 删除容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有停止的容器
docker container prune

4.4 进入容器#

# 进入运行中的容器(推荐)
docker exec -it my-nginx /bin/bash
# 进入容器(旧方法)
docker attach my-nginx
# 在容器中执行命令
docker exec my-nginx ls /usr/share/nginx/html

4.5 查看容器日志#

# 查看日志
docker logs my-nginx
# 实时查看日志
docker logs -f my-nginx
# 显示最后100行
docker logs --tail 100 my-nginx
# 显示时间戳
docker logs -t my-nginx
# 指定时间范围
docker logs --since 2026-05-25T10:00:00 my-nginx

4.6 容器资源限制#

# 限制内存
docker run -d --memory=512m nginx
# 限制CPU
docker run -d --cpus=1.5 nginx
# 限制CPU份额
docker run -d --cpu-shares=512 nginx

五、数据卷管理#

5.1 数据卷类型#

类型说明适用场景
Bind Mount绑定主机目录开发环境
VolumeDocker管理的数据卷生产环境
tmpfs内存中的临时文件系统敏感数据

5.2 创建数据卷#

# 创建数据卷
docker volume create my-volume
# 查看数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my-volume
# 删除数据卷
docker volume rm my-volume
# 删除所有未使用的数据卷
docker volume prune

5.3 使用数据卷#

# 使用命名数据卷
docker run -d -v my-volume:/data nginx
# 使用绑定挂载
docker run -d -v /host/path:/container/path nginx
# 只读挂载
docker run -d -v my-volume:/data:ro nginx

六、网络管理#

6.1 网络类型#

类型说明适用场景
bridge默认网络,容器间通信单机多容器
host使用主机网络高性能需求
none无网络隔离环境
overlay跨主机通信集群环境

6.2 创建网络#

# 创建桥接网络
docker network create my-network
# 创建指定子网的网络
docker network create --subnet=172.20.0.0/16 my-network
# 查看网络
docker network ls
# 查看网络详情
docker network inspect my-network
# 删除网络
docker network rm my-network

6.3 使用网络#

# 运行容器并连接到网络
docker run -d --network my-network --name my-nginx nginx
# 连接现有容器到网络
docker network connect my-network my-nginx
# 断开网络
docker network disconnect my-network my-nginx

七、Dockerfile#

7.1 基本语法#

# 基础镜像
FROM ubuntu:22.04
# 维护者信息
LABEL maintainer="user@example.com"
# 设置工作目录
WORKDIR /app
# 复制文件
COPY . .
# 安装依赖
RUN apt update && apt install -y python3
# 暴露端口
EXPOSE 8080
# 设置环境变量
ENV APP_ENV=production
# 启动命令
CMD ["python3", "app.py"]

7.2 常用指令#

指令说明
FROM基础镜像
RUN执行命令
CMD容器启动命令
ENTRYPOINT入口点
COPY复制文件
ADD复制文件(支持URL、解压)
WORKDIR设置工作目录
ENV设置环境变量
EXPOSE暴露端口
VOLUME数据卷挂载点
USER指定用户

7.3 构建镜像#

# 基本构建
docker build -t myapp .
# 指定标签
docker build -t myapp:v1 .
# 指定Dockerfile
docker build -f Dockerfile.prod -t myapp .
# 不使用缓存
docker build --no-cache -t myapp .
# 构建参数
docker build --build-arg APP_VERSION=1.0 -t myapp .

7.4 多阶段构建#

# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

八、Docker Compose#

8.1 什么是Docker Compose?#

Docker Compose是一个工具,用于定义和运行多容器Docker应用。

8.2 安装Docker Compose#

# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version

8.3 docker-compose.yml示例#

version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
environment:
- DATABASE_URL=mysql://user:password@db:3306/mydb
volumes:
- .:/app
networks:
- my-network
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=mydb
volumes:
- db-data:/var/lib/mysql
networks:
- my-network
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- my-network
volumes:
db-data:
networks:
my-network:

8.4 Docker Compose命令#

# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重建服务
docker-compose up -d --build
# 进入容器
docker-compose exec web bash
# 扩展服务
docker-compose up -d --scale web=3

九、Docker实战#

9.1 部署Web应用#

docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
restart: always
db:
image: postgres:14
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- postgres-data:/var/lib/postgresql/data
restart: always
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
depends_on:
- app
restart: always
volumes:
postgres-data:

9.2 部署微服务#

version: '3.8'
services:
gateway:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./gateway.conf:/etc/nginx/nginx.conf
depends_on:
- user-service
- order-service
user-service:
build: ./user-service
environment:
- DB_HOST=user-db
depends_on:
- user-db
order-service:
build: ./order-service
environment:
- DB_HOST=order-db
depends_on:
- order-db
user-db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- user-db-data:/var/lib/mysql
order-db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- order-db-data:/var/lib/mysql
volumes:
user-db-data:
order-db-data:

十、Docker安全#

10.1 安全最佳实践#

# 1. 不要以root运行容器
docker run --user 1000:1000 myapp
# 2. 只读文件系统
docker run --read-only myapp
# 3. 限制资源
docker run --memory=512m --cpus=1 myapp
# 4. 禁用特权
docker run --security-opt=no-new-privileges myapp
# 5. 使用最小基础镜像
FROM alpine:3.18

10.2 镜像安全扫描#

# 使用Trivy扫描
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image myapp:latest

十一、总结#

本章学习了:

  1. Docker基础:概念、架构、安装
  2. 镜像管理:搜索、拉取、删除、标签
  3. 容器操作:创建、启动、停止、进入、日志
  4. 数据卷:创建、使用、管理
  5. 网络管理:类型、创建、使用
  6. Dockerfile:语法、指令、多阶段构建
  7. Docker Compose:定义、命令、实战
  8. 安全:最佳实践、镜像扫描

系列总结#

恭喜你完成了Linux操作大全系列的学习!

回顾全部10章内容

  1. 基础入门:Linux概念、发行版、安装
  2. 文件操作:创建、复制、移动、删除、查找
  3. 用户权限:用户管理、组管理、权限设置
  4. 软件包管理:apt、yum、snap、源码编译
  5. 网络配置:IP配置、DNS、防火墙、SSH
  6. 进程服务:进程管理、systemd、定时任务
  7. Shell脚本:变量、流程控制、函数
  8. 磁盘存储:分区、文件系统、RAID、LVM
  9. 系统监控:监控工具、性能优化
  10. Docker容器:镜像、容器、Compose

学习建议

  • 多动手实践,不要只看不练
  • 遇到问题多查官方文档
  • 参与开源项目,积累实战经验
  • 持续学习,Linux技术在不断发展

相关资源


如有疑问或发现错误,欢迎在评论区指出!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Linux操作大全(十):Docker与容器技术详解
https://emilia520.icu/posts/linux-manual-10-docker/
作者
火花花
发布于
2026-05-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录