1036 字
3 分钟
Linux操作大全(十):Docker与容器技术详解
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
# 安装Dockersudo apt updatesudo apt install docker-ce docker-ce-cli containerd.io
# 将当前用户加入docker组sudo usermod -aG docker $USER
# 重新登录或运行newgrp docker2.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
# 安装Dockersudo yum install docker-ce docker-ce-cli containerd.io
# 启动Dockersudo systemctl start dockersudo systemctl enable docker
# 将当前用户加入docker组sudo usermod -aG docker $USER2.3 验证安装
# 查看Docker版本docker --version
# 运行测试容器docker run hello-world三、镜像管理
3.1 搜索镜像
# 搜索镜像docker search nginx
# 指定数量docker search --limit 10 nginx
# 按星数排序docker search --filter=stars=100 nginx3.2 拉取镜像
# 拉取最新版docker pull nginx
# 指定版本docker pull nginx:1.24
# 拉取所有标签docker pull --all-tags nginx
# 从私有仓库拉取docker pull registry.example.com/myapp:v13.3 查看镜像
# 列出本地镜像docker images
# 显示所有镜像(包括中间层)docker images -a
# 只显示镜像IDdocker 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 nginx4.2 查看容器
# 查看运行中的容器docker ps
# 查看所有容器docker ps -a
# 只显示容器IDdocker 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 prune4.4 进入容器
# 进入运行中的容器(推荐)docker exec -it my-nginx /bin/bash
# 进入容器(旧方法)docker attach my-nginx
# 在容器中执行命令docker exec my-nginx ls /usr/share/nginx/html4.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-nginx4.6 容器资源限制
# 限制内存docker run -d --memory=512m nginx
# 限制CPUdocker run -d --cpus=1.5 nginx
# 限制CPU份额docker run -d --cpu-shares=512 nginx五、数据卷管理
5.1 数据卷类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Bind Mount | 绑定主机目录 | 开发环境 |
| Volume | Docker管理的数据卷 | 生产环境 |
| tmpfs | 内存中的临时文件系统 | 敏感数据 |
5.2 创建数据卷
# 创建数据卷docker volume create my-volume
# 查看数据卷docker volume ls
# 查看数据卷详情docker volume inspect my-volume
# 删除数据卷docker volume rm my-volume
# 删除所有未使用的数据卷docker volume prune5.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-network6.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 .
# 指定Dockerfiledocker 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 builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build
# 运行阶段FROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]八、Docker Compose
8.1 什么是Docker Compose?
Docker Compose是一个工具,用于定义和运行多容器Docker应用。
8.2 安装Docker Compose
# 下载Docker Composesudo 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 --version8.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应用
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.1810.2 镜像安全扫描
# 使用Trivy扫描docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy image myapp:latest十一、总结
本章学习了:
- Docker基础:概念、架构、安装
- 镜像管理:搜索、拉取、删除、标签
- 容器操作:创建、启动、停止、进入、日志
- 数据卷:创建、使用、管理
- 网络管理:类型、创建、使用
- Dockerfile:语法、指令、多阶段构建
- Docker Compose:定义、命令、实战
- 安全:最佳实践、镜像扫描
系列总结
恭喜你完成了Linux操作大全系列的学习!
回顾全部10章内容:
- 基础入门:Linux概念、发行版、安装
- 文件操作:创建、复制、移动、删除、查找
- 用户权限:用户管理、组管理、权限设置
- 软件包管理:apt、yum、snap、源码编译
- 网络配置:IP配置、DNS、防火墙、SSH
- 进程服务:进程管理、systemd、定时任务
- Shell脚本:变量、流程控制、函数
- 磁盘存储:分区、文件系统、RAID、LVM
- 系统监控:监控工具、性能优化
- Docker容器:镜像、容器、Compose
学习建议:
- 多动手实践,不要只看不练
- 遇到问题多查官方文档
- 参与开源项目,积累实战经验
- 持续学习,Linux技术在不断发展
相关资源:
如有疑问或发现错误,欢迎在评论区指出!
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Linux操作大全(十):Docker与容器技术详解
https://emilia520.icu/posts/linux-manual-10-docker/ 部分信息可能已经过时
相关文章 智能推荐
1
Linux操作大全(二):文件与目录操作详解
Linux常见操作 详细讲解Linux文件和目录的各种操作,包括创建、复制、移动、删除、查找、压缩等,每个命令都有实际示例
2
Linux操作大全(三):用户与权限管理详解
Linux常见操作 深入讲解Linux用户管理、组管理、sudo权限、PAM认证等知识,让你彻底搞懂Linux的权限体系
3
Linux操作大全(五):网络配置与管理详解
Linux常见操作 全面讲解Linux网络配置,包括IP地址、DNS、防火墙、SSH、网络诊断等知识,让你轻松管理Linux网络
4
Linux操作大全(六):进程管理与服务管理详解
Linux常见操作 全面讲解Linux进程管理、服务管理、systemd、定时任务等知识,让你轻松掌控系统运行状态
5
Linux操作大全(八):磁盘与存储管理详解
Linux常见操作 全面讲解Linux磁盘管理、文件系统、RAID、LVM等知识,让你轻松管理Linux存储








