docker-compose容器單機編排
開篇前言
隨著網站架構的升級,容器的使用也越來越頻繁,應用服務和容器之間的關系也越發的復雜。
這個就要求研發人員能更好的方法去管理數量較多的服務器,而不能手動挨個管理。
例如一個LNMP 架構,就得部署web服務器,后臺的程序,數據庫,負載均衡等等都需要統一的部署在容器中,那么這個時候就需要統一的容器編排服務,docker-compose,通過單獨的docker-compose.yml.模板文件定義一組相關聯的應用服務器。
多看看官方文檔
看看官方的資料
https://docs.docker.com/compose/compose-file/第三方的資料也可以看看
https://yeasy.gitbook.io/docker_practice/compose/
為什么要學習docker-compose
當你去運行一組應用的容器,多組的應用,里面會有很多的容器。
應用1,crm系統,lnmp、8個容器之間,都有關系,如大家都是屬于哪一個網段 192.168.15.0/24
8個容器之間的 網絡用哪一個網橋
8個容器都要暴露出哪些端口
8個容器都要定義哪些數據卷
應用2 同上,12個容器
12個容器 docker run * 12定義好yaml文件【描述好,你要的】
命令化的一個部署
docker run 運行的時候,再臨時傳入參數,
–network
-v
–link
yaml 腳本化的部署方式
ansible all -m shell -a ‘xxxx’
install-lnmp.yaml 先描述好,腳本要部署的環境
定義好yaml文件,【描述好 你要】
- 用的網橋是誰
- 存儲卷
- 容器和容器之間的依賴關系
自己寫過那些yaml腳本
- ansible playbook ,role 腳本
- docker-compose.yaml 買哦書容器部署的腳本【描述好,你要部署什么,什么鏡像,什么存儲】
- k8s的資源描述yaml【先描述好,你要部署什么,什么存儲】
總結一句話,先想好要敲什么命令,再把命令轉化成yaml的語法形式
機器上看到的一組運行的服務器
定義一組docker-compose 網站類的服務
web服務器 image : nginx
后臺運行的程序服務 images : php-centos python-centos
compose 是基于定義和運行多個容器的一個docker內置工具
compose 需要你,自己去定義yaml文件來描述多個容器之間的關系
寫好yaml之后,基于compose命令去讀取yaml內容
如何用docker-compose
1.定義好你容器的關系
nginx
php
mysql
redis
...yaml語法該怎么樣去寫,有哪些字段?該用什么語法?縮進關系是什么看看官方的資料
https://docs.docker.com/compose/compose-file/
所有的高級軟件,最精準的資料都在這里找
下一步學習k8s官方的資料,沒有這個官網完美
如何查看官網資料,理解字段如何寫
如何查閱官網的docker-compose字段
LNMP 公司php后端的員工管理系統
nginx , php , mysql 他們都走互相的主機名
–name mysql
–name my-php --link mysql
–name my-nginx --link my-php
# 比如部署wordpress 到容器里
docker run 挨個運行,每一個容器的環境# 服務1 nginx,web服務,代理服務
# 現有的宿主機nginx的運行環境,遷移到容器里面去 /etc/nginx/docker run -d --name mynginx -p 80:80\
-v /etc/nginx/:/etc/nginx \
-v /var/log/nginx:/var/log/nginx nginx:latest# 服務2 php服務,提供后端服務,wordpress , 官方鏡像,php的運行環境。# 先基于dockerfile構建鏡像,php+centos環境 , mysqldocker run -d -v 宿主機目錄:容器內的目錄 myphp
1.要清楚啟動容器的順序,------- 你寫的yaml腳本中各個服務的依賴關系
2.容器啟動的參數,如網絡,數據卷,端口暴露,這是每一個制定的服務,設置的參數。
安裝docker-compose
[root@docker-110 ~]# file /usr/bin/docker-compose
/usr/bin/docker-compose: cannot open (No such file or directory)# 有的化先刪除或者優化curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose# 看看這個命令的信息
file /usr/local/bin/docker-compose
/usr/local/bin/docker-compose: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=3507aa01d32c34dc8e8c6462b764adb90a82768d, stripped# 給他加上執行的權限
[root@docker-110 ~]# chmod +x /usr/local/bin/docker-compose
docker-compose命令整理
# 默認使用docker-compose.yml構建鏡像
$ docker-compose build
$ docker-compose build --no-cache # 不帶緩存的構建# 指定不同yml文件模板用于構建鏡像
$ docker-compose build -f docker-compose1.yml# 列出Compose文件構建的鏡像
$ docker-compose images # 啟動所有編排容器服務
$ docker-compose up -d# 查看正在運行中的容器
$ docker-compose ps # 查看所有編排容器,包括已停止的容器
$ docker-compose ps -a# 進入指定容器執行命令
$ docker-compose exec nginx bash
$ docker-compose exec web python manage.py migrate --noinput# 查看web容器的實時日志
$ docker-compose logs -f web# 停止所有up命令啟動的容器
$ docker-compose down # 停止所有up命令啟動的容器,并移除數據卷
$ docker-compose down -v# 重新啟動停止服務的容器
$ docker-compose restart web# 暫停web容器
$ docker-compose pause web# 恢復web容器
$ docker-compose unpause web# 刪除web容器,刪除前必需停止stop web容器服務
$ docker-compose rm web # 查看各個服務容器內運行的進程
$ docker-compose top # 合集命令
build
config -q
create
down
events
exec
help
images
kill
logs
pause
restart
rm
run
scale
start
stop
top
unpause
up
docker-compose語法
1.官方文檔
https://compose-spec.github.io/compose-spec/#use-cases2.菜鳥文檔3.還有一個不錯的教程,每一個參數不認識的可以來這里看看
https://yeasy.gitbook.io/docker_practice/compose/
這個網站也不錯
如何理解yaml的元素關系以及作用
不可能一上來就從頭開始寫 yaml
shell 腳本
- 多看
- 多模仿
- 熟練看懂較多的腳本后,理解大部分的字段是什么作用,縮進關系,以及改寫什么參數,以及遇見不認識的參數,從哪里找資料。
- 模仿改造為你自己的腳本,【如智能汽車運行系統】,跑起來,ubuntu里面。。
【wordpres運行系統】 - #docker-compose v3 三代版本,能用最新的字段
docker-compose.yml