一、YAML 文件格式及編寫(xiě)注意事項(xiàng)(重要)
1.1 簡(jiǎn)介
YAML 是一種標(biāo)記語(yǔ)言,它可以很直觀的展示數(shù)據(jù)序列化格式,可讀性高。
類(lèi)似于 json 數(shù)據(jù)描述語(yǔ)言,語(yǔ)法比 json 簡(jiǎn)單的很多。
YAML 數(shù)據(jù)結(jié)構(gòu)通過(guò)縮進(jìn)來(lái)表示,連續(xù)的項(xiàng)目通過(guò)減號(hào)來(lái)表示,鍵值對(duì)用冒號(hào)分隔,數(shù)組用中括號(hào) [] 括起來(lái), hash 用花括號(hào) {} 括起來(lái)。
1.2 yaml語(yǔ)法特性
語(yǔ)法特點(diǎn)
- 區(qū)分大小寫(xiě)
- 通過(guò)空格縮進(jìn)表示層級(jí)關(guān)系
- 禁止使用tab縮進(jìn),只能使用空格鍵
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)左對(duì)齊
- 使用#表示注釋
數(shù)據(jù)結(jié)構(gòu)
- 對(duì)象: 鍵值對(duì)的字典
- 數(shù)組: 一組按次序排列的列表
- 純量: 單個(gè)的且不可再分的值
# 純量
hello
# 數(shù)組
- Cat
- Dog
- Goldfish
# 對(duì)象
animal: pets
引號(hào)區(qū)別
- 單引號(hào)(‘’): 特殊字符作為普通字符串處理
- 雙引號(hào)(“”): 特殊字符作為本身想表示的意思
# 單引號(hào)
name: 'Hi,\nTom'
# 雙引號(hào)
name: "Hi,\nTom"
內(nèi)置類(lèi)型列表
# YAML允許使用個(gè)感嘆號(hào)(!)強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類(lèi)型
# 單嘆號(hào)通常是自定義類(lèi)型,雙嘆號(hào)是內(nèi)置類(lèi)型
money: !!str
123
date: !Boolean
true
對(duì)應(yīng)編號(hào) | 內(nèi)置類(lèi)型 | 解釋說(shuō)明 |
---|---|---|
1 | !!int |
整數(shù)類(lèi)型 |
2 | !!float |
浮點(diǎn)類(lèi)型 |
3 | !!bool |
布爾類(lèi)型 |
4 | !!str |
字符串類(lèi)型 |
5 | !!null |
空值 |
6 | !!set |
集合 |
7 | !!seq |
列表 |
8 | !!map |
鍵值表 |
9 | !!binary |
字符串類(lèi)型 |
10 | !!timestamp |
日期時(shí)間類(lèi)型 |
11 |
!!omap /!!pairs
|
鍵值列表 |
1.3 yaml文件格式
文件名格式以 .yml
或者.yaml
為后綴,用 空格縮進(jìn)表示字段的層級(jí)關(guān)系,可讀性高,易于人類(lèi)管理。
一個(gè)字段key有多個(gè)值的表達(dá)式
橫向?qū)懛ǎ?test: ["test1", "test2", "test3"]
縱向?qū)懛ǎ?ntest:
- "test1"
- "test2"
- "test3"
#多級(jí)字段的格式
頂級(jí)/一級(jí)字段:
二級(jí)字段1: ["值1", "值2"]
二級(jí)字段2:
三級(jí)字段: 值 對(duì)象object類(lèi)型
value: value: 相當(dāng)于echo helloworld!
hello
world!
value: | value: 相當(dāng)于echo -e "hello\nworld!"
hello
world!
value: |- value: 相當(dāng)于echo -n helloworld!
hello
world!
value: |+ value: 相當(dāng)于echo -e "hello\nworld!\n"
hello
world!
value: > value: 相當(dāng)于echo "hello world!"
hello
world!
name: &a zhangsan 相當(dāng)于 a=yaml
book: *a 相當(dāng)于 echo $a , book: zhangsan
1.4 json格式簡(jiǎn)介
json格式:文件名格式以 .json 為后綴,用 {} 表示字段的層級(jí)關(guān)系,程序接口解析效率高。
{ "字段": "值"}
{ "debug": true } 布爾值類(lèi)型
{ "ylc": "dashuaige" } 字符串類(lèi)型
{
"ky31": ["ylc", "shellking", "caoye"],
"ky32": ["zhangsan",
"lisi",
"wangwu"]
}
{
"websites": { 一級(jí)字段
"memory": "512M", 二級(jí)字段
"disk": "100G",
"cpu": { 三級(jí)字段
"name": ["inter", "amd"]
}
}
}
二、Docker-compose
2.1 簡(jiǎn)介
docker-compose 是實(shí)現(xiàn)在單機(jī)上對(duì)容器集群編排管理的工具。
docker-compose是基于python開(kāi)發(fā)的,能運(yùn)行docker的平臺(tái),都能用docker-compose編排管理容器。
本質(zhì)就是在yaml格式的docker-compose配置模板文件里定義多個(gè)容器的啟動(dòng)參數(shù)和依賴(lài)關(guān)系,并使用docker-compose根據(jù)這個(gè)模板文件的配置啟動(dòng)和管理容器集群。
Dockerfile 文件 --> docker build 一個(gè)個(gè)構(gòu)建鏡像 --> docker run 一個(gè)個(gè)創(chuàng)建并啟動(dòng)容器
Dockerfile 文件 --> docker-compose 自動(dòng)完成所有的鏡像的構(gòu)建和容器的創(chuàng)建、啟動(dòng)
2.2 docker-compose的三大概念
項(xiàng)目project -> 包含一個(gè)或多個(gè)服務(wù)service -> 包含一個(gè)或多個(gè)容器的鏡像、映射端口、環(huán)境變量等啟動(dòng)參數(shù)
1)默認(rèn)使用項(xiàng)目的目錄名做project項(xiàng)目名,支持使用 -p
或 --project-name
來(lái)指定項(xiàng)目名;
2)在項(xiàng)目目錄里要包含一個(gè) docker-compose 配置模板文件,默認(rèn)為 docker-compose.yml
,支持使用 -f
或 --file
來(lái)指定項(xiàng)目的配置模板文件;
3)在配置模板文件里要包含一個(gè)或者多個(gè)服務(wù),每個(gè)服務(wù)包含啟動(dòng)容器的名稱(chēng)、鏡像、映射端口、環(huán)境變量、掛載點(diǎn)、網(wǎng)絡(luò)模式、依賴(lài)關(guān)系等容器啟動(dòng)的配置參數(shù)。
2.3 docker-compose配置模板文件常用的字段
字段 | 用法 | 描述 |
---|---|---|
image | 現(xiàn)成的鏡像:標(biāo)簽 | 指定鏡像 |
build | 指定 Dockerfile 文件名 | |
command | 容器啟動(dòng)命令 | 執(zhí)行命令,覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令 |
container_name | –name | 指定容器名稱(chēng),由于容器名稱(chēng)是唯一的,如果指定自定義名稱(chēng),則無(wú)法scale指定容器數(shù)量 |
environment | -e,-env | 添加環(huán)境變量 |
networks | –net,–network | 加入網(wǎng)絡(luò),引用頂級(jí)networks下條目 |
ports | -p | 暴露容器端口,與 -p 相同,但端口不能低于 60 |
volumes | -v | 掛載一個(gè)宿主機(jī)目錄或命令卷到容器,命名卷要在頂級(jí) volumes 定義卷名稱(chēng) |
volumes_from | –volumes-from,僅版本2支持,版本3 ,使用頂級(jí)卷進(jìn)行共享 | 從另一個(gè)服務(wù)或容器掛載卷,可選參數(shù) :ro 和 :rw |
hostname | -h,–hostname | 容器主機(jī)名 |
sysctls | –sysctl | 在容器內(nèi)設(shè)置內(nèi)核參數(shù) |
links | –link | 連接到另外一個(gè)容器,- 服務(wù)名稱(chēng)[:服務(wù)別名] |
privileged | –privileged | 用來(lái)給容器root權(quán)限,注意是不安全的,true | false |
restart | –restart | 重啟策略 |
depends_on | 定義服務(wù)之間依賴(lài)關(guān)系 |
depends_on:
- php
- nginx
2.4 docker-compose 常用命令
docker-compose -f docker-compose.yml <command> -d
-f, --file FILE :使用特定的 compose 模板文件,默認(rèn)為 docker-compose.yml
-p, --project-name NAME :指定項(xiàng)目名稱(chēng),默認(rèn)使用目錄名稱(chēng)
-d :在后臺(tái)運(yùn)行
command | 功能 |
---|---|
build | 重新構(gòu)建服務(wù) |
ps | 列出容器 |
up | 創(chuàng)建和啟動(dòng)容器 |
exec | 在容器里面執(zhí)行命令 |
scale | 指定一個(gè)服務(wù)容器啟動(dòng)數(shù)量 |
top | 顯示容器進(jìn)程 |
logs | 查看容器輸出 |
down | 刪除容器、網(wǎng)絡(luò)、數(shù)據(jù)卷和鏡像 |
stop/start/restart | 停止/啟動(dòng)/重啟容器 |
三、部署docker-compose
3.1 安裝docker-compose
#下載
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
3.2 創(chuàng)建工作目錄,編寫(xiě)相關(guān)Dockerfile文件
1.創(chuàng)建工作目錄
mkdir /opt/compose_lnmp
cd /opt/compose_lnmp
mkdir nginx mysql php
2.編寫(xiě)創(chuàng)建nginx、mysql、php的鏡像的Dockerfile文件
詳見(jiàn)我的上一篇博客 【Dockerfile鏡像實(shí)戰(zhàn)】構(gòu)建LNMP環(huán)境并運(yùn)行Wordpress網(wǎng)站平臺(tái)
3.3 編寫(xiě)配置文件docker-compose.yml
編寫(xiě)配置文件docker-compose.yml
使用現(xiàn)有的鏡像創(chuàng)建容器(本地/倉(cāng)庫(kù)) images: name:tag
或者現(xiàn)場(chǎng)構(gòu)建,基于Dockerfile
相對(duì)于配置模板所在的目錄
cd /opt/compose_lnmp
#本次nginx使用現(xiàn)場(chǎng)構(gòu)建,php和mysql使用本地鏡像
vim docker-compose.yml
version: '3'
services:
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/html/:/usr/local/nginx/html/
- ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf
networks:
lnmp:
ipv4_address: 172.18.0.10
mysql:
image: mysql:lnmp
container_name: mysql
privileged: true
volumes:
- db-dir:/usr/local/mysql/
networks:
lnmp:
ipv4_address: 172.18.0.20
php:
image: php:lnmp
container_name: php
ports:
- 9000:9000
volumes:
- db-dir:/usr/local/mysql/
- ./nginx/html/:/usr/local/nginx/html/
networks:
lnmp:
ipv4_address: 172.18.0.30
depends_on:
- nginx
- mysql
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
volumes:
db-dir:
3.4 根據(jù)配置文件創(chuàng)建和啟動(dòng)容器
docker-compose -f docker-compose.yml up -d
3.5 登錄容器,進(jìn)行相關(guān)操作
登錄到Mysql容器
docker exec -it mysql /bin/bash -c "mysql"
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
flush privileges;
登錄到nginx容器
docker exec -it nginx /bin/bash
cd /usr/local/nginx
#修改html目錄的屬主
chown nginx html
3.6 訪問(wèn)宿主機(jī)IP,安裝Wordpress
瀏覽器訪問(wèn)
http://192.168.2.106/wordpress/index.php
密碼:M4VysV#@3b^DLa5kU$文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-768778.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-768778.html
到了這里,關(guān)于【Docker從入門(mén)到入土 5】 使用Docker-compose一鍵部署Wordpress平臺(tái)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!