Docker Compose 实战
Docker Compose 一键部署多容器
Docker Compose 可以用一个 YAML 文件定义和运行多个 Docker 容器,开发环境部署特别方便。
1. 基本结构
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
2. 常用命令
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止并删除容器
docker-compose down
# 重启某个服务
docker-compose restart web
3. PHP 开发环境示例
version: '3'
services:
php:
build: .
ports:
- "8000:80"
volumes:
- ./:/var/www/html
depends_on:
- mysql
- redis
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
mysql_data:
4. 数据卷
数据卷用来持久化数据,容器删了数据还在:
volumes:
- ./data:/var/lib/mysql
5. 网络
默认同一 Compose 里的服务在同一个网络,可以直接用服务名互相访问。比如 PHP 容器里连数据库用 mysql:3306,不用写 IP。
总结
Docker Compose 适合本地开发和测试环境。生产环境部署建议用 K8s 或者更专业的编排工具。
Docker 入门:从容器到 Compose 的实战教程
前言
Docker 现在已经是后端开发的标配工具了。很多人听说过 Docker,但不知道它到底是什么、怎么用。本文用最通俗的方式,带你从零开始掌握 Docker 的核心用法。
一、Docker 是什么
简单来说,Docker 就是把你的应用和它依赖的所有东西(代码、运行时、系统库、配置文件)打包到一个"集装箱"里,然后这个集装箱可以在任何机器上运行。
和虚拟机的区别:虚拟机是模拟一整套操作系统,Docker 容器是共享宿主机的内核,所以更轻量、启动更快。
二、核心概念
- 镜像(Image):相当于模板,只读的,用来创建容器
- 容器(Container):镜像运行起来的实例,可以创建、启动、停止、删除
- Dockerfile:用来构建镜像的脚本文件
- 仓库(Registry):存放镜像的地方,比如 Docker Hub
三、常用命令
1. 镜像操作
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
2. 容器操作
# 运行容器
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 查看容器日志
docker logs my-nginx
# 进入容器内部
docker exec -it my-nginx /bin/bash
关键参数说明:
-d:后台运行-p 80:80:端口映射,宿主机端口:容器端口--name:给容器起个名字
四、Dockerfile 实战
写一个简单的 PHP 应用镜像:
# 基于 PHP 官方镜像
FROM php:7.4-fpm
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
# 安装依赖
RUN docker-php-ext-install pdo_mysql
# 暴露端口
EXPOSE 9000
# 启动命令
CMD ["php-fpm"]
构建镜像:
docker build -t my-php-app .
运行容器:
docker run -d -p 9000:9000 my-php-app
五、Docker Compose 实战
当你需要同时运行多个容器(比如 PHP + MySQL + Nginx),手动一个个启动太麻烦了。Docker Compose 就是用来编排多个容器的。
创建 docker-compose.yml 文件:
version: '3'
services:
# PHP 应用
app:
build: .
container_name: php-app
volumes:
- ./:/var/www/html
networks:
- app-network
# MySQL 数据库
db:
image: mysql:5.7
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- dbdata:/var/lib/mysql
networks:
- app-network
# Nginx 反向代理
nginx:
image: nginx:alpine
container_name: nginx-web
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- app-network
volumes:
dbdata:
networks:
app-network:
driver: bridge
启动所有服务:
docker-compose up -d
停止所有服务:
docker-compose down
六、常见问题
1. 容器启动后立刻退出
通常是因为启动命令有问题。用 docker logs 查看日志:
docker logs container_name
2. 数据持久化
容器删除后数据就没了,需要用 volumes 来持久化:
docker run -v /host/path:/container/path mysql
3. 进入容器排查问题
docker exec -it container_name /bin/bash
总结
Docker 的核心思路:
- 镜像:打包应用和依赖
- 容器:镜像的运行实例
- Dockerfile:构建镜像的脚本
- Docker Compose:多容器编排
掌握这些,你就可以用 Docker 来部署你的 Web 应用了。Docker 最大的好处就是"一次构建,到处运行",再也不会出现"我电脑上是好的"这种问题了。