參考地址: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
用的多了,自己就會了。這里就不記錄了!!!