docker嵌套docker,Docker三劍客之Compose

 2023-10-05 阅读 30 评论 0

摘要:Docker三劍客之Compose Docker Compose 是 Docker 官方編排(Orchestration)項目之一,負責快速的部署分布式應用。 Compose 基本介紹 Compose 簡介 Compose代碼Compose 項目是 Docker 官方的開源項目,負責實現對 Docker 容器集群的快速編排。從功能

Docker三劍客之Compose

Docker Compose 是 Docker 官方編排(Orchestration)項目之一,負責快速的部署分布式應用。

Compose 基本介紹

Compose 簡介

  • Compose代碼

Compose 項目是 Docker 官方的開源項目,負責實現對 Docker 容器集群的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分類似。
Compose 定位是 「定義和運行多個 Docker 容器的應用(Defining and running multi-container Docker applications)」,其前身是開源項目 Fig。

為什么使用Compose

在Docker鏡像構成和定制介紹中,我們可以使用Dockerfile文件很方便定義一個單獨的應用容器。
然而,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 項目,除了 Web 服務容器本身,往往還需要再加上后端的數據庫服務容器,甚至還包括負載均衡容器等。
Compose 恰好滿足了這樣的需求。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。

docker-compose.yml看起來像這樣:
version: '3'
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis
volumes:logvolume01: {}

Compose 中兩個重要的概念

  • 服務 (service):一個應用的容器,實際上可以包括若干運行相同鏡像的容器實例。
  • 項目 (project):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 文件中定義。

說明:

  • Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理。
  • Compose 項目由 Python 編寫,實現上調用了 Docker 服務提供的 API 來對容器進行管理。因此,只要所操作的平臺支持 Docker API,就可以在其上利用 Compose 來進行編排管理。

Compose 安裝與卸載

Docker 版本

docker-ce-17.09.0.ce
系統環境是linux7.x

PIP 安裝

pip install docker-compose

Compose 版本

docker-compose --version
docker-compose version 1.21.2, build a133471

卸載

docker嵌套docker,如果是通過 pip 安裝的,則執行如下命令即可刪除。

pip uninstall docker-compose

實戰--使用docker-compose部署Edusoho平臺

項目目錄結構

# pwd
/root/docker-lnmp
# tree -L 3
.
├── docker-compose.yml
├── mysql
│?? ├── data
│?? └── my.cnf
├── nginx
│?? ├── conf.d
│?? │?? └── default.conf
│?? ├── Dockerfile
│?? ├── edusoho
│?? │?? ├── api
│?? │?? ├── app
│?? │?? ├── bootstrap
│?? │?? ├── plugins
│?? │?? ├── src
│?? │?? ├── vendor
│?? │?? ├── vendor_user
│?? │?? └── web
│?? ├── edusoho-8.2.38.tar.gz
│?? ├── log
│?? │?? └── error.log
│?? ├── nginx.conf
│?? ├── ssl
│?? │?? ├── nginx.key
│?? │?? └── nginx.pem
│?? └── www
│??     ├── db.php
│??     ├── index.html
│??     ├── index.php
├── php
│?? ├── Dockerfile
│?? ├── log
│?? │?? └── php-fpm.log
│?? ├── php-fpm.conf
│?? ├── php.ini
│?? └── www.conf

項目docker-compose.yml文件

