(六)docker-compose使用教程
目錄
?
簡介
一.快速開始
二.運行多個服務
命令擴充
三.內(nèi)容補充
簡介
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.
Compose是一個用于定義和運行多容器Docker應用程序的工具。使用組合,可以使用組合文件配置應用程序的服務。然后,使用單個命令從配置中創(chuàng)建和啟動所有服務。
我們從logo上可以看出來, 說白了, 這個東西就是一個管理容器的工(zhang)具(yu), 我們可以方便的使用它來管理我們的docker容器, 可以極大程度的簡化命令行的復雜操作.
一.快速開始
如果你是Mac或Windows用戶使用桌面版本的Docker應用默認就會替你安裝docker-compose(下文中用dc代替), 如果是centos的話可以使用命令yum -y install docker-compose太簡單了不做過多說明.
查看版本,能顯示出來證明安裝成功了
lianying@lianyingdeiMac ~ % docker-compose version docker-compose version 1.27.2, build 18f557f9 docker-py version: 4.3.1 CPython version: 3.7.7 OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020接下來我們有需求了, 運行一個service-a掛載到/usr/local, 映射端口為8082并添加servicehost域名映射內(nèi)網(wǎng)ip,很多人可以想到那應該是一條冗長docker命令
docker run -idt -p 8082:8082 -v /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar --name service-a java sh -c "echo 192.168.1.126 servicehost >> /etc/hosts && java -jar /usr/local/service-a.jar"這么一大坨,看起來十分不方便,那么我們就是用docker-compose來優(yōu)化一下
首先創(chuàng)建一個名為docker-compose.yml的文件
lianying@lianyingdeiMac SpringBoot01 % touch docker-compose.yml lianying@lianyingdeiMac SpringBoot01 % ls docker-compose.yml之后隨便是用一個文本編輯器打開,寫入下面內(nèi)容
version: '2' services:service-a: image: javavolumes:- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jarports:- 8082:8082command:- /bin/sh- -c- |echo 192.168.1.126 servicehost >> /etc/hostsjava -jar /usr/local/service-a.jar這樣看起來是不是思路清晰多了呢,我們接下來運行一下
lianying@lianyingdeiMac SpringBoot01 % docker-compose up -d Starting springboot01_service-a_1 ... done-d后臺運行,否則運行l(wèi)og就會出現(xiàn)在你的屏幕上。。。
然后查看一下運行狀態(tài)
zhangyideMacBook-Pro:jar objcat$ docker-compose psName Command State Ports -------------------------------------------------------------------------------- jar_service- /bin/sh -c echo Up 0.0.0.0:8082->8082/tcp a_1_5827fa3204e8 192.168.1. ...我們可以看到服務已經(jīng)運行起來了,我們試著訪問一下
http://localhost:8082/hello
成功,這一部分告一段落。
二.運行多個服務
有的人會問,多個服務怎么運行呢?很簡單,我們這里就來做一下。
下面我要做的是開啟三個服務service-a, service-b, service-eureka,分別是一個注冊中心和兩個服務。
我們來完善一下docker-compose.yml
version: '2'services:service-eureka: image: javavolumes:- /Users/objcat/jar/service-eureka.jar:/usr/local/service-eureka.jarports:- 8081:8081command:- /bin/sh- -c- |echo 192.168.1.126 servicehost >> /etc/hostsjava -jar /usr/local/service-eureka.jarservice-a: image: javavolumes:- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jarports:- 8082:8082command:- /bin/sh- -c- |echo 192.168.1.126 servicehost >> /etc/hostsjava -jar /usr/local/service-a.jarservice-b: image: javavolumes:- /Users/objcat/jar/service-b.jar:/usr/local/service-b.jarports:- 8083:8083command:- /bin/sh- -c- |echo 192.168.1.126 servicehost >> /etc/hostsjava -jar /usr/local/service-b.jar我們來運行一下
zhangyideMacBook-Pro:jar objcat$ docker-compose up -d jar_service-a_1_5827fa3204e8 is up-to-date Creating jar_service-b_1_f7d01c317fab ... done Creating jar_service-eureka_1_57bb1a079e9b ... done zhangyideMacBook-Pro:jar objcat$ docker-compose psName Command State Ports --------------------------------------------------------------------------------------------------- jar_service-a_1_5827fa3204e8 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8082->8082/tcp jar_service-b_1_be87c0458e53 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8083->8083/tcp jar_service-eureka_1_933d5a60af31 /bin/sh -c echo 192.168.1. ... Up 0.0.0.0:8081->8081/tcp zhangyideMacBook-Pro:jar objcat$注冊中心
訪問service-a
訪問service-b
到這里我們已經(jīng)可以運行起來多個服務了!!!!下課 - -
命令擴充
停止服務
zhangyideMacBook-Pro:jar objcat$ docker-compose stop Stopping jar_service-eureka_1_933d5a60af31 ... done Stopping jar_service-b_1_be87c0458e53 ... done Stopping jar_service-a_1_5827fa3204e8 ... done停止單個服務
zhangyideMacBook-Pro:jar objcat$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94c3472638c8 java "/bin/sh -c 'echo 19…" 16 minutes ago Up 6 seconds 0.0.0.0:8081->8081/tcp jar_service-eureka_1_933d5a60af31 8d1dfa0ec642 java "/bin/sh -c 'echo 19…" 16 minutes ago Up 6 seconds 0.0.0.0:8083->8083/tcp jar_service-b_1_be87c0458e53 6be5f9d8f423 java "/bin/sh -c 'echo 19…" 33 minutes ago Up 6 seconds 0.0.0.0:8082->8082/tcp jar_service-a_1_5827fa3204e8 zhangyideMacBook-Pro:jar objcat$ docker stop 6be5f9d8f423 6be5f9d8f423重新運行服務
zhangyideMacBook-Pro:jar objcat$ docker-compose up -d jar_service-b_1_be87c0458e53 is up-to-date Starting jar_service-a_1_5827fa3204e8 ... Starting jar_service-a_1_5827fa3204e8 ... done zhangyideMacBook-Pro:jar objcat$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94c3472638c8 java "/bin/sh -c 'echo 19…" 19 minutes ago Up 3 minutes 0.0.0.0:8081->8081/tcp jar_service-eureka_1_933d5a60af31 8d1dfa0ec642 java "/bin/sh -c 'echo 19…" 19 minutes ago Up 3 minutes 0.0.0.0:8083->8083/tcp jar_service-b_1_be87c0458e53 6be5f9d8f423 java "/bin/sh -c 'echo 19…" 36 minutes ago Up 13 seconds 0.0.0.0:8082->8082/tcp jar_service-a_1_5827fa3204e8我們可以看到docker-compose會自動識別容器的開啟狀態(tài),替我們開啟需要開啟的那一個
三.內(nèi)容補充
1.可能很多人對我的echo 192.168.1.126 servicehost >> /etc/hosts不是很理解
這里說一下,這句命令的意思是,把servicehost域名加入到hosts文件,目的是為了能讓我的eureka發(fā)現(xiàn)我的服務,而不是把地址寫死在配置文件中,這句命令對應的服務配置為
server:#服務端口號port: 8082 spring:application:#服務名稱 - 服務之間使用名稱進行通訊name: service-objcat-a eureka:client:service-url:#填寫注冊中心服務器地址defaultZone: http://servicehost:8081/eureka#是否需要將自己注冊到注冊中心register-with-eureka: true#是否需要搜索服務信息fetch-registry: trueinstance:prefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port} management:endpoints:web:exposure:include: "*"?
總結
以上是生活随笔為你收集整理的(六)docker-compose使用教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 把较长的一行代码分成多行的
- 下一篇: (二)Docker配置修改阿里云镜像仓库