一、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相关推荐

  1. 阿里云服务器Docker及Docker Compose的安装

    2019独角兽企业重金招聘Python工程师标准>>> 本文对阿里云ECS服务器如何安装Docker和Docker Compose进行说明,以centOS系统为例. 一.开通外网的E ...

  2. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  3. 物联网架构成长之路(24)-Docker练习之Compose容器编排

    0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compo ...

  4. ubuntu18.04 安装(指定版本/最新版)docker与docker compose

    安装 Docker sudo apt-get remove docker docker-engine docker.io containerd runc # 卸载旧版本 sudo apt-get up ...

  5. Docker三剑客之Compose

    Docker三剑客之Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用. Compose 基本介绍 Compose ...

  6. docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限

    为了能使容器内的SpringBoot项目的日志方便查看,我想用容器卷挂载的方式,将容器内生成的日志文件挂载到服务器上,实现同步,即使生成了新的镜像,依赖于compose file的配置,也能使日志在服 ...

  7. docker三剑客之 Docker Machine Docker Compose Docker Swarm

    Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...

  8. Docker容器之compose容器集群的快速编排

    Docker容器之compose容器集群的快速编排 前言 一.Docker-compose简介 二.YAML文件格式及编写注意事项 (1)YAML文件格式 (2)YAML格式的注意事项 (3)YAML ...

  9. Docker 及 Docker Compose 安装及使用教程 (2020版)

    文章目录 图文详细教程 1 Docker原理 2 Docker安装 3 镜像(Image) 3.1 获取镜像 3.2 查找拖取镜像 3.3 列出镜像 3.4 删除镜像 3.5 创建的镜像 4 容器(C ...

  10. Docker使用docker compose搭建Jellyfin私人媒体服务器 个人电影网站

    ->Docker及docker compose的安装点这里 创建 docker-compose.yml 文件 version: "3" services:jellyfin:i ...

最新文章

  1. 封闭已久的智能驾驶系统,在云栖大会上,被敲开一个裂缝
  2. 文件 服务器 要求,文件服务器硬件要求
  3. 网络时间服务和chrony
  4. python 类方法 静态方法_python中类方法、类实例方法、静态方法的使用与区别
  5. 疯狂html5+css3+javascript讲义 pdf_成为一名优秀的HTML5前端工程师需要掌握哪些技能?...
  6. 关于 jquery select2 多个关键字 模糊查询的解决方法
  7. jumpserver 使用教程_Jumpserver之快速入门
  8. 在线CSV转XML/JSON工具
  9. 编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数
  10. ROS中使用A星算法进行路径规划
  11. python 模拟用户点击浏览器_浏览器行为模拟之requests、selenium模块
  12. 父级fixed_position:fixed相对父级元素定位而不是浏览器
  13. Android 10.0 Activity启动详解(二)
  14. KubeFATE 部署多集群联邦学习平台 FATE
  15. HMS Core电商与游戏行业解决方案,全流程赋能开发者创新
  16. 独家 | 火灾之后,我们能够利用大数据做些什么?
  17. Python对象类型及相关操作
  18. android如何保证service不被杀死
  19. 如何设置或配置pocket pc,才能让电脑ping通,实现虚拟设备和电脑在同一局域网内;
  20. bizhubc226说明书_让打印文件不再单调 柯尼卡美能达 bizhub C226为你服务

热门文章

  1. 搭建vue-cli脚手架
  2. hadoop-0.20.2完全分布式集群
  3. 编写 Struts2 程序 的三个步骤 手动配置
  4. 根据指定的commit查找对应的log
  5. Linq to sql并发与事务
  6. bochs2.3.7 调试版本在ubuntu9.10上的编译安装
  7. JS:ES6-5 rest参数与扩展运算符
  8. 关于js的一切(updating...)
  9. 【零基础学Java】—继承的概述(十九)
  10. python实现语义分割_如何用PyTorch进行语义分割?一文搞定