日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Docker Compose多容器部署的實(shí)現(xiàn)

瀏覽:49日期:2024-11-18 09:47:05
一、wordpress部署

這里先以wordpress的部署為例引出Docker Compose,wordpress的部署需要wordpress和mysql的鏡像:

(一)準(zhǔn)備環(huán)境

1、拉取wordpress鏡像

[root@docker-node1 /]# docker pull wordpress

2、拉取mysql鏡像

[root@docker-node1 /]# docker pull mysql

3、鏡像列表

[root@docker-node1 /]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEwordpress latest 0947f14b932b 25 hours ago 540MBmysql latest 791b6e40940c 43 hours ago 465MB(二)運(yùn)行鏡像

1、運(yùn)行mysql鏡像

root@docker-node1 /]# docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysqlb6e7a57a5fcec79f436d3f65240adf833340b4a9640e3b4f9282870078fb8e57

上述命令中 -v指定存儲卷,MYSQL_ROOT_PASSWORD設(shè)置數(shù)據(jù)庫密碼,MYSQL_DATABASE指定創(chuàng)建數(shù)據(jù)庫的名稱,詳情參考:https://hub.docker.com/_/mysql

查看啟動的容器:

[root@docker-node1 /]# docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESb6e7a57a5fce mysql'docker-entrypoint.s…' 6 minutes ago Up 6 minutes 3306/tcp, 33060/tcp mysql

2、啟動wordpress鏡像

[root@docker-node1 /]# docker run --name wordpress -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 -d wordpress6cf0c0fc2ef332728a3ea2bf2dbee65299441b26751d5c64f0a66b329f2679f6

上述命令中WORDPRESS_DB_HOST是需要連接的數(shù)據(jù)庫,指定的就是剛剛創(chuàng)建的mysql容器,這里沒有輸入WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD的密碼等環(huán)境信息,因?yàn)槟J(rèn)的就是mysql容器的用戶名、密碼,詳情查看:https://hub.docker.com/_/wordpress。

然后查看容器信息:

[root@docker-node1 /]# docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMES6cf0c0fc2ef3 wordpress 'docker-entrypoint.s…' 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp wordpressb6e7a57a5fce mysql'docker-entrypoint.s…' 20 minutes ago Up 20 minutes 3306/tcp, 33060/tcp mysql

目前兩個容器都已經(jīng)起來了,最后可以訪問主機(jī)的8080端口即可。

二、Docker Compose

從上面的部署上可以看出存在以下問題:

需要單獨(dú)拉取多個容器,一個個的部署 需要同時管理多個容器(包括啟動、停止等動作)

那么有沒有一種類似批處理的方式,不需要這么繁瑣的過程呢?這就需要Docker Compose了。

(一)Docker Compose簡介

1、什么是Docker Compose?

Docker Compose是一個工具

這個工具可以通過yml文件來定義多容器的應(yīng)用

通過一條命令就可以根據(jù)yml文件的定義去創(chuàng)建、管理多個容器

2、docker-compose.yml文件

Docker Compose中很重要的就是docker-compose.yml文件,這個文件包含了三個很重要的概念,分別是services、networks以及volumes。

services

一個service就是一個container,這個container可以從dockerhub的image來,也可以從本地的Dockerfile創(chuàng)建的image來;service的啟動類似于docker run,當(dāng)我們在使用docker run 是可以給其指定參數(shù)network和volume,同理也可以給service指定network和volume。

例如:

services: db: image:postgres:9.4 volumes: -'db-data:/var/lib/postgresql/data' networks: -back-tier

上面這個yml文件中定義了一個service,其實(shí)就相當(dāng)于下面這條命令:

docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4

networks

networks: back-tier: driver:bridge

上面這個yml文件中定義了一個network,其實(shí)就相當(dāng)于下面這條命令:

docker network create -d bridge back-tier

volumes

volumes: db-data:

上面這個yml文件中定義了一個volume,其實(shí)就相當(dāng)于下面這條命令:

docker volume create db-data(二)Docker Compose環(huán)境準(zhǔn)備

Docker Cmpose是一個工具,所以是需要安裝的,安裝詳情參考:https://docs.docker.com/compose/install/。

1、下載可執(zhí)行文件

sudo curl -L 'https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose

2、設(shè)置權(quán)限

sudo chmod +x /usr/local/bin/docker-compose

3、查看版本

[root@docker-node1 ~]# docker-compose --versiondocker-compose version 1.24.1, build 4667896

4、docker-compose中的常用命令

