敞开成长之旅!这是我参与「日新计划 2 月更文挑战」的第 16天,点击检查活动详情
简介
微服务盛行的时代,大多数项目或产品都是经过多个更小的微服务相互协作来组成一个完整可用的项目或运用的。例如:我之前学习Spring Cloud
全家桶系统时接触的注册中心、装备中心、网关服务、鉴权服务、运用服务等组合在一起构成了咱们的完整运用。在Docker还没出来之前,咱们都是经过手艺的办法布置和办理的,当需求布置的服务渐渐变多的时分,布置和办理这些服务就会变得十分困难。而Docker Compose
的出现完美的帮咱们解决了这个问题。Docker Compose采取了声明式的装备文件的办法来描述整个运用,从而一条指令完成布置。乃至装备文件还能够存储在版别控制系统中!
步序
咱们按照如下的步序来渐进式学习,这儿默许各位小伙伴现已提前装置了Docker了。
- 装置 Docker Compose
- 看懂 Compose 文件
- 布置运用
- 办理运用
1、装置 Docker Compose
装置 Docker Compose有两种办法
办法一:curl办法
这儿咱们以Linux环境为例装置Docker Compose,首先经过 curl 指令下载文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
然后经过如下指令赋予其可履行权限
sudo chmod +x /usr/local/bin/docker-compose
如需卸载,请履行以下指令
sudo rm /usr/local/bin/docker-compose
办法二:pipe办法
sudo pip install -U docker-compose
如需卸载,请履行以下指令
pip uninstall docker-compose
验证装置成果
docker-compose --version
2、看懂 Compose 文件
假如你是一个Java开发工程师,那么我相信你一定对Compose文件感到似曾相识,由于它和咱们SpringBoot项目的YAML文件格局几乎如出一辙,咱们看一个简略的 docker-compose.yml 示例:
version: "3.5"
services:
web:
build: .
command: python test.py
port:
- target: 5000
published: 5000
networks:
- counter-net
volumes:
- type: volume
source: test-vol
target: /code
redis:
image: "redis:alpine"
networks:
test-net:
networks:
test-net:
volumes:
test-vol:
或许咱们看到这个文件,能猜到一些意思,这儿面主要有4个一级key:version、services、networks、volumes。都分别代表着特别的含义:
- version:有必要指定项,且有必要坐落首行。它界说了整个文件的格局。主张坚持最新版别。
- services:用于界说不同的服务,如上咱们界说了两个服务分别是web和redis。Docker Compose会将他们分别布置在各自的容器内。
- networks:用来创立一个网络,假如不写的话,Docker Compose会默许创立bridge网络,但这是单机网络,只能完成同一主机上容器的连接。
- volumes:用于创立新的卷。主要是完成数据耐久化的。
经过上面的文件,咱们知道了 Compose文件运用的是V3.5版别的格局。界说了两个服务web和redis
web服务装备解读
web服务中包括如下指令:
- build:”.“ 表示根据当时目录下Dockerfile中界说的指令来构建一个新镜像。
- command:python test.py是指定在Docker容器中履行test.py的Python脚本。所以镜像中得存在test.py文件和Python
- ports:用于指定端口映射得,将容器内(target这一行)5000端口映射到主机的(published这一行)5000端口。这样拜访主机5000端口的流量都会被转到容器内的5000端口。
- networks:告知Docker将服务连接到指定的网络,这个网络要么是存在的,要么是networks中一级key指定的网络。
- volumes:用于指定Docker将test-vol卷挂载到容器内的/code。test-vol卷不存在的话,会用volumes下面一级key界说的。
redis服务装备解读
redis服务界说比较简略
- image:用于告知Docker根据”redis:alpine“镜像发动一个名为redis的容器。Docker会主动从Docker Hub上拉取这个镜像
- networks:告知Docker将redis容器连接到 counter-net网络。
3、布置运用
将以下四个文件拷贝到Linux主机上的某个目录下:
- test.py:一个python运用
- docker-compose.yml:Compose文件,界说了怎么布置运用
- Dockerfile:描述了怎么构建web服务所运用的镜像
- requirements.txt:列出运用依赖的python包
docker-compose.yml文件咱们能够用上面的,这儿贴出test.py、requirements.txt、Dockerfile文件装备
test.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 "Hi! You've visited me {} times.\n".format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
requirements.txt 内容如下
flask
redis
Dockerfile 内容如下
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "test.py"]
注意:在履行以下指令之前先运用python -V验证一下Linux操作系统的python版别号,假如是2.7.5版别,则需求升级至3+以上,怎么升级网上有很多教程,这儿就不写了大伙能够自行百度:
docker compose up & #运用&是将终端窗口返回
假如你们的Compose文件名不是默许的docker-compose.yml的话,则需求指定文件名,能够运用如下指令:
docker compose -f xxxx.yml up -d & 这儿的xxx代表你的文件名,-d表示后台发动
能够看到如下的主动布置进程:
履行完毕后,能够拜访页面 http://192.168.188.23:5000/ 就能够看到如下页面了。
4、办理运用
发动运用
输入以下指令即可快速发动Compose文件中所有服务。
发动:docker compose up
重启:docker compose restart
中止运用
输入以下指令会中止并删去运行中的Compose运用,会删去容器和网络但不会删去卷和镜像资源。
docker compose down
删去运用
对于现已中止的Compose运用,能够运用如下指令来删去。
docker compose down
检查运用
能够运用如下指令检查运用状况
docker compose ps
修正代码
一般咱们布置的运用都会映射在宿主机的某个当地,那么怎么定位咱们的运用放在哪呢?咱们能够按照如下过程来查找
由于咱们的Compose文件中添加了卷映射,所以咱们能够用如下指令检查当时有哪些卷
docker volume ls
然后输入如下指令查询该卷的映射方位
docker volume inspect test_counter-vol | grep Mount
进入到该目录下,就能够发现咱们运用文件都在这了
cd /var/lib/docker/volumes/test_counter-vol/_data/
这个时分咱们能够利用vim修正一下咱们的python文件,修正一下显示的内容,然后保存退出修正,再刷新页面就能立马看到变化了!
END~
到此结束,码字不易,期望小伙伴们能给我一个免费的赞!