目录一、使用Docker Compose必要性及定义二、Docker Compose应用参考资料三、Docker Compose应用最佳实践步骤3.1 概念3.2 步骤四、Docker Compose安装五、Docker Compose应用案例5.1 网站文件准备5.2 Dockerfile文件准备5.3 Compose文件准备5.4 使用docker-compose up启动容器5.5 访问
一、使用Docker Compose必要性及定义
用容器运行一个服务,需要使用docker run命令。但如果我要运行多个服务呢?
假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?
一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。
那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了。
这个复杂的问题需要解决,这就涉及到了**容器编排**的问题了。
Compose编排是对多个容器进行启动和管理的方法例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx服务架构的演进单体服务架构分布式服务架构微服务架构超微服务架构容器编排工具docker machine在虚拟机中部署docker容器引擎的工具docker compose是一个用于定义和运行多容器Docker的应用程序工具docker swarm是Docker Host主机批量管理及资源调度管理工具mesos marathonmesos 对计算机计算资源进行管理和调度marathon 服务发现及负载均衡的功能kubernetesgoogle开源的容器编排工具
二、Docker Compose应用参考资料
网址 https://docs.docker.com/compose/
yaml格式
三、Docker Compose应用最佳实践步骤
3.1 概念
工程(project)服务 (Service)容器 (Container)
3.2 步骤
1.定义应用的Dockerfile文件,为了anywhere进行构建。
2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。
3.使用docker-compose up就可以启动整套服务。
四、Docker Compose安装
# wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
# mv docker-compose-linux-x86_64 /usr/bin/docker-compose
# chmod x /usr/bin/docker-compose
# docker-compose version
Docker Compose version v2.2.3
五、Docker Compose应用案例
运行Python语言开发的网站
5.1 网站文件准备
# mkdir flaskproject
[root@localhost ~]# cd flaskproject/
[root@localhost flaskproject]#
[root@localhost flaskproject]# vim app.py
[root@localhost flaskproject]# cat app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host=redis, port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr(hits)
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route(/)
def hello():
count = get_hit_count()
return Hello World! I have been seen {} times.n.format(count)
[root@localhost flaskproject]# vim requirements.txt
[root@localhost flaskproject]# cat requirements.txt
flask
redis
5.2 Dockerfile文件准备
[root@localhost flaskproject]# vim Dockerfile
[root@localhost flaskproject]# cat Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add –no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [“flask”, “run”]
5.3 Compose文件准备
[root@localhost flaskproject]# vim docker-compose.yaml
[root@localhost flaskproject]# cat docker-compose.yaml
version: 3
services:
web:
build: .
ports:
– “5000:5000”
redis:
image: “redis:alpine”
5.4 使用docker-compose up启动容器
[root@localhost flaskproject]# ls
app.py docker-compose.yaml Dockerfile requirements.txt
[root@localhost flaskproject]# docker-compose up
输出:
[ ] Running 7/7
⠿ redis Pulled 15.8s
⠿ 59bf1c3509f3 Pull complete 2.9s
⠿ 719adce26c52 Pull complete 3.0s
⠿ b8f35e378c31 Pull complete 5.8s
⠿ d034517f789c Pull complete 6.5s
⠿ 3772d4d76753 Pull complete 6.6s
⠿ 211a7f52febb Pull complete 6.8s
Sending build context to Docker daemon 714B
Step 1/9 : FROM python:3.7-alpine
3.7-alpine: Pulling from library/python
59bf1c3509f3: Already exists
07a400e93df3: Already exists
bdabb07397e1: Already exists
cd0af01c7b70: Already exists
d0f18e022200: Already exists
Digest: sha256:5a776e3b5336827faf7a1c3a191b73b5b2eef4cdcfe8b94f59b79cb749a2b5d8
Status: Downloaded newer image for python:3.7-alpine
—
暂无评论内容