前文鏈接
[Docker] 入門教程
http://www.reibang.com/writer#/notebooks/20574865/notes/37511203
簡介
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是一個用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。使用組合帚桩,可以使用組合文件配置應(yīng)用程序的服務(wù)隧枫。然后砖瞧,使用單個命令從配置中創(chuàng)建和啟動所有服務(wù)揭措。
我們從logo
上可以看出來, 說白了, 這個東西就是一個管理容器的工(zhang)具(yu), 我們可以方便的使用它來管理我們的docker
容器, 可以極大程度的簡化命令行的復(fù)雜操作.
一.快速開始
如果你是Mac
或Windows
用戶使用桌面版本的Docker
應(yīng)用默認(rèn)就會替你安裝docker-compose
(下文中用dc代替), 如果是centos
的話可以使用命令yum -y install docker-compose
太簡單了不做過多說明.
查看版本蔫耽,能顯示出來證明安裝成功了
zhangyideMacBook-Pro:~ objcat$ docker-compose version
docker-compose version 1.23.1, build b02f1306
docker-py version: 3.5.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h 27 Mar 2018
接下來我們有需求了见秤, 運(yùn)行一個service-a
掛載到/usr/local
, 映射端口為8082
并添加servicehost
域名映射內(nèi)網(wǎng)ip
控乾,很多人可以想到那應(yīng)該是一條冗長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
的文件
zhangyideMacBook-Pro:jar objcat$ touch docker-compose.yml
之后隨便是用一個文本編輯器打開秋泄,寫入下面內(nèi)容
version: '2'
services:
service-a:
image: java
volumes:
- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
ports:
- 8082:8082
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-a.jar
這樣看起來是不是思路清晰多了呢,我們接下來運(yùn)行一下
zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
Creating network "jar_default" with the default driver
Creating jar_service-a_1_495464b09e67 ... done
-d
后臺運(yùn)行规阀,否則運(yùn)行l(wèi)og就會出現(xiàn)在你的屏幕上。瘦麸。谁撼。
然后查看一下運(yùn)行狀態(tài)
zhangyideMacBook-Pro:jar objcat$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
jar_service- /bin/sh -c echo Up 0.0.0.0:8082->8082/tcp
a_1_5827fa3204e8 192.168.1. ...
我們可以看到服務(wù)已經(jīng)運(yùn)行起來了,我們試著訪問一下
http://localhost:8082/hello
成功滋饲,這一部分告一段落厉碟。
二.運(yùn)行多個服務(wù)
有的人會問,多個服務(wù)怎么運(yùn)行呢屠缭?很簡單箍鼓,我們這里就來做一下。
下面我要做的是開啟三個服務(wù)service-a
, service-b
, service-eureka
呵曹,分別是一個注冊中心和兩個服務(wù)。
我們來完善一下docker-compose.yml
version: '2'
services:
service-eureka:
image: java
volumes:
- /Users/objcat/jar/service-eureka.jar:/usr/local/service-eureka.jar
ports:
- 8081:8081
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-eureka.jar
service-a:
image: java
volumes:
- /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
ports:
- 8082:8082
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-a.jar
service-b:
image: java
volumes:
- /Users/objcat/jar/service-b.jar:/usr/local/service-b.jar
ports:
- 8083:8083
command:
- /bin/sh
- -c
- |
echo 192.168.1.126 servicehost >> /etc/hosts
java -jar /usr/local/service-b.jar
我們來運(yùn)行一下
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 ps
Name 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)可以運(yùn)行起來多個服務(wù)了!1宋凇C喔!下課 - -
命令擴(kuò)充
停止服務(wù)
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
停止單個服務(wù)
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
重新運(yùn)行服務(wù)
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)容補(bǔ)充
1.可能很多人對我的echo 192.168.1.126 servicehost >> /etc/hosts
不是很理解
這里說一下富腊,這句命令的意思是,把servicehost
域名加入到hosts
文件域帐,目的是為了能讓我的eureka
發(fā)現(xiàn)我的服務(wù)赘被,而不是把地址寫死在配置文件中是整,這句命令對應(yīng)的服務(wù)配置為
server:
#服務(wù)端口號
port: 8082
spring:
application:
#服務(wù)名稱 - 服務(wù)之間使用名稱進(jìn)行通訊
name: service-objcat-a
eureka:
client:
service-url:
#填寫注冊中心服務(wù)器地址
defaultZone: http://servicehost:8081/eureka
#是否需要將自己注冊到注冊中心
register-with-eureka: true
#是否需要搜索服務(wù)信息
fetch-registry: true
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
management:
endpoints:
web:
exposure:
include: "*"