[root@docker-node1 compose-wordpress]# docker-compose --helpDefine and run multi-container applications with Docker.Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--helpOptions: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) --verbose Show more output --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi Do not print ANSI control characters -v, --versionPrint version and exit -H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don’t check the daemon’s hostname against the name specified in the client certificate --project-directory PATH Specify an alternate working directory (default: the path of the Compose file) --compatibility If set, Compose will attempt to convert keys in v3 files to their non-Swarm equivalentCommands: build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the Compose file create Create services downStop and remove containers, networks, images, and volumes events Receive real time events from containers execExecute a command in a running container helpGet help on a command images List images killKill containers logsView output from containers pause Pause services portPrint the public port for a port binding ps List containers pullPull service images pushPush service images restart Restart services rm Remove stopped containers runRun a one-off command scale Set number of containers for a service start Start services stopStop services topDisplay the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information

docker-compose up

用于啟動service創(chuàng)建容器,執(zhí)行yml文件

docker-compose -d

后臺執(zhí)行容器服務(wù)

docker-compose ps

顯示正在運(yùn)行的容器

docker-compose stop

停止正在運(yùn)行的容器服務(wù)

docker-compose down

停止容器服務(wù),并且移除容器(container)、鏡像(image)、網(wǎng)絡(luò)(network)以及存儲卷(volume)

docker-compose images

顯示通過docker-compose up創(chuàng)建的容器服務(wù)的鏡像列表

docker-compose exec container(Names) bash

進(jìn)入某個容器,可以在容器內(nèi)部進(jìn)行操作

(三)Docker Compose實(shí)戰(zhàn)

1、wordpress

編寫docker-compose.yml文件

version: ’3’ #docker-compose.yml版本services: #定義多個容器服務(wù) wordpress: #wordpress容器名稱 image: wordpress #鏡像來源 ports: #端口映射 - 8080:80 environment: #環(huán)境變量 WORDPRESS_DB_HOST: mysql #連接的數(shù)據(jù)庫,就是下面mysql容器的名稱 WORDPRESS_DB_PASSWORD: root #數(shù)據(jù)庫密碼 networks: #使用的網(wǎng)絡(luò),是下面networks中定義的my-bridge - my-bridge mysql: #mysql容器名稱 image: mysql #mysql鏡像 command: --default-authentication-plugin=mysql_native_password #解決數(shù)據(jù)庫密碼加密問題 environment: #環(huán)境變量 MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: #定義存儲卷,就是下面volumes中定義的 - mysql-data:/var/lib/mysql networks: - my-bridgevolumes: mysql-data:networks: my-bridge: driver: bridge

啟動services中的容器

[root@docker-node1 compose-wordpress]# lsdocker-compose.yml[root@docker-node1 compose-wordpress]# docker-compose up

通過docker-compose up啟動容器,這個命令默認(rèn)執(zhí)行的就是當(dāng)前目錄下的docker-compose.yml文件,你也可以將這個命令寫完整就是docker-compose -f docker-compose.yml up

2、Flask Web

新建app.py docker-compose.yml Dockerfile三個文件

[root@docker-node1 compose-flask]# lsapp.py docker-compose.yml Dockerfile

編寫app.py文件

from flask import Flaskfrom redis import Redisimport osapp = Flask(__name__)redis = Redis(host=os.environ.get(’REDIS_HOST’),port=6379)@app.route(’/’)def hello(): return ’Hello World’if __name__ == '__main__': app.run(host='0.0.0.0',port=5000,debug=True)

編寫Dockerfile文件

FROM python:2.7COPY . /app/WORKDIR /app/RUN pip install flask redisEXPOSE 5000CMD ['python','app.py']

編寫docker-compose.yml文件

version: '3'services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: - 8080:5000 environment: REDIS_HOST: redis

啟動容器服務(wù)

[root@docker-node1 compose-flask]# docker-compose up

訪問服務(wù)

Docker Compose多容器部署的實(shí)現(xiàn)

(四)水平擴(kuò)展和負(fù)載均衡

1、scale

在上面通過Docker Compose完成了flask的應(yīng)用部署,目前運(yùn)行的容器:

[root@docker-node1 compose-flask]# docker-compose ps Name CommandState Ports ---------------------------------------------------------------------------------------compose-flask_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp compose-flask_web_1 python app.py Up 0.0.0.0:8080->5000/tcp

通過docker-compose --help命令,可以看到有一個scale參數(shù):

[root@docker-node1 compose-flask]# docker-compose --help scale Set number of containers for a service

它的意思就是可以啟用多個應(yīng)用容器:

[root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d

但是顯然這樣會出錯,為什么呢?因?yàn)槿齻€容器端口映射都是一樣的,必然剩下的兩個應(yīng)用容器會報端口占用的錯誤。此時需要修改一下docker-compose.yml文件將web應(yīng)用的端口那一項(xiàng)配置去掉:

version: '3'services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: #去掉這一項(xiàng) - 8080:5000 environment: REDIS_HOST: redis