version: '3'
# 定義三個服務nginx,php,mysql
services:nginx:# 依賴php服務,意味著在啟動nginx之前先啟動phpdepends_on:- php# nginx鏡像的路徑build: ./nginx# 這樣使nginx容器把網站文件和目錄存放到主機目錄中,持久化和方便管理volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/log/error.log:/var/log/nginx/error.log- ./nginx/edusoho:/usr/share/nginx/html# nginx意外退出時自動重啟restart: always# 映射80端口ports:- "80:80"# - "443:443"networks:- frontend# 容器名稱container_name: nginxphp:depends_on:- mysqlbuild: ./phpports:- "9000"networks:- frontend- backend      volumes:- ./php/php-fpm.conf:/usr/local/php/etc/php-fpm.conf- ./php/www.conf:/usr/local/php/etc/php-fpm.d/www.conf- ./php/php.ini:/usr/local/php/etc/php.ini- ./php/log/php-fpm.log:/usr/local/php/var/log/php-fpm.log- ./nginx/edusoho:/usr/share/nginx/htmlrestart: alwayscontainer_name: php# MySQLmysql:image: "dockerhub.datagrand.com/global/mysql:5.6"ports:- "3306:3306"volumes:- ./mysql/data:/var/lib/mysql- ./mysql/my.cnf:/etc/my.cnfenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresscommand: ['mysqld', '--character-set-server=utf8']networks:- backendrestart: alwayscontainer_name: mysql#Network    
networks:frontend:backend:

后臺啟動并運行所有容器

docker-compose up -d-d 在后臺運行服務容器

docker-compose.yml 文件內容說明

默認的模板文件名稱為 docker-compose.yml,格式為 YAML 格式。

version

Compose文件版本,詳見Compose file versions and upgrading | Docker Documentation

depends_on

使用depends_on選項控制服務啟動的順序。詳見Control startup order in Compose

services:nginx:# 依賴php服務,意味著在啟動nginx之前先啟動phpdepends_on:- php
說明:
nginx服務不會等待php完全啟動之后才啟動!

build

指定 Dockerfile 所在文件夾的路徑(可以是絕對路徑,或者相對 docker-compose.yml 文件的路徑)。 Compose 將會利用它自動構建這個鏡像,然后使用這個鏡像。
詳見build

# nginx鏡像的路徑build: ./nginx

docker maven,你也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定構建鏡像時的變量。

version: '3'
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1

volumes

數據卷所掛載路徑設置。可以設置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro)。
該指令中路徑支持相對路徑。詳見volumes

 volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/log/error.log:/var/log/nginx/error.log- ./nginx/edusoho:/usr/share/nginx/html

restart

no是默認的重新啟動策略,它不會在任何情況下重新啟動容器。當always指定時,容器總是重新啟動。
該命令對保持服務始終運行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped。
詳見restart

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped注意:使用(版本3)Compose文件在群集模式下部署堆棧時,將忽略此選項 。請改用restart_policy。

ports

暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者僅僅指定容器的端口(宿主將會隨機選擇端口)。
詳見ports

ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"

注意:以HOST:CONTAINER格式映射端口時,使用低于60的容器端口時可能會遇到錯誤的結果,因為YAML會將格式xx:yy中的數字解析為base-60值。因此,我們建議始終將端口映射明確指定為字符串。

networks

docker內安裝docker。配置容器連接的網絡。詳見網絡配置

創建frontend網絡
docker network create frontend
查看網絡
docker network ls
刪除網絡
docker network rm frontend

container_name

指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。
注意: 使用(版本3)Compose文件在群集模式下部署堆棧時,將忽略此選項。
詳見container_name

 # 容器名稱container_name: nginx

environment

詳見environment

  • 設置環境變量。你可以使用數組或字典兩種格式。
environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpress
或
environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpress- MYSQL_USER=wordpress- MYSQL_PASSWORD=wordpress
  • 如果變量名稱或者值中用到 true|false,yes|no 等表達 布爾 含義的詞匯,最好放到引號里,避免 YAML 自動解析某些內容為對應的布爾語義。
    這些特定詞匯,包括:
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
environment:RACK_ENV: developmentSHOW: 'true'
或
environment:- RACK_ENV=development- SHOW=true
  • 只給定名稱的變量會自動獲取運行 Compose 主機上對應變量的值,可以用來防止泄露不必要的數據。
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET

command

覆蓋容器啟動后默認執行的命令。詳見command


command: bundle exec thin -p 3000
該命令也可以是一個列表,方式類似于 dockerfile:
command: ["bundle", "exec", "thin", "-p", "3000"]

轉載于:https://blog.51cto.com/wutengfei/2156792

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/117812.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息