往往实际的应用,需要多个容器一起完成的,由
app = nginx + web + mysql + redis
只要启动了app 就直接启动4个
可以写一个yaml文件,指定所有要启动的内容
docker compose up/down
对于docker compose的安装,可以参考官网的get start
对于官网文档上提供的操作
我们可以首先创建好对应的py以及对应的requirement.txt
然后到达第二部,在宿主机上创建对应的DockerFile
FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add –no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txtRUN pip install -r requirements.txt EXPOSE 5000COPY . .CMD [“flask”, “run”] |
然后创建一个compose file
version: “3.9”
services: web: build: . image: ‘hello’ ports: – “5000:5000” redis: image: “redis:alpine” |
其中重要的有services ->指定需要启动的服务
第一个是web,第二个是redis
build 指定一个路径,进行构建
更为拆解的写法可以如下
build:
dockerfile:
context:
分别指定dockerfile和context
有了上面的文件,只需要docker compose up即可
其执行的顺序
首先是创建一个network namespace
然后分别打包不同的镜像
然后分别创建容器
绑定容器 & 进行运行
对于集群的话,我们还可以进行加入swarm
利用swarm和compose进行组合使用
首先是init一个swarm的集群
docker swarm init –advertise-addr <MANAGER-IP>
然后不断的加入工作节点
docker swarm join \
–token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
之后就可以在compose的file中声明使用了
services:
redis:
image: redis:alpine
deploy:
replicas: 6
placement:
max_replicas_per_node: 1
compose还有一个相对重要的概念network
首先,我们可以给不同的service声明一到多个networks
这样就可以给不同的service,设置为不同的子网
不过在声明完成子网之后,还需要设置这个network的信息
这样才可以进行生效