推荐答案
// www.javascriptcn.com code example
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- my_network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydb
volumes:
- ./data:/var/lib/mysql
networks:
- my_network
networks:
my_network:
driver: bridge本题详细解读
1. version: '3.8'
- 指定了
docker-compose.yml 文件的版本。3.8 是 Docker Compose 的一个较新版本,支持大多数现代 Docker 功能。
2. services
services 部分定义了要运行的服务。每个服务对应一个容器。
2.1 web 服务
image: nginx:latest:指定了使用的镜像为 nginx:latest,即最新版本的 Nginx。
ports: - "80:80":将主机的 80 端口映射到容器的 80 端口,使得可以通过主机的 80 端口访问 Nginx。
volumes: - ./html:/usr/share/nginx/html:将主机当前目录下的 html 文件夹挂载到容器的 /usr/share/nginx/html 目录,用于存放 Nginx 的静态文件。
networks: - my_network:将 web 服务连接到 my_network 网络。
2.2 db 服务
image: mysql:5.7:指定了使用的镜像为 mysql:5.7,即 MySQL 5.7 版本。
environment:设置了环境变量,MYSQL_ROOT_PASSWORD 是 MySQL 的 root 用户密码,MYSQL_DATABASE 是创建的数据库名称。
volumes: - ./data:/var/lib/mysql:将主机当前目录下的 data 文件夹挂载到容器的 /var/lib/mysql 目录,用于持久化 MySQL 数据。
networks: - my_network:将 db 服务连接到 my_network 网络。
3. networks
my_network:定义了一个名为 my_network 的网络,使用 bridge 驱动。bridge 是 Docker 默认的网络驱动,适用于单主机环境。
4. 总结
- 这个
docker-compose.yml 文件定义了两个服务:web 和 db,分别运行 Nginx 和 MySQL 容器。它们通过 my_network 网络进行通信,并且使用了卷来持久化数据和静态文件。