码迷,mamicode.com
首页 > 其他好文 > 详细

Docker学习与实践(七)

时间:2018-06-13 17:20:25      阅读:207      评论:0      收藏:0      [点我收藏+]

标签: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学习与实践(七)

标签:dockers   compose   

原文地址:http://blog.51cto.com/lullaby/2128990

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!