這樣就可以了。

[root@docker-node1 compose-flask]# docker-compose up --scale web=3 -dRecreating compose-flask_web_1 ... Recreating compose-flask_web_1 ... doneRecreating compose-flask_web_2 ... doneRecreating compose-flask_web_3 ... done

查看容器:

[root@docker-node1 compose-flask]# docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESd0ae3307eb9e compose-flask_web 'python app.py' 51 seconds ago Up 46 seconds 5000/tcp compose-flask_web_167483b8decd3 compose-flask_web 'python app.py' 52 seconds ago Up 47 seconds 5000/tcp compose-flask_web_2741766d49902 compose-flask_web 'python app.py' 52 seconds ago Up 47 seconds 5000/tcp compose-flask_web_3be3800004658 redis'docker-entrypoint.s…' 5 hours ago Up 6 minutes 6379/tcp compose-flask_redis_1

但是顯然這樣只能在容器內(nèi)去訪問,因?yàn)槎丝跊]有映射出來,那么這樣接下來怎么做呢?

Docker Compose多容器部署的實(shí)現(xiàn)

我們接下來可以這樣做,用一個HAProxy的容器來接收請求,然后通過端口轉(zhuǎn)發(fā)給不同的web服務(wù)器,這樣就解決以下問題:

外界不能訪問,只能容器內(nèi)訪問 負(fù)載均衡

2、水平擴(kuò)展和負(fù)載均衡

文件結(jié)構(gòu)

[root@docker-node1 compose-flask]# lsapp.py docker-compose.yml Dockerfile

編寫app.py

from flask import Flaskfrom redis import Redisimport osapp = Flask(__name__)redis = Redis(host=os.environ.get(’REDIS_HOST’),port=6379)@app.route(’/’)def hello(): return ’Hello World’if __name__ == '__main__': app.run(host='0.0.0.0',port=80,debug=True)

編寫Dockerfile文件

FROM python:2.7COPY . /app/WORKDIR /app/RUN pip install flask redisEXPOSE 80CMD ['python','app.py']

編寫docker-compose.yml文件

version: '3'services: redis: image: redis web: build: context: . dockerfile: Dockerfile environment: REDIS_HOST: redis lb: image: dockercloud/haproxy links: - web ports: - 8080:80 volumes: - /var/run/docker.sock:/var/run/docker.sock

運(yùn)行

[root@docker-node1 compose-flask]# docker-compose up -dCreating network 'compose-flask_default' with the default driverCreating compose-flask_web_1 ... doneCreating compose-flask_redis_1 ... doneCreating compose-flask_lb_1 ... done

可以看到啟動了三個容器,分別為:

[root@docker-node1 compose-flask]# docker-compose ps Name CommandState Ports---------------------------------------------------------------------------------------------------compose-flask_lb_1 /sbin/tini -- dockercloud- ... Up 1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp compose-flask_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp compose-flask_web_1 python app.py Up 5000/tcp

我們看到web應(yīng)用目前只有一個,可以啟動多個來處理請求:

[root@docker-node1 compose-flask]# docker-compose up --scale web=5 -dcompose-flask_redis_1 is up-to-dateStarting compose-flask_web_1 ... doneCreating compose-flask_web_2 ... doneCreating compose-flask_web_3 ... doneCreating compose-flask_web_4 ... doneCreating compose-flask_web_5 ... donecompose-flask_lb_1 is up-to-date

可以看到,直接將web應(yīng)用啟動了5個容器,分擔(dān)從HAProxy的請求。

