从小白到精通——Docker容器进阶与实战全攻略
Docker 是一个用于打包、分发和运行应用程序的 容器化平台。它能让应用和依赖一起打包成一个“容器”,实现跨平台、快速部署与环境一致性。Docker 的三大核心概念:镜像(Image):应用运行的模板容器(Container):镜像运行后的实例仓库(Registry):存储与分发镜像的平台(如 Docker Hub)验证安装:查看镜像与容器:下载镜像:运行容器:进入容器:停止与删除容器:删除镜像
一、认识 Docker
Docker 是一个用于打包、分发和运行应用程序的 容器化平台。
它能让应用和依赖一起打包成一个“容器”,实现跨平台、快速部署与环境一致性。
一句话总结:Docker = 一次构建,随处运行。
Docker 的三大核心概念:
-
镜像(Image):应用运行的模板
-
容器(Container):镜像运行后的实例
-
仓库(Registry):存储与分发镜像的平台(如 Docker Hub)
二、安装 Docker
Ubuntu 系统
sudo apt update sudo apt install docker.io -y sudo systemctl enable docker sudo systemctl start docker
验证安装:
docker version docker run hello-world
CentOS 系统
sudo yum install docker -y sudo systemctl start docker sudo systemctl enable docker
三、Docker 基础命令
查看镜像与容器:
docker images docker ps docker ps -a
下载镜像:
docker pull nginx
运行容器:
docker run -d -p 8080:80 --name web nginx
进入容器:
docker exec -it web /bin/bash
停止与删除容器:
docker stop web docker rm web
删除镜像:
docker rmi nginx
四、Docker 镜像管理
查看镜像详情:
docker inspect nginx
保存镜像:
docker save nginx -o nginx.tar
加载镜像:
docker load -i nginx.tar
给镜像打标签:
docker tag nginx myrepo/nginx:1.0
推送到仓库:
docker login docker push myrepo/nginx:1.0
五、容器端口与数据卷
1. 端口映射
docker run -d -p 8080:80 nginx
访问 http://localhost:8080 即可查看。
2. 数据卷挂载
docker run -d -v /data/html:/usr/share/nginx/html nginx
主机目录 /data/html 会映射到容器内部目录。
六、自定义 Dockerfile
示例:Node.js 应用镜像
FROM node:18 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]
构建镜像:
docker build -t mynodeapp:1.0 .
运行容器:
docker run -d -p 3000:3000 mynodeapp:1.0
七、多阶段构建优化
# 构建阶段 FROM node:18 AS builder WORKDIR /app COPY . . RUN npm install && npm run build # 生产阶段 FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
减少镜像体积,提升构建速度。
八、容器网络管理
查看网络:
docker network ls
创建自定义网络:
docker network create mynet
将容器加入网络:
docker run -d --name db --network mynet mysql:8 docker run -d --name app --network mynet mynodeapp:1.0
容器可通过名称互相通信(DNS 支持)。
参考案例:www.ykekkf.cn
九、环境变量与配置
docker run -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
Dockerfile 中定义默认环境变量:
ENV PORT=8080
容器中查看变量:
echo $PORT
十、日志与监控
查看日志:
docker logs web
实时输出:
docker logs -f web
查看容器资源使用情况:
docker stats
十一、Docker Compose 多容器管理
docker-compose.yml 示例:
version: '3' services: web: image: nginx ports: - "8080:80" db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456
启动项目:
docker-compose up -d
查看服务:
docker-compose ps
停止项目:
docker-compose down
十二、Compose 环境变量与依赖
支持 .env 文件:
MYSQL_PASSWORD=secret
引用方式:
environment: - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
定义依赖关系:
depends_on: - db
十三、容器数据持久化
挂载数据卷:
volumes: db-data: services: db: image: mysql volumes: - db-data:/var/lib/mysql
查看卷:
docker volume ls
十四、容器健康检查
HEALTHCHECK CMD curl -f http://localhost:3000 || exit 1
查看健康状态:
docker ps
状态显示 healthy 或 unhealthy。
十五、容器自动重启策略
docker run -d --restart=always myapp
策略选项:
-
no:不重启(默认) -
always:总是重启 -
on-failure:失败时重启 -
unless-stopped:手动停止除外
十六、Docker 网络模式
| 模式 | 说明 |
|---|---|
| bridge | 默认模式,容器间隔离 |
| host | 与主机共享网络 |
| none | 无网络 |
| container | 共享其他容器网络 |
示例:
docker run --network host nginx
十七、镜像清理与维护
删除无用镜像与容器:
docker system prune -a
删除未使用数据卷:
docker volume prune
查看磁盘占用:
docker system df
十八、私有仓库部署
启动本地 Registry:
docker run -d -p 5000:5000 --name registry registry:2
打标签并推送:
docker tag nginx localhost:5000/nginx:v1 docker push localhost:5000/nginx:v1
从私库拉取:
docker pull localhost:5000/nginx:v1
十九、生产部署示例(Nginx + Node.js + MySQL)
docker-compose.yml
version: '3' services: db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456 volumes: - db_data:/var/lib/mysql app: build: ./app ports: - "3000:3000" depends_on: - db web: image: nginx ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - app volumes: db_data:
启动服务:
docker-compose up -d
三个容器自动协同运行:
-
MySQL 提供数据存储
-
Node.js 提供后端接口
-
Nginx 提供反向代理与前端页面
二十、完整实战项目:自动化部署平台
项目结构:
auto-deploy/ ├── Dockerfile ├── docker-compose.yml ├── app/ │ ├── server.js │ └── package.json └── nginx/ └── default.conf
server.js
const express = require('express'); const app = express(); app.get('/', (req, res) => res.send('Docker 自动部署成功!')); app.listen(3000);
Dockerfile
FROM node:18 WORKDIR /app COPY . . RUN npm install CMD ["node", "server.js"]
nginx/default.conf
server { listen 80; location / { proxy_pass http://app:3000; } }
docker-compose.yml
version: '3' services: app: build: ./app nginx: image: nginx ports: - "8080:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - app
部署:
docker-compose up -d --build
访问:
http://localhost:8080
即可看到页面输出 “Docker 自动部署成功!”。
更多推荐
所有评论(0)