最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年10月16日 14:58:18   作者:沈建平  
這篇文章主要介紹了Docker Compose多容器部署的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、wordpress部署

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

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

1、拉取wordpress鏡像

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

2、拉取mysql鏡像

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

3、鏡像列表

[root@docker-node1 /]# docker image ls
REPOSITORY            TAG         IMAGE ID      CREATED       SIZE
wordpress            latest       0947f14b932b    25 hours ago    540MB
mysql              latest       791b6e40940c    43 hours ago    465MB

(二)運行鏡像

1、運行mysql鏡像

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

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

查看啟動的容器:

[root@docker-node1 /]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS         NAMES
b6e7a57a5fce    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 wordpress
6cf0c0fc2ef332728a3ea2bf2dbee65299441b26751d5c64f0a66b329f2679f6

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

然后查看容器信息:

[root@docker-node1 /]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS         NAMES
6cf0c0fc2ef3    wordpress      "docker-entrypoint.s…"  3 minutes ago    Up 3 minutes    0.0.0.0:8080->80/tcp  wordpress
b6e7a57a5fce    mysql        "docker-entrypoint.s…"  20 minutes ago   Up 20 minutes    3306/tcp, 33060/tcp  mysql

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

二、Docker Compose

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

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

那么有沒有一種類似批處理的方式,不需要這么繁瑣的過程呢?這就需要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,其實就相當(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,其實就相當(dāng)于下面這條命令:

docker network create -d bridge back-tier  

volumes

volumes:
  db-data:

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

docker volume create db-data

(二)Docker Compose環(huá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 --version
docker-compose version 1.24.1, build 4667896

4、docker-compose中的常用命令

[root@docker-node1 compose-wordpress]# docker-compose --help
Define and run multi-container applications with Docker.

Usage:
 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
 docker-compose -h|--help

Options:
 -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, --version        Print 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 equivalent

Commands:
 build       Build or rebuild services
 bundle       Generate a Docker bundle from the Compose file
 config       Validate and view the Compose file
 create       Create services
 down        Stop and remove containers, networks, images, and volumes
 events       Receive real time events from containers
 exec        Execute a command in a running container
 help        Get help on a command
 images       List images
 kill        Kill containers
 logs        View output from containers
 pause       Pause services
 port        Print the public port for a port binding
 ps         List containers
 pull        Pull service images
 push        Push service images
 restart      Restart services
 rm         Remove stopped containers
 run        Run a one-off command
 scale       Set number of containers for a service
 start       Start services
 stop        Stop services
 top        Display 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

顯示正在運行的容器

docker-compose stop

停止正在運行的容器服務(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

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

(三)Docker Compose實戰(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-bridge

volumes:
 mysql-data:

networks:
 my-bridge:
  driver: bridge

啟動services中的容器

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

通過docker-compose up啟動容器,這個命令默認執(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]# ls
app.py docker-compose.yml Dockerfile

編寫app.py文件

from flask import Flask
from redis import Redis
import os

app = 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.7
COPY . /app/
WORKDIR /app/
RUN pip install flask redis
EXPOSE 5000
CMD ["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ù)

(四)水平擴展和負載均衡

1、scale

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

[root@docker-node1 compose-flask]# docker-compose ps
    Name            Command        State      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īng)用容器會報端口占用的錯誤。此時需要修改一下docker-compose.yml文件將web應(yīng)用的端口那一項配置去掉:

version: "3"

services:

 redis:
  image: redis

 web:
  build:
   context: .
   dockerfile: Dockerfile
  ports:     #去掉這一項
   - 8080:5000
  environment:
   REDIS_HOST: redis

這樣就可以了。

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

查看容器:

[root@docker-node1 compose-flask]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS    NAMES
d0ae3307eb9e    compose-flask_web  "python app.py"     51 seconds ago   Up 46 seconds    5000/tcp  compose-flask_web_1
67483b8decd3    compose-flask_web  "python app.py"     52 seconds ago   Up 47 seconds    5000/tcp  compose-flask_web_2
741766d49902    compose-flask_web  "python app.py"     52 seconds ago   Up 47 seconds    5000/tcp  compose-flask_web_3
be3800004658    redis        "docker-entrypoint.s…"  5 hours ago     Up 6 minutes    6379/tcp  compose-flask_redis_1

但是顯然這樣只能在容器內(nèi)去訪問,因為端口沒有映射出來,那么這樣接下來怎么做呢?

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

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

2、水平擴展和負載均衡

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

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

編寫app.py

from flask import Flask
from redis import Redis
import os

app = 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.7
COPY . /app/
WORKDIR /app/
RUN pip install flask redis
EXPOSE 80
CMD ["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

運行

[root@docker-node1 compose-flask]# docker-compose up -d
Creating network "compose-flask_default" with the default driver
Creating compose-flask_web_1  ... done
Creating compose-flask_redis_1 ... done
Creating compose-flask_lb_1  ... done

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

[root@docker-node1 compose-flask]# docker-compose ps
    Name            Command        State         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 -d
compose-flask_redis_1 is up-to-date
Starting compose-flask_web_1 ... done
Creating compose-flask_web_2 ... done
Creating compose-flask_web_3 ... done
Creating compose-flask_web_4 ... done
Creating compose-flask_web_5 ... done
compose-flask_lb_1 is up-to-date

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

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

相關(guān)文章

  • 詳解掛載運行的docker容器中如何掛載文件系統(tǒng)

    詳解掛載運行的docker容器中如何掛載文件系統(tǒng)

    這篇文章主要給大家介紹了如何在掛載運行中的docker容器中掛載文件系統(tǒng),文中通過一步步的實踐過程介紹的很詳細,相信對有需要的朋友們來說具有一定的參考借鑒價值,感興趣的朋友們下面來一起看看吧。
    2016-12-12
  • docker容器配置啟動參數(shù)

    docker容器配置啟動參數(shù)

    通過添加參數(shù),我們可以在啟動 Docker 容器時靈活地配置容器的行為,本文介紹了通過命令行和 Dockerfile 兩種方式添加參數(shù)的方法,并給出了常用參數(shù)的示例,希望本文能幫助您理解如何在 Docker 啟動時添加參數(shù),并正確地配置和管理 Docker容器
    2023-10-10
  • 云原生Docker創(chuàng)建并進入mysql容器的全過程

    云原生Docker創(chuàng)建并進入mysql容器的全過程

    前面我們已經(jīng)安裝好了Docker,也簡單了解了Docker,下面這篇文章主要給大家介紹了關(guān)于云原生Docker創(chuàng)建并進入mysql容器的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 使用Docker部署打包發(fā)布springboot項目

    使用Docker部署打包發(fā)布springboot項目

    本文主要介紹了使用Docker部署打包發(fā)布springboot項目,從安裝docker到多種方式打包發(fā)布,編譯,鏡像,容器等問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • IDEA直接打包Docker鏡像的實現(xiàn)

    IDEA直接打包Docker鏡像的實現(xiàn)

    Docker提供了多種方法來打包鏡像,本文主要介紹了IDEA直接打包Docker鏡像的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • docker search 搜索鏡像的實現(xiàn)示例

    docker search 搜索鏡像的實現(xiàn)示例

    本文主要介紹了docker search搜索鏡像的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Docker實現(xiàn)安裝ELK(單節(jié)點)

    Docker實現(xiàn)安裝ELK(單節(jié)點)

    這篇文章主要介紹了Docker實現(xiàn)安裝ELK(單節(jié)點),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 淺談Docker consul的容器服務(wù)更新與發(fā)現(xiàn)

    淺談Docker consul的容器服務(wù)更新與發(fā)現(xiàn)

    本文主要介紹了淺談Docker consul的容器服務(wù)更新與發(fā)現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 十分鐘學(xué)會用docker部署微服務(wù)

    十分鐘學(xué)會用docker部署微服務(wù)

    這篇文章主要介紹了十分鐘學(xué)會用docker部署微服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解使用docker搭建kafka環(huán)境

    詳解使用docker搭建kafka環(huán)境

    本篇文章主要介紹了詳解使用docker搭建kafka環(huán)境 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論

齐河县| 双城市| 漾濞| 德化县| 深水埗区| 墨竹工卡县| 城市| 湟中县| 工布江达县| 雷州市| 阿拉尔市| 河间市| 延寿县| 微山县| 合阳县| 屏东市| 巨野县| 宝鸡市| 镇原县| 文山县| 精河县| 封丘县| 彭州市| 上思县| 天气| 湟中县| 梓潼县| 博白县| 安阳市| 康马县| 武鸣县| 礼泉县| 德安县| 离岛区| 台前县| 肇东市| 商洛市| 池州市| 绥中县| 泸水县| 胶南市|