Docker Compose 是 Docker 官方編排(Orchestration)項目之一,負責快速的部署分布式應用。
Compose 項目是 Docker 官方的開源項目,負責實現對 Docker 容器集群的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分類似。
Compose 定位是 「定義和運行多個 Docker 容器的應用(Defining and running multi-container Docker applications)」,其前身是開源項目 Fig。
在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: {}
說明:
docker-ce-17.09.0.ce
系統環境是linux7.x
pip install docker-compose
docker-compose --version
docker-compose version 1.21.2, build a133471
docker嵌套docker,如果是通過 pip 安裝的,則執行如下命令即可刪除。
pip uninstall docker-compose
# 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
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,格式為 YAML 格式。
Compose文件版本,詳見Compose file versions and upgrading | Docker Documentation
使用depends_on選項控制服務啟動的順序。詳見Control startup order in Compose
services:nginx:# 依賴php服務,意味著在啟動nginx之前先啟動phpdepends_on:- php
說明:
nginx服務不會等待php完全啟動之后才啟動!
指定 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
數據卷所掛載路徑設置。可以設置宿主機路徑 (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
no是默認的重新啟動策略,它不會在任何情況下重新啟動容器。當always指定時,容器總是重新啟動。
該命令對保持服務始終運行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped。
詳見restart
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped注意:使用(版本3)Compose文件在群集模式下部署堆棧時,將忽略此選項 。請改用restart_policy。
暴露端口信息。
使用宿主端口:容器端口 (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值。因此,我們建議始終將端口映射明確指定為字符串。
docker內安裝docker。配置容器連接的網絡。詳見網絡配置
創建frontend網絡
docker network create frontend
查看網絡
docker network ls
刪除網絡
docker network rm frontend
指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。
注意: 使用(版本3)Compose文件在群集模式下部署堆棧時,將忽略此選項。
詳見container_name
# 容器名稱container_name: nginx
詳見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
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
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET
覆蓋容器啟動后默認執行的命令。詳見command
command: bundle exec thin -p 3000
該命令也可以是一個列表,方式類似于 dockerfile:
command: ["bundle", "exec", "thin", "-p", "3000"]
轉載于:https://blog.51cto.com/wutengfei/2156792
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态