显示正在运行的容器
docker-compose stop
停止正在运行的容器服务
docker-compose down
停止容器服务,并且移除容器(container)、镜像(image)、网络(network)以及存储卷(volume)
docker-compose images
显示通过docker-compose up创建的容器服务的镜像列表
docker-compose exec container(Names) bash
进入某个容器,可以在容器内部进行操作
(三)Docker Compose实战
1、wordpress
编写docker-compose.yml文件
version: '3' #docker-compose.yml版本 services: #定义多个容器服务 wordpress: #wordpress容器名称 image: wordpress #镜像来源 ports: #端口映射 - 8080:80 environment: #环境变量 WORDPRESS_DB_HOST: mysql #连接的数据库,就是下面mysql容器的名称 WORDPRESS_DB_PASSWORD: root #数据库密码 networks: #使用的网络,是下面networks中定义的my-bridge - my-bridge mysql: #mysql容器名称 image: mysql #mysql镜像 command: --default-authentication-plugin=mysql_native_password #解决数据库密码加密问题 environment: #环境变量 MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: #定义存储卷,就是下面volumes中定义的 - mysql-data:/var/lib/mysql networks: - my-bridge volumes: mysql-data: networks: my-bridge: driver: bridge
启动services中的容器
[root@docker-node1 compose-wordpress]# ls docker-compose.yml [root@docker-node1 compose-wordpress]# docker-compose up
通过docker-compose up启动容器,这个命令默认执行的就是当前目录下的docker-compose.yml文件,你也可以将这个命令写完整就是docker-compose -f docker-compose.yml up
2、Flask Web
新建app.py docker-compose.yml Dockerfile三个文件
[root@docker-node1 compose-flask]# ls app.py docker-compose.yml Dockerfile
编写app.py文件
from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST'),port=6379) @app.route('/') def hello(): return 'Hello World' if __name__ == "__main__": app.run(host="0.0.0.0",port=5000,debug=True)
编写Dockerfile文件
FROM python:2.7 COPY . /app/ WORKDIR /app/ RUN pip install flask redis EXPOSE 5000 CMD ["python","app.py"]
编写docker-compose.yml文件
version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: - 8080:5000 environment: REDIS_HOST: redis
启动容器服务
[root@docker-node1 compose-flask]# docker-compose up
访问服务
(四)水平扩展和负载均衡
1、scale
在上面通过Docker Compose完成了flask的应用部署,目前运行的容器:
[root@docker-node1 compose-flask]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------- compose-flask_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp compose-flask_web_1 python app.py Up 0.0.0.0:8080->5000/tcp
通过docker-compose --help命令,可以看到有一个scale参数:
[root@docker-node1 compose-flask]# docker-compose --help scale Set number of containers for a service
它的意思就是可以启用多个应用容器:
[root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d
但是显然这样会出错,为什么呢?因为三个容器端口映射都是一样的,必然剩下的两个应用容器会报端口占用的错误。此时需要修改一下docker-compose.yml文件将web应用的端口那一项配置去掉:
version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: #去掉这一项 - 8080:5000 environment: REDIS_HOST: redis
这样就可以了。
[root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d Recreating compose-flask_web_1 ... Recreating compose-flask_web_1 ... done Recreating compose-flask_web_2 ... done Recreating compose-flask_web_3 ... done
查看容器:
[root@docker-node1 compose-flask]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0ae3307eb9e compose-flask_web "python app.py" 51 seconds ago Up 46 seconds 5000/tcp compose-flask_web_1 67483b8decd3 compose-flask_web "python app.py" 52 seconds ago Up 47 seconds 5000/tcp compose-flask_web_2 741766d49902 compose-flask_web "python app.py" 52 seconds ago Up 47 seconds 5000/tcp compose-flask_web_3 be3800004658 redis "docker-entrypoint.s…" 5 hours ago Up 6 minutes 6379/tcp compose-flask_redis_1
但是显然这样只能在容器内去访问,因为端口没有映射出来,那么这样接下来怎么做呢?
我们接下来可以这样做,用一个HAProxy的容器来接收请求,然后通过端口转发给不同的web服务器,这样就解决以下问题:
- 外界不能访问,只能容器内访问
- 负载均衡
2、水平扩展和负载均衡
文件结构
[root@docker-node1 compose-flask]# ls app.py docker-compose.yml Dockerfile
编写app.py
from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST'),port=6379) @app.route('/') def hello(): return 'Hello World' if __name__ == "__main__": app.run(host="0.0.0.0",port=80,debug=True)
编写Dockerfile文件
FROM python:2.7 COPY . /app/ WORKDIR /app/ RUN pip install flask redis EXPOSE 80 CMD ["python","app.py"]
编写docker-compose.yml文件
version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile environment: REDIS_HOST: redis lb: image: dockercloud/haproxy links: - web ports: - 8080:80 volumes: - /var/run/docker.sock:/var/run/docker.sock
运行
[root@docker-node1 compose-flask]# docker-compose up -d Creating network "compose-flask_default" with the default driver Creating compose-flask_web_1 ... done Creating compose-flask_redis_1 ... done Creating compose-flask_lb_1 ... done
可以看到启动了三个容器,分别为:
[root@docker-node1 compose-flask]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------- compose-flask_lb_1 /sbin/tini -- dockercloud- ... Up 1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp compose-flask_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp compose-flask_web_1 python app.py Up 5000/tcp
我们看到web应用目前只有一个,可以启动多个来处理请求:
[root@docker-node1 compose-flask]# docker-compose up --scale web=5 -d compose-flask_redis_1 is up-to-date Starting compose-flask_web_1 ... done Creating compose-flask_web_2 ... done Creating compose-flask_web_3 ... done Creating compose-flask_web_4 ... done Creating compose-flask_web_5 ... done compose-flask_lb_1 is up-to-date
可以看到,直接将web应用启动了5个容器,分担从HAProxy的请求。
到此这篇关于Docker Compose多容器部署的实现的文章就介绍到这了,更多相关Docker Compose多容器部署内容请搜索
标签:WordPress
相关阅读 >>
ubuntu vps中wordpress网站打开时提示”建立数据库连接错误”的解决办法
wordpress中"无法将上传的文件移动至"错误的解决方法
wordpress高级自定义布局的内容编辑器(tinymce)模板
wordpress 文章分页 实用的wordpress长文章分页代码
php版本升级到7.x后wordpress的一些修改及wordpress技巧
更多相关阅读请进入《wordpress》频道 >>