1. 程式人生 > >Docker學習與實踐(七)

Docker學習與實踐(七)

dockers compose

七、Docker Compose

1.簡介

使用一個 Dockerfile 模板文件,可以讓用戶很方便的定義一個單獨的應用容器。然而,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 項目,除了 Web 服務容器本身,往往還需要再加上後端的數據庫服務容器,甚至還包括負載均衡容器等。
Compose 恰好滿足了這樣的需求。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。
使用Compose基本上是一個三步過程:
1.用一個定義你的應用程序的環境,Dockerfile這樣它就可以在任何地方再現。

2.定義組成您的應用程序的服務,docker-compose.yml 以便它們可以在隔離的環境中一起運行。
3.運行docker-compose up和撰寫啟動並運行您的整個應用程序。

2.安裝

在Linux上安裝直接從官方GitHub Release處下載編譯好的二進制文件。

[root@dockertest ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@dockertest ~]# chmod +x /usr/local/bin/docker-compose
[root@dockertest ~]# docker-compose --version
docker-compose version 1.21.2, build a133471
#需要卸載時直接刪除二進制文件即可

3.入門使用

①.新建文件夾並創建一個app.py文件

[root@dockertest ~]# mkdir test
[root@dockertest ~]# cd test/
[root@dockertest test]# cat app.py 
from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host=‘redis‘, port=6379)

@app.route(‘/‘)
def hello():
    count = redis.incr(‘hits‘)
    return ‘Hello World! 該頁面已被訪問 {} 次。\n‘.format(count)
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

②.創建一個Dockerfile文件

[root@dockertest test]# cat Dockerfile 
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

③.創建一個docker-compose.yml文件

[root@dockertest test]# cat docker-compose.yml 
version: ‘3‘
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"
#這個compose文件定義了兩個服務,web和redis。
#web服務使用當前目錄中的Dockerfile構建鏡像,並映射5000端口。
#redis服務使用公共庫中的redis鏡像

④.運行compose項目

[root@dockertest test]# docker-compose up

⑥.訪問
技術分享圖片

刷新頁面可以看見數字增加
切換終端查看運行的容器

[root@dockertest ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7846aed7560e        redis:alpine        "docker-entrypoint.s…"   3 minutes ago       Up 2 minutes        6379/tcp                 test_redis_1
f7c8c051d057        test_web            "python app.py"          3 minutes ago       Up 2 minutes        0.0.0.0:5000->5000/tcp   test_web_1

⑦.停止

[root@dockertest test]# docker-compose down
Stopping test_redis_1 ... done
Stopping test_web_1   ... done
Removing test_redis_1 ... done
Removing test_web_1   ... done
Removing network test_default

4.實例:WordPress

①.創建一個文件夾並新建docker-compose.yml 文件

[root@dockertest ~]# mkdir wordpress
[root@dockertest ~]# cd wordpress/
[root@dockertest wordpress]# cat docker-compose.yml 
version: ‘3‘
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

②.構建和運行

[root@dockertest wordpress]# docker-compose up -d
Creating network "wordpress_default" with the default driver
Creating volume "wordpress_db_data" with default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
f2aa67a397c4: Pull complete
1accf44cb7e0: Pull complete
2d830ea9fa68: Pull complete
740584693b89: Pull complete
4d620357ec48: Pull complete
ac3b7158d73d: Pull complete
a48d784ee503: Pull complete
bf1194add2f3: Pull complete
0e5c74178a02: Pull complete
e9201d309436: Pull complete
bf1ac4524e8e: Pull complete
Digest: sha256:f030e84582d939d313fe2ef469b5c65ffd0f7dff3b4b98e6ec9ae2dccd83dcdf
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
f2aa67a397c4: Already exists
4c3122805fd6: Pull complete
98ce407ee18a: Pull complete
8a56b8f1ca72: Pull complete
3eb04e3939f2: Pull complete
f5ecc66c0a5f: Pull complete
30ebdb4a78e1: Pull complete
9e9c0e2ba7f1: Pull complete
da976026223e: Pull complete
c97e6cef8eb4: Pull complete
d7d37db38fe6: Pull complete
4fbe9ea008c2: Pull complete
b5247a62a2b6: Pull complete
a430e65efb58: Pull complete
9afdee095b5b: Pull complete
12d5f9a19746: Pull complete
f785e67a07ef: Pull complete
5663bbfd9606: Pull complete
ff13a5b7e05e: Pull complete
710c4b456373: Pull complete
Digest: sha256:b0460dba11737144b232a7794403d4052982f2332caeea82f618fc98d0547387
Status: Downloaded newer image for wordpress:latest
Creating wordpress_db_1 ... done
Creating wordpress_wordpress_1 ... done

③.訪問

技術分享圖片

#學習文檔地址:https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

Docker學習與實踐(七)