在docker中,通過執(zhí)行一個YAML文件,將文件中所定義的多個容器依次啟動,這就是容器編排;實現(xiàn)容器編排的工具是“docker-compose”。YAML文件會定義一系列的容器以及容器運行時的屬性,Compose會根據(jù)這些配置來管理容器。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。
Docker容器編排
什么是容器編排
- 通過執(zhí)行一個文件,將文件中所定義的多個容器依次啟動,這就是容器編排
- 這個文件就是yaml文件
用來實現(xiàn)容器編排的工具
-
docker-compose
可以通過安裝Docker Compose工具來實現(xiàn)基于YAML文件的容器編排,YAML文件會定義一系列的容器以及容器運行時的屬性,Docker Compose會根據(jù)這些配置來管理容器。
安裝docker-compose
- docker-compose在epel源中
[root@worker1 ~]# yum install epel-release -y [root@worker1 ~]# yum install docker-compose -y
docker-compose命令的使用
-
格式:docker-compose [選項]
-
選項
- up:啟動定義在yaml文件中的容器
- down:關(guān)閉定義在yaml文件中的容器
- -f x.yaml:指定docker-compose所要讀取的yaml文件
- -d:在后臺執(zhí)行操作
- ps:查看基于docker-compose所啟動的容器的狀態(tài)
- logs:查收啟動容器過程中的日志信息,用于排除錯誤
案例:
編寫docker-compose.yaml文件來啟動兩個容器:nginx,php
1)準(zhǔn)備環(huán)境
- 安裝epel
- 安裝docker-compose
- 重啟docker
- 重啟防火墻
[root@master ~]# yum install docker -y [root@master ~]# yum install epel-release -y [root@master ~]# yum install docker-compose -y [root@master ~]# systemctl restart docker [root@master ~]# systemctl restart firewalld
2)創(chuàng)建yaml文件
# 編寫yam文件,在文件實現(xiàn)自動啟動nginx容器 [root@worker1 ~]# vim docker-compose.yaml
version: '2' services: web: image: nginx:1.17.10 ports: - 80:80 volumes: - /opt/html:/web - /opt/conf/nginx.conf:/etc/nginx/nginx.conf
- version:指定版本號,2
- services:設(shè)置要啟動服務(wù),一個服務(wù)就是一個docker容器
2)nginx 啟動容器
[root@worker1 ~]# docker-compose up -d
查看基于yaml文件啟動的容器的狀態(tài)
[root@master ~]# docker-compose ps Name Command State Ports -------------------------------------------------------------- root_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
- 狀態(tài)主要是是state:如果是UP,表示正常
查看啟動容器過程中的日志信息
[root@worker1 ~]# docker-compose logs
關(guān)閉基于yaml文件所啟動的容器
[root@worker1 ~]# docker-compose down
3)在第二步的基礎(chǔ)上編輯yaml文件,啟動php服務(wù)
第一步:修改yaml文件
version: '2'services: web: image: nginx ports: - 80:80 volumes: - /opt/html:/web - /opt/conf/nginx.conf:/etc/nginx/nginx.conf links: # 指定php容器的名稱 - php php: # 此處需要和links中的值保持一致 image: php:5.6-fpm container_name: php # 此處需要和links中的值保持一致 volumes: - /opt/php:/php
第二步:修改nginx的配置文件
[root@master ~]# vi /opt/conf/nginx.conf location ~ .php$ { root /php; fastcgi_pass php:9000; # 指定php容器名稱,docker會自動將名稱轉(zhuǎn)換成ip fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
第三步:啟動服務(wù)
[root@master ~]# docker-compose up -d [root@master ~]# docker-compose ps Name Command State Ports ----------------------------------------------------------------------- php docker-php-entrypoint php-fpm Up 9000/tcp root_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
容器編排應(yīng)用題1
1 準(zhǔn)備一臺Centos7的服務(wù)器,檢測網(wǎng)絡(luò)正常
- 略
2 檢查服務(wù)器docker運行是否正常,如沒有請安裝
- 略
3 請編寫wordpress.yml模板文件,格式正確
4 請新建服務(wù)mysql和wordpress,wordpress的啟動依賴于mysql服務(wù)
5 將/opt/wordpress/data目錄掛載到到mysql容器的/var/lib/mysql目錄下,做持久存儲!
6 MySQL初始信息包括:root密碼,創(chuàng)建的數(shù)據(jù)庫,普通用戶,普通用戶的密碼
7 wordpress數(shù)據(jù)庫配置正確
8 wordpress做端口映射,將wordprss的80端口映射在宿主機的8000端口上
# 這個yaml文件要啟動兩個容器 version: '2' services: # 第一個容器:wordpress容器 wordpress: # 指定鏡像名稱 image: wordpress # 將容器的80端口映射到宿主機的8000 ports: - 8000:80 # 設(shè)置將mysql容器的名稱解析程序mysql容器的IP links: - mysql # 設(shè)置容器之間依賴關(guān)系,設(shè)置成必須先啟動mysql容器才啟動wordpress容器 depends_on: - mysql # 第二個容器:MySQL容器 mysql: # 指定鏡像名名稱是mysql image: mysql:5.6 # 設(shè)置容器的名稱的是mysql container_name: mysql # 設(shè)置邏輯卷掛載 volumes: - /opt/wordpress/data:/var/lib/mysql # 設(shè)置mysql容器的環(huán)境變量 environment: # 設(shè)置mysql容器中mysql的root密碼為123 MYSQL_ROOT_PASSWORD: 123 # 為wordpress創(chuàng)建一個數(shù)據(jù)庫,庫名是wordpress MYSQL_DATABASE: wp # 創(chuàng)建一個普通用戶wp MYSQL_USER: wp # 為上面的普通用戶設(shè)置密碼是wp MYSQL_PASSWORD: wp
9 docker-compose成功啟動各個容器,成功訪問到wordpress頁面
[root@master ~]# docker-compose up -d [root@master ~]# docker ps
- 瀏覽器訪問:http://ip:8000
推薦學(xué)習(xí):《docker視頻教程》