Docker Compose的簡(jiǎn)單使用

介紹

? 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ì)比

參考文檔

  1. Docker Compose Doc
  2. 博客園Docker Swarm 集群宕機(jī)事件
  3. 后Kubernetes時(shí)代
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容