介紹
? Docker Compose 官方介紹:
? Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
? docker-compose是docker官方開(kāi)源的容器編排工具,優(yōu)點(diǎn)是簡(jiǎn)單易用,而且功能強(qiáng)大。雖然docker公司在商業(yè)化后主推它的生產(chǎn)級(jí)容器集群平臺(tái)Swarm,但是Swarm好像沒(méi)有那么幸運(yùn)(前幾天看到博客園就因?yàn)樯狭薙warm,結(jié)果基本全站掛了…),最近被k8s打得不行。如果容器數(shù)量較少,或是為了學(xué)習(xí)docker,可以先學(xué)習(xí)使用docker-compose。
安裝
? 在https://www.docker.com/community-edition下載社區(qū)版本Docker CE,安裝之后,docker和docker-compose都有了。
? 確認(rèn)是否安裝成功:
docker-compose -v
docker-compose version 1.17.1, build 6d101fb
使用
? 下面我們按照官方的demo來(lái)一遍:
? 1.創(chuàng)建項(xiàng)目目錄
$ mkdir composetest
$ cd composetest
?
? 2.創(chuàng)建一個(gè)app.py,直接上vim,粘貼以下代碼
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
@app.route('/')
def index():
count = cache.get('hits')
return 'You are get: {} times.\n'.format(count)
@app.route('/incr')
def incr():
count = cache.incr('hits')
return 'You are incr: {} times.\n'.format(count)
@app.route('/decr')
def decr():
count = cache.decr('hits')
return 'You are decr: {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
?
? 3.創(chuàng)建構(gòu)建鏡像使用的Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
? 4.由2可知我們這個(gè)項(xiàng)目需要依賴Flask和Redis,需要把依賴放到requirements.txt,然后pip去安裝
flask
redis
? 5.最后最重要的一步,docker-compose.yml文件描述了整個(gè)項(xiàng)目服務(wù)的定義
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
? 6.在項(xiàng)目目錄執(zhí)行docker-compose up -d項(xiàng)目就可以跑起來(lái),需要下載基礎(chǔ)鏡像和構(gòu)建,會(huì)花費(fèi)一些時(shí)間。
如果遇到ERROR: Couldn't connect to Docker daemon. You might need to start Docker for Mac.請(qǐng)檢查Docker是否已經(jīng)啟動(dòng)。
? 啟動(dòng)成功輸出:
docker-compose up -d
Starting composetest_web_1 ...
Starting composetest_web_1
Starting composetest_redis_1 ...
Starting composetest_web_1 ... done
docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
composetest_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
composetest_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
? 訪問(wèn)http://127.0.0.1:5000/將會(huì)看到目前一個(gè)統(tǒng)計(jì)數(shù),http://127.0.0.1:5000/incr 將會(huì)增加計(jì)數(shù),反之decr將會(huì)減少計(jì)數(shù)。
后續(xù)計(jì)劃
1.k8s和istio搭建以及簡(jiǎn)單使用
2.spring boot/cloud侵入式微服務(wù)與Service Mesh非侵入式微服務(wù)的對(duì)比
3.Docker與Unikernel的對(duì)比