7. Docker-Compose

7.1 介绍

7.1.1 概念

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

7.1.2 安装

安装官网

https://docs.docker.com/compose/install/

安装在centos 上

  • 需要以下安装环境

    py-pippython-devlibffi-devopenssl-devgcclibc-dev,和make

  • 下载

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 curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 设置权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  • 设置快捷方式

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  • 检查是否成功

    docker-compose --version
    

如果下载太慢的话,使用这个

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 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

或者直接使用pip 安装

centos7 可以选择如下安装

yum -y install python-pip
pip install --upgrade pip
pip install docker-compose
docker-compose -version

centos8 需要使用pip3 命令安装

sudo pip3 install docker-compose

7.2 使用

  • 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
  • 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  • 运行 docker-compose up Compose启动并运行您的整个应用程序。

docker-compose.yml 长成这样子

version: '2.0'
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis
volumes:logvolume01: {}

7.2.1 快速开始

mkdir composetest
cd composetest

创建app.py

import timeimport redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

同目录下创建requirements.txt

flask
redis

创建Dockerfile

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

内容讲解

从Python 3.7映像开始构建映像。
将工作目录设置为/code。
设置flask命令使用的环境变量。
安装gcc和其他依赖项
复制requirements.txt并安装Python依赖项。
向图像添加元数据以描述容器正在侦听端口5000
将.项目中的当前目录复制到.映像中的工作目录。
将容器的默认命令设置为flask run。

创建docker-compose.yml

version: "3.9"
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

目录

启动

docker-compose up

观察连接

http://localhost:5000/

7.2.2 搭建自己的博客wordpress

mkdir my_wordpress
cd   my_wordpress

创建 docker-compose.yml

version: '3.3'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:db_data: {}

启动项目

docker-compose up -d

7.2.3 搭建redis 集群

抄袭别人的

mkdir -p docker/redis docker/sentinel
cd docker/redis
touch docker-compose.yml

下一步编辑docker-compose.yml

version: '3'
services:master:image: rediscontainer_name: redis-mastercommand: redis-server --requirepass 123456ports:- 6379:6379slave1:image: rediscontainer_name: redis-slave-1ports:- 6380:6379command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456slave2:image: rediscontainer_name: redis-slave-2ports:- 6381:6379command: redis-server --slaveof redis-master 6379  --requirepass 123456 --masterauth 123456

进入

cd ../sentinel
touch docker-compose.yml sentinel.conf

编辑docker-compose.yml

version: '3'
services:sentinel1:image: rediscontainer_name: redis-sentinel-1ports:- 26379:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image: rediscontainer_name: redis-sentinel-2ports:- 26380:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image: rediscontainer_name: redis-sentinel-3ports:- 26381:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf

编辑 sentinel.conf

port 26379
dir /tmp
sentinel monitor mymaster 172.19.55.101 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass mymaster 123456

注意点

① 第三行中 mymaster 是可以自定义集群的名字,如果使用其他语言连接集群,需要写上该名字。

② 192.168.223.129是我虚拟机的ip,请换成自己的ip,不要127.0.0.1 否则会链接到你的应用程序去,写IP就可以。

③ 那个2呢,是因为我有3台哨兵,2个投票超过50%了,所以设置2即可,如果是更多,设置超过50%概率就好,自己喜欢。

复制

sudo cp sentinel.conf sentinel1.conf
sudo cp sentinel.conf sentinel2.conf
sudo cp sentinel.conf sentinel3.conf

查看sentinel

分别启动 进入redis 中

cd /usr/local/docker/redis

启动

sudo docker-compose up -d

进入sential

cd /usr/local/docker/sentinel/

启动

sudo docker-compose up -d

查看是否成功

docker ps

