一、认识 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

状态显示 healthyunhealthy


十五、容器自动重启策略


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 自动部署成功!”。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