到此這篇關(guān)于Docker Compose多容器部署的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Compose多容器部署內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Docker
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费看精品久久片| 麻豆视频在线看| 国产欧美日韩精品高清二区综合区| 国产精品99在线观看| 欧美黄色一区二区| 国产精品午夜av| 国产精品草草| 激情久久一区二区| 亚洲欧美日本国产| 色综合视频一区二区三区日韩| 亚洲欧美日韩精品一区二区| 亚洲精华国产欧美| 亚洲精品在线观看91| 视频福利一区| 国产亚洲精品自拍| 视频国产精品| 国产精品对白| 欧美gv在线| 欧美亚洲国产精品久久| 欧美亚洲国产激情| 亚洲一区观看| 欧美日韩伊人| 成人一区不卡| 成人精品亚洲| 蜜臀va亚洲va欧美va天堂| 色婷婷精品视频| 一区福利视频| 国产精品毛片aⅴ一区二区三区| 99国产成+人+综合+亚洲欧美| 亚洲欧洲日韩| 色黄视频在线观看| 国产一区二区精品久| 国产精品久久久久久模特| 蘑菇福利视频一区播放| 欧美韩日一区| 黑人精品一区| 日韩欧美综合| 成人污污视频| 免费一级欧美在线观看视频| 91亚洲精品视频在线观看| 亚洲制服欧美另类| 日韩精品国产欧美| 97久久亚洲| 日本午夜精品一区二区三区电影| 亚洲三级国产| 91成人在线精品视频| 国产精品一区二区99| 国产麻豆一区| 国产一区二区三区天码| 黄毛片在线观看| 日韩精品一区二区三区中文在线| 国产综合婷婷| 中文字幕一区二区三区日韩精品 | 欧美日韩亚洲在线观看| 亚洲成av人片一区二区密柚| 国产黄色精品| 99久久www免费| 成人午夜毛片| a日韩av网址| 四虎成人av| 久久99久久人婷婷精品综合| 99亚洲精品| 免费在线看一区| 麻豆国产精品| 色综合五月天| 国产精品www994| 国产精品日本一区二区不卡视频| 亚洲一区二区小说| 四虎在线精品| 日韩精品国产精品| 欧美天堂在线| 久久久久黄色| 91综合网人人| 日韩avvvv在线播放| 九九九精品视频| 国产日产精品_国产精品毛片| 中文字幕av一区二区三区四区| 五月国产精品| 国产精品网址| 国产欧美精品| 欧美a级片一区| 天堂√8在线中文| 成人在线免费观看网站| 丝袜亚洲精品中文字幕一区| 日韩中文字幕区一区有砖一区 | 欧美日韩激情| 四虎884aa成人精品最新| 亚洲激情不卡| 国产精品最新自拍| 亚洲成人va| 日精品一区二区三区| 久久精品免费看| 好吊日精品视频 | 免费一级片91| 麻豆精品一区二区综合av| 亚洲成人国产| 国产极品嫩模在线观看91精品| 9色精品在线| re久久精品视频| 美女少妇全过程你懂的久久| 日韩亚洲国产欧美| 日韩精品一二三区| 开心激情综合| 丝袜脚交一区二区| 国产欧美日韩一区二区三区四区| 久久久久免费| 日韩精品视频网站| 精品视频99| 日韩国产一区二| 丁香六月综合| 国产欧美另类| 四虎在线精品| 高清av一区| 日韩精品乱码av一区二区| 久久免费福利| 97精品国产99久久久久久免费| 久久中文字幕二区| 欧美91在线| 亚洲乱码一区| 亚洲视频播放| 欧美va天堂在线| 亚洲伦乱视频| 国产一区二区三区四区| 国产麻豆一区二区三区| 日韩美女精品| 日韩影院免费视频| 亚洲免费高清| 久久福利影视| 蜜乳av另类精品一区二区| 国产videos久久| 久久亚州av| 欧美好骚综合网| 国产传媒av在线| 色网在线免费观看| 神马午夜在线视频| 亚洲精一区二区三区| 日韩精品一二区| 亚洲精品少妇| 国产美女久久| 你懂的亚洲视频| 老鸭窝一区二区久久精品| 国产91欧美| 91精品推荐| 国产视频亚洲| 好看的av在线不卡观看| 玖玖精品视频| 日本在线视频一区二区| 国产日韩一区二区三区在线播放 | 中文字幕成人| 国产日韩高清一区二区三区在线| 国产精品一区二区精品视频观看| 精品国产网站| 九一国产精品| 日本一区中文字幕| 精品久久91| 99国产精品久久久久久久| 日韩欧美激情电影| 久久精品 人人爱| 国产一二在线播放| 国产精品女主播一区二区三区| 日韩三级精品| 亚洲韩日在线| 国产精品sss在线观看av| 99久久婷婷这里只有精品| 亚洲精品免费观看| 日韩亚洲一区在线| 69堂精品视频在线播放| 亚洲婷婷在线| 人人爱人人干婷婷丁香亚洲| 亚洲男人在线| 久久久国产精品网站| 中文字幕一区二区精品区| 91福利精品在线观看| 欧美亚洲在线日韩| 麻豆国产精品视频| 蜜臀av国产精品久久久久 | 亚洲综合不卡| 欧美一级鲁丝片| 国产日韩欧美| 日本久久一区| 久久福利毛片| 免费不卡中文字幕在线| 国产96在线亚洲| 国产精品极品国产中出| 亚洲精品在线二区| 精品一区在线| 久久精品在线| 欧洲亚洲一区二区三区| 精品一区二区三区中文字幕在线| 亚洲欧美一级| 2023国产精品久久久精品双| 日韩一区二区三区免费播放| 久久久久久夜| 国产中文在线播放| 国产精品成人一区二区不卡| 精品视频高潮| av一区在线| 韩日一区二区三区| 在线一区欧美| 亚洲乱码一区|