docker教程_7 Docker-Compose相关推荐

  1. Docker教程(一) Docker入门教程

    Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...

  2. Docker教程(二) Docker环境安装

    Docker教程(二) Docker环境安装 本文链接:https://blog.csdn.net/yuan_xw/article/details/77248243 Docker教程(二) Docke ...

  3. Docker教程(四) Docker镜像构建

    Docker教程(四) Docker镜像构建 本文链接:https://blog.csdn.net/yuan_xw/article/details/77744272 Docker教程(四) Docke ...

  4. Docker教程(三) Docker网络访问和数据管理

    Docker教程(三) Docker网络访问和数据管理 本文链接:https://blog.csdn.net/yuan_xw/article/details/77504077 Docker教程(三) ...

  5. 【docker教程】docker视频教程(ubuntu)数据卷挂载、数据卷容器volume、端口映射(镜像叠加,分层复用)rootfs、bootfs(没看完)

    黑马程序员Docker容器化技术,从零学会Docker教程 可以先看1-13课.以及 docker概述 文章目录 docker概述 ubuntu安装docker docker架构 配置docker镜像 ...

  6. docker教程_2 docker常见命令

    https://gitee.com/fakerlove/docker 文章目录 2. 入门常用命令 2.1 docker的帮助命令 2.2 docker的镜像命令 查看镜像 搜索镜像 下载镜像 删除镜 ...

  7. 极简的docker教程-在docker上运行微服务

    文章目录 用一个简单的demo了解docker构建自定义镜像 首先用docker拉一个nginx 编写一个Dockerfile 构建 查看自己构建的镜像是否成功了 运行 测试 了解一下Dockerfi ...

  8. 【Docker 教程】Docker 创建镜像

    Docker 创建镜像 当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改. 从已经创建的容器中更新镜像,并且提交这个镜像 使用 Dockerfi ...

  9. Ubuntu系统下载docker教程

    Ubuntu系统下载docker教程 安装Docker 在ubuntu系统上安装docker参考https://docs.docker.com/engine/install/ubuntu/ 1.更行a ...

最新文章

  1. java读取mysql配置文件_一文读懂 MySQL 主从复制读写分离
  2. IdentityServer4 知多少
  3. 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习
  4. android sharedUserId 共享用户
  5. 解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
  6. Qt undefined reference to,Error 255,找不到库函数的解决办法
  7. 统计天数(洛谷-P1567)
  8. mysql-数据库操作-连接-创建-删除-修改编码-查询-切换
  9. MySQL绿色版安装(mysql-5.7.12-win32)
  10. 我们行业有一个同行,他和身边所有的人都交好过,包括我
  11. 0基础如何系统的学习Python? 只要完成这 9 步
  12. 数据分析师如何正确地提意见?
  13. 用pygame实现打飞机游戏-2-检测键盘
  14. PCL教程-PCLVisualizer可视化类的使用
  15. Thrift 在Windows环境下的编译与简单C++应用
  16. Uber 叫车时,弹出以下代码导致无法打车(An email confirmation has been sent to...),解决办法...
  17. Java怎么除以2_哪个更好的选项用于将整数除以2?
  18. 如何升级nodejs版本
  19. 【论文翻译_无数据知识蒸馏_元学习_2022】Up to 100× Faster Data-free Knowledge Distillation
  20. 中序和先序、中序和后序

热门文章

  1. 华为2288H V5服务器安装win_server_2016问题解决过程
  2. python 全部缩进一行_每天三分钟一起学python之(三)python的基本语法
  3. android高德地图黑色,关于安卓高德地图的手机黑屏花屏模糊等症状处理
  4. svn回退到上一个版本_Git汇总--对象及版本库存储
  5. 用Python实现ax²+by的图灵机【形式语言与自动机】
  6. c语言中如何用字母代替加减乘除的符号,c语言加减乘除代码
  7. 生怕认可java+flatmap,RxJava 好难理解的一个 FlatMap 的例子
  8. 实验1 java程序基础_《Java程序设计》实验1
  9. quartz java 实现_Quartz使用-入门使用(java定时任务实现)
  10. 的pro文件添加opencv配置_VS2013+OpenCV3.1.0配置方法