Docker-07-docker compose
一、docker运行wordpress案例
- 第一步:创建一个mysql容器
[root@docker01 ~]# docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql 05e9c5733c1784dc86582e633796e154118bbbefeadb4394bfff82d8a06054c4
- 第二步:启动wordpress容器,指定相应环境变量
官网地址:https://hub.docker.com/_/wordpress/
[root@docker01 ~]# docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress 97443a6db7650fe3ebd2c016008455238f95b692597012e05532d58363e32ef3
- 第三步:网页访问http://host_ip:8080
二、什么是Docker Compose
- Docker Compose是一个基于docker的命令行工具;
- 这个工具可以通过一个yml文件定义多容器的docker应用;
- 通过一条命令就可以根据yml文件的定义去创建或管理多个容器;
- docker-compose.yml是默认的yml配置文件名称。
2.1 docker-compose版本
官网介绍:https://docs.docker.com/compose/compose-file/
version2只支持单机
version3可以支持多机(建议使用)
2.2 docker-compose.yml文件
docker-compose的三大概念:
- Services
- Networks
- Volumes
2.2.1 Services
- 一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的dockerfile build出来的image创建。
- Service启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和volume的引用。
例(从docker hub拉取镜像):
services:db:image: postgres:9.4volumes:- "db-data:/var/lib/postgresql/data"networks:- back-tier
等价于docker run命令:
docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4
例(本地构建dockerfile):
services: worker: build: ./worker links: - db - redis networks: - back-tier
2.2.2 Volumes
创建一个volume,或者将volume挂载到容器:
volumes:mysql-data:
等价于:
docker volume create mysql-data
2.2.3 Networks
创建一个网络,或者为容器指定一个网络
networks:my-bridge:driver: bridge
等价于:
docker network create my-bridge
三、docker-compose的安装和使用
3.1安装docker-compose
MAC和windows在安装docker时已经安装好docker-compose了。
在linux上安装docker-compose
官网地址:https://docs.docker.com/compose/install/
3.1.1 下载可执行文件安装
- 第一步:下载可执行文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 第二步:为文件添加执行权限
chmox +X /usr/local/bin/docker-compose
- 第三步:查看安装结果
docker-compose --version
3.1.2 通过pip安装
- 安装python-pip,并通过pip安装docker-compose
yum -y install epel-release yum -y install python-pippip install docker-compose
- 查看安装结果
docker-compose --version
3.2 docker-compose的使用
3.2.1 docker-compose命令参数
build Build or rebuild servicesbundle Generate a Docker bundle from the Compose fileconfig Validate and view the Compose filecreate Create servicesdown Stop and remove containers, networks, images, and volumesevents Receive real time events from containersexec Execute a command in a running containerhelp Get help on a commandimages List imageskill Kill containerslogs View output from containerspause Pause servicesport Print the public port for a port bindingps List containerspull Pull service imagespush Push service imagesrestart Restart servicesrm Remove stopped containersrun Run a one-off commandscale Set number of containers for a servicestart Start servicesstop Stop servicestop Display the running processesunpause Unpause servicesup Create and start containersversion Show the Docker-Compose version information
3.2.2 使用docker-compose
案例:通过docker-compose安装wordpress
- 编写docker-compose.yml
[root@docker02 wordpress]# cat docker-compose.yml version: '3'services:wordpress:image: wordpressports:- 8080:80environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_PASSWORD: rootnetworks:- my-bridgemysql:image: mysqlenvironment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: wordpressvolumes:- mysql-data:/var/lib/mysqlnetworks:- my-bridgevolumes:mysql-data:networks:my-bridge:driver: bridge
- 启动docker-compose
docker-compose up
- 后台启动docker-compose
[root@docker02 wordpress]# docker-compose up -d Starting wordpress_wordpress_1 ... done Starting wordpress_mysql_1 ... done
- 查看docker-compose生成的容器
[root@docker02 wordpress]# docker-compose psName Command State Ports ------------------------------------------------------------------------------------- wordpress_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp wordpress_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
- 停止docker-compose
docker-compose down
- 进入到docker-compose启动的容器
注意:后面跟的是在docker-compose.yml中定义的service名
[root@docker02 wordpress]# docker-compose exec mysql bash
四、水平拓展负载均衡实验
docker-compose命令中有一个参数:scale,可以通过这个参数来调节容器的运行数量!
准备flask-redis案例(参考文章:https://www.cnblogs.com/liuguangjiji/p/10629410.html)
4.1 启动多个web和一个redis
- 第一步:准备三个实验文件,并且都放在同一目录
(1)python程序文件app.py
from flask import Flask from redis import Redis import os import socketapp = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)@app.route('/') def hello():redis.incr('hits')return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())if __name__ == "__main__":app.run(host="0.0.0.0", port=5000, debug=True)
(2)Dockerfile
FROM python:2.7 LABEL maintainer="this is test message" COPY . /app/ WORKDIR /app RUN pip install flask redis EXPOSE 5000 CMD ["python","app.py"]
(3)docker-compose.yml
version: '3'services:redis:image: redisweb:build:context: .dockerfile: Dockerfileenvironment:REDIS_HOST: redis
- 第二步:启动docker-compose
docker-compose up -d
- 第三步:查看docker-compose
[root@docker01 chapter6]# docker-compose psName Command State Ports -------------------------------------------------------------------- chapter6_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp chapter6_web_1 python app.py Up 5000/tcp
- 第四步:调整web数量为3
docker-compose up --scale web=3 -d
- 第五步:再次查看docker-compose
[root@docker01 chapter6]# docker-compose psName Command State Ports -------------------------------------------------------------------- chapter6_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp chapter6_web_1 python app.py Up 5000/tcp chapter6_web_2 python app.py Up 5000/tcp chapter6_web_3 python app.py Up 5000/tcp
4.2 在前方增加HAProxy
- 第一步:修改app.py、Dockerfile以及docker-compose.yml文件
(1)app.py
from flask import Flask from redis import Redis import os import socketapp = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)@app.route('/') def hello():redis.incr('hits')return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())if __name__ == "__main__":app.run(host="0.0.0.0", port=80, debug=True)
(2)Dockerfile
FROM python:2.7 LABEL maintaner="this is test message" COPY . /app WORKDIR /app RUN pip install flask redis EXPOSE 80 CMD [ "python", "app.py" ]
(3)docker-compose.yml
version: "3"services:redis:image: redisweb:build:context: .dockerfile: Dockerfileenvironment:REDIS_HOST: redislb:image: dockercloud/haproxylinks:- webports:- 8080:80volumes:- /var/run/docker.sock:/var/run/docker.sock
- 第二步:启动docker-compose
docker-compose up -d
- 第三步:查看docker-compose容器,并访问端口8080
#查看docker-compose启动的容器,共有三个 [root@docker01 chapter6]# docker-compose psName Command State Ports --------------------------------------------------------------------------------------------------- chapter6_lb_1 /sbin/tini -- dockercloud- ... Up 1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp chapter6_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp chapter6_web_1 python app.py Up 5000/tcp #访问自身8080端口 [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 1 times and my hostname is 2e7fe9be9d40. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 2 times and my hostname is 2e7fe9be9d40. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 3 times and my hostname is 2e7fe9be9d40.
- 第四步:将web容器scale成3个节点
[root@docker01 chapter6]# docker-compose up --scale web=3 -d chapter6_redis_1 is up-to-date Starting chapter6_web_1 ... done Creating chapter6_web_2 ... done Creating chapter6_web_3 ... done chapter6_lb_1 is up-to-date [root@docker01 chapter6]# docker-compose psName Command State Ports --------------------------------------------------------------------------------------------------- chapter6_lb_1 /sbin/tini -- dockercloud- ... Up 1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp chapter6_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp chapter6_web_1 python app.py Up 5000/tcp chapter6_web_2 python app.py Up 5000/tcp chapter6_web_3 python app.py Up 5000/tcp
- 第五步:再次访问8080端口,发现已经可以负载到后端的其他容器了,实验成功!!
[root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 4 times and my hostname is 2e7fe9be9d40. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 5 times and my hostname is b087d3960be1. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 6 times and my hostname is 986d2584749b. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 7 times and my hostname is 2e7fe9be9d40. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 8 times and my hostname is b087d3960be1. [root@docker01 chapter6]# curl 127.0.0.1:8080 Hello Container World! I have been seen 9 times and my hostname is 986d2584749b.
已实现扩容和负载均衡,实验过程到此结束~~
转载于:https://www.cnblogs.com/liuguangjiji/p/10631634.html
Docker-07-docker compose相关推荐
- 阿里云服务器Docker及Docker Compose的安装
2019独角兽企业重金招聘Python工程师标准>>> 本文对阿里云ECS服务器如何安装Docker和Docker Compose进行说明,以centOS系统为例. 一.开通外网的E ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- 物联网架构成长之路(24)-Docker练习之Compose容器编排
0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compo ...
- ubuntu18.04 安装(指定版本/最新版)docker与docker compose
安装 Docker sudo apt-get remove docker docker-engine docker.io containerd runc # 卸载旧版本 sudo apt-get up ...
- Docker三剑客之Compose
Docker三剑客之Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用. Compose 基本介绍 Compose ...
- docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限
为了能使容器内的SpringBoot项目的日志方便查看,我想用容器卷挂载的方式,将容器内生成的日志文件挂载到服务器上,实现同步,即使生成了新的镜像,依赖于compose file的配置,也能使日志在服 ...
- docker三剑客之 Docker Machine Docker Compose Docker Swarm
Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...
- Docker容器之compose容器集群的快速编排
Docker容器之compose容器集群的快速编排 前言 一.Docker-compose简介 二.YAML文件格式及编写注意事项 (1)YAML文件格式 (2)YAML格式的注意事项 (3)YAML ...
- Docker 及 Docker Compose 安装及使用教程 (2020版)
文章目录 图文详细教程 1 Docker原理 2 Docker安装 3 镜像(Image) 3.1 获取镜像 3.2 查找拖取镜像 3.3 列出镜像 3.4 删除镜像 3.5 创建的镜像 4 容器(C ...
- Docker使用docker compose搭建Jellyfin私人媒体服务器 个人电影网站
->Docker及docker compose的安装点这里 创建 docker-compose.yml 文件 version: "3" services:jellyfin:i ...
最新文章
- 封闭已久的智能驾驶系统,在云栖大会上,被敲开一个裂缝
- 文件 服务器 要求,文件服务器硬件要求
- 网络时间服务和chrony
- python 类方法 静态方法_python中类方法、类实例方法、静态方法的使用与区别
- 疯狂html5+css3+javascript讲义 pdf_成为一名优秀的HTML5前端工程师需要掌握哪些技能?...
- 关于 jquery select2 多个关键字 模糊查询的解决方法
- jumpserver 使用教程_Jumpserver之快速入门
- 在线CSV转XML/JSON工具
- 编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数
- ROS中使用A星算法进行路径规划
- python 模拟用户点击浏览器_浏览器行为模拟之requests、selenium模块
- 父级fixed_position:fixed相对父级元素定位而不是浏览器
- Android 10.0 Activity启动详解(二)
- KubeFATE 部署多集群联邦学习平台 FATE
- HMS Core电商与游戏行业解决方案,全流程赋能开发者创新
- 独家 | 火灾之后,我们能够利用大数据做些什么?
- Python对象类型及相关操作
- android如何保证service不被杀死
- 如何设置或配置pocket pc,才能让电脑ping通,实现虚拟设备和电脑在同一局域网内;
- bizhubc226说明书_让打印文件不再单调 柯尼卡美能达 bizhub C226为你服务
热门文章
- 搭建vue-cli脚手架
- hadoop-0.20.2完全分布式集群
- 编写 Struts2 程序 的三个步骤 手动配置
- 根据指定的commit查找对应的log
- Linq to sql并发与事务
- bochs2.3.7 调试版本在ubuntu9.10上的编译安装
- JS:ES6-5 rest参数与扩展运算符
- 关于js的一切(updating...)
- 【零基础学Java】—继承的概述(十九)
- python实现语义分割_如何用PyTorch进行语义分割?一文搞定