参考地址:https://blog.csdn.net/Kiloveyousmile/article/details/79830810

参考地址:https://docs.docker.com/compose/networking/#configure-the-default-network

参考地址:https://www.imooc.com/article/34135

参考地址:https://www.jianshu.com/p/2217cfed29d7

====================================================

一.docker-compose.yml属性详解

  1.使用注意

  2.属性详解

  3.1 compose格式对应docker引擎版本

  3.2 关于容器时区设置和mysql数据库自己的时区设置

二.docker-compose 命令详解

====================================================

 

 

一.docker-compose.yml属性详解

docker-compose.yml文本内容如下:

version : '3'

services:

swapping:

container_name: swapping-compose

build:

context: .

dockerfile: Dockerfile-swapping

ports:

- "9666:9666"

volumes:

- .:/vol/development

depends_on:

- mysql

links:

- "mysql:mysql"

restart: always

networks:

- my-network

environment:

- TZ=Asia/Shanghai

mysql:

container_name: mysql-compose

image: mysql:5.7

ports:

- "33061:3306"

command: [

'--character-set-server=utf8mb4',

'--collation-server=utf8mb4_unicode_ci',

'--default-time-zone=+8:00'

]

environment:

MYSQL_DATABASE: swapping

MYSQL_ROOT_PASSWORD: 398023

MYSQL_ROOT_HOST: '%'

restart: always

networks:

- my-network

networks:

my-network:

 

使用注意:

  1.docker-compose.yml[或者docker-compose.yaml]文件

  2.构建服务的镜像需要的Dockerfile文件

  3.构建服务需要的jar包

需要尽量放在同一个目录下!!

 

 

详细解释:

 

version : '3' #docker引擎对应所支持的docker-compose文本格式

services: #本工程的服务配置列表

swapping: #spring boot的服务名,服务名自定义

container_name: swapping-compose

#本spring boot服务之后启动的容器实例的名字,如果指定,按照这个命名容器,如果未指定,容器命名规则是

#【[compose文件所在目录]_[服务名]_1】,例如【swappingdockercompose_swapping_1】            #如果多启动,也就是docker-compose scale swapping=3 mysql=2的话,就不需要指定容器名称,否则会报错 容器名重复存在的问题

build: #基于Dockerfile文件构建镜像时使用的属性

context: . #代表当前目录,也可以指定绝对路径[/path/test/Dockerfile]或相对路径[../test/Dockerfile],尽量放在当前目录,便于管理

dockerfile: Dockerfile-swapping #指定Dockerfile文件名。如果context指定了文件名,这里就不用本属性了

ports: #影射端口属性

- "9666:9666" #建议使用字符串格式,指定宿主机端口映射到本容器的端口

volumes: #挂载属性

- .:/vol/development

#挂载路径在compose配置文件中只能指定容器内的目录,而docker run命令可以指定[宿主机目录:容器内目录]的挂载方式。可以使用:ro对容器内目录设置只读,来保护宿主机的文件系统

depends_on: #本服务启动,需要依赖哪些别的服务 例如这里;mysql服务就会先于swapping服务启动。至于配置多个的话,depends_on内的多个依赖的启动先后顺序未测试过

- mysql

links: #与depends_on相对应,上面控制启动顺序,这个控制容器连接问题。

- "mysql:mysql" #值可以是- mysql[- 服务名],也可以是- "mysql:mysql"[- "服务名:别名"]

restart: always #是否随docker服务启动重启

networks: #加入指定网络

- my-network #自定义的网络名

environment: #environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中,类似 docker run -e 的效果。设置容器的环境变量

- TZ=Asia/Shanghai #这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的 时区问题!!!!解决了容器的时区问题!!!

mysql: #服务名叫mysql,自定义

container_name: mysql-compose #容器名

image: mysql:5.7 #虽然没有使用build,但使用了image,指定基于mysql:5.7镜像为基础镜像来构建镜像。【使用build基于Dockerfile文件构建,Dockerfile文件中也有FROM基于基础镜像】

ports:

- "33061:3306"

command: [ #使用 command 可以覆盖容器启动后默认执行的命令

'--character-set-server=utf8mb4', #设置数据库表的数据集

'--collation-server=utf8mb4_unicode_ci', #设置数据库表的数据集

'--default-time-zone=+8:00' #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!!

]

environment:

MYSQL_DATABASE: swapping #设置初始的数据库名

MYSQL_ROOT_PASSWORD: 398023 #设置root连接密码

MYSQL_ROOT_HOST: '%'

restart: always

networks:

- my-network

networks: #关于compose中的networks的详细使用https://blog.csdn.net/Kiloveyousmile/article/details/79830810

my-network: #自定义的网络,会在第一次构建时候创建自定义网络,默认是bridge

 

 

1.compose格式对应docker引擎版本

官方地址:【https://docs.docker.com/compose/compose-file/#compose-and-docker-compatibility-matrix】

查看docker版本信息命令

 

2.关于容器时区设置和mysql数据库自己的时区设置

设置容器的时区,需要添加

environment:

- TZ=Asia/Shanghai

 

而数据库的时区设置【和编码设置】就可以,当然也可以在mysql服务既设置容器时区,又设置数据库时区。不冲突。

command: [

'--character-set-server=utf8mb4',

'--collation-server=utf8mb4_unicode_ci',

'--default-time-zone=+8:00'

]

 

 

二.docker-compose命令详解

 请直接参考:https://www.imooc.com/article/34135

 

用的多了,自己就会了。这里就不记录了!!!

 

查看原文