1、示例
在项目目录下创建一个名为docker-compose.dev.yml的文件
version: '3.8'
services:
flask:
build:
context: .
image: flask_server:v1.0.0
ports:
- 8006:5000
volumes:
- ./:/app
container_name: first_docker_flask
restart: always
mysql_server:
image: mysql:5.7
ports:
- 3309:3306
environment:
- MYSQL_ROOT_PASSWORD=1234
volumes:
- mysql_test_data:/var/lib/mysql
- mysql_test_config:/etc/mysql
container_name: mysql_server
restart: always
volumes:
mysql_test_data:
name: 'my_mysql_test_data'
mysql_test_config:
name: 'my_mysql_test_config'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
解释:
version(版本顶级元素): compose的版本
services(服务顶级元素): 其底下的一个键代表一个服务,值代表该服务对应的配置
- build: 用于构建一个镜像,必须要有context。context含义:定义包含 Dockerfile 的目录的路径或 git 存储库的 url
- ports: 指定主机端口和容器端口的映射关系
- volums: 用于数据的持久化存储,本质上存在于宿主机上的硬盘上
对于windows:存储位置在:\\wsl$\docker-desktop-data\data\docker\volumes
对于linux:存储位置在:/var/lib/docker/volumes/
容器有两种类型的卷:
第一种: docker创建的volumn目录:容器的目录
第二种: 宿主机的目录:容器的目录
卷的意义就在于将指定容器内的某一目录持久化到卷中,这样即使删除容器,数据也不会丢失,并且可以跨容器访问
注: docker-compose在第一次创建卷的时候,如果容器的目录内是有数据的,会复制到卷的目录。如果这个卷不被删除,再次创建容器并且使用这个卷的时候,会使用该卷的内容,而不会再根据容器的目录重新复制一份到卷的目录里 - restart: 定义容器的终止策略。例如设置为always,代表每次重启docker的时候,始终都会重启该容器
- container_name: 指定容器的名字
- image: 指定容器的镜像,格式::[],如果没有build,就是拉取指定的版本的镜像,如果有build,就是构建为指定版本的镜像
- enviroment: 定义容器中设置的环境变量,如果是拉取的镜像,应该参考docker hub上的该镜像对应的环境变量进行配置
volumn(卷顶级元素): 卷是平台实现的持久数据存储
- 卷名称
- name: 为此卷设置自定义名称
注: 这边设置自定义名称只是显示的名字。在compose文件中,服务顶级元素中配置的卷名称应该对于对应这里的卷名称,而不是自定义卷名称
2、运行docker-compose,并在后台启动容器
这一步包含的内容有:构建镜像或拉取镜像、基于镜像运行容器、创建卷等等
docker-compose -f docker-compose.dev.yml up --build -d