使用docker-compose 大杀器来部署服务 上(转载)

转自:https://www.cnblogs.com/neptunemoon/p/6512121.html
我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始。 好吧,可能在小白的眼中噼里啪啦的对着 term 一顿操作会很拉风,但是高手很不屑!在高手眼里…too young, too low. 因为高手都是自动化的,今天就稍微介绍下自动化工具,也就是大杀器 docker-compose

使用docker-compose 大杀器来部署服务 上

    先从 docker 说起

        docker 简介

        为什么说 docker 是快速部署

            好了, 我们进化到,快速1.0 时代

            于是, 我们又进化了, 快速2.0时代

            于是,我们再次加入光荣的进化, 快速3.0时代

        docker 安装

        docker 的一些概念

镜像

性能损耗

容器

hub

docker 简单使用

搜索镜像

下载镜像

helloworld

我常用的 docker 命令

登录

查看容器

查找镜像

下载镜像

删除镜像

开始

看日志

停止一个容器示例

查看容器状态

格式

更快更好更强

docker-compose 简介

docker-compose 是什么

为什么要用 docker-compose,他解决了什么

那么哪里可以买到呢?

从一个小例开始

先安装吧

helloworld

服务更新

软升级

硬升级

从日志得到需要的信息

直接使用 logs

使用类似linux tail 命令

docker-compose 常用命令

docker-compose 如何配置

depends_on: 依赖

image: 镜像

environment 环境变量

ports 端口映射

volumes 文件映射

docker-compose 需要注意的

针对需求开始部署了

设定一个需求

简单的单机部署

python 环境搭建

django 环境搭建

docker-compose.yml 写作

django 构建工程

django 数据库设定

开始运行

数据库同步

集群部署

使用docker-compose 大杀器来部署服务 下

参考

先从 docker 说起

我知道可能有些看到这篇文章的朋友没有了解或者使用过 docker,那我就在这里做一个小小的介绍,已经有过了解的朋友请直接从docker-compose部分看起.

docker 简介

想要理解 docker 是啥,就要先说说 docker 可以解决啥

一句话来说

docker 是一种容器技术,作用是用来快速部署服务

为什么说 docker 是快速部署

我们做一个项目,最不想面对的不是开发,也不是调试,而是部署!!!!

比如你这个机器上的环境是 python3 你用另一个机器上却是 python2 或者压根就没有 python 环境。

好了,这个时候你怎么解决呢。 对,只要去新机器上你就要部署 python。

嗯~ 好吧, 部署 python 就 python,但是你的项目里面还要用到 MySQL,好的没问题, 你又要去用 pip 去安装 python 的 mysql 模块。 哦对了, 我记我们的项目里面还有 redis, 两种非对称加密,还有三方队列, 哦, 还有阿里云的接口,对对对对对对哦。 乱七八糟的东西真的好多,搞完了几个小时没有了,遇到网络卡了,那就更没有谱了。

好了, 我们进化到,快速1.0 时代

我们把要安装的东西全都放进离线安装包里面,再写个 bash 脚本

对,这种事情真的有过。 部署全靠一个 bash 脚本,毕竟不用手动了么。 可是就是苦了写脚本的人,我就写过一个脚本写了好久。

于是, 我们又进化了, 快速2.0时代

我们把整个系统做成了镜像,存在了光盘里面,每当要架设的时候赶快用镜像做出一个新的系统!

可能经历过的自然会懂,还特么要做镜像啊,离机房远咋办啊!!我们做游戏,开服快,更新更快!我们版本更新过快怎么办啊!!我们还要刻刻刻么? 我们的 tornado 又更新了,我去,我们客户端的 protobuf 也更新了,可是我们有100台服务器啊,为了这一点小小的东西更新么?西八!

于是,我们再次加入光荣的进化, 快速3.0时代

我们把服务装进了 docker 中

我们把做好的镜像,一个命令 pull 了下来,嗯,蛮快又一个命令 docker start XXXXXX 服务起来了。哦,你说多服务?好吧那就写个docker-compose.file吧。 嗯哼? 你说集群部署 来来来, 有Kubernetes、Mesos,Fleet和Swarm 任君挑选,不好用不要钱。

docker 是部署的最佳辅助,即使你烂成渣渣,docker 也可以扶你上王者。

docker 安装

很简单 docker官网

Get docker 之后, 有图型系统(windows 之类)的有下一步,下一步。 有 term 接口的。 有 apt-get 之类的软件管理。

安装非常简单,不值得一说。

docker 的一些概念

镜像

对!就和我上面说的使用光盘拷贝已经有的镜像一样,我们的镜像是指一个系统的镜像

我们的镜像都是基于 linux 的准确来说是基于 ubuntu 的。 

docker 镜像可以理解为,你在 win 下用ghost 拷贝出来的磁盘镜像。不过他是 linux 版的。

性能损耗

得益于现在的 linux 内核的 namespace, 我们可以拥有各种直达内耗的容器可以用,你在 docker 中的进程其实进程就是直接的宿主机进程,这一切都在系统启动 clone 函数的时候就决定了, 所以谈不上性能损耗。

容器

容器本身就是我们最重要的概念,我们使用 docker 要做的就是容器这个东西。

简单来说容器是一个镜像的实例

更通俗来说容器就像你用 vm 或者 virtualbox 使用镜像创建的一个虚拟机实例

hub

就是镜像仓库。

如果你写代码,你肯定就知道 github,我们把代码托管到 github 之上。

如果我们部署,我肯定就要用 dockerhub, 我们把镜像托管到 docker hub 上(当然我们也可以假设,或者是用别人假设的hub)

国内有很多三方 dockerhub 服务器, 有阿里云,网易蜂巢,有容云,daocloud 等等等等

至于国外那就更多了,如果非要推荐一家,那就是 amazon 了,毕竟云服务他们家宇宙最强,没有之一,没有对手。

docker 简单使用

搜索镜像

docker search xxx

比如我要架设一个 wordpress,我直接就用

docker search wordpress

第一列就是你可以选择使用的镜像,你当然可以自己制作镜像,而且很容易,但是如果我们入门的话就直接用别人做好的吧。

下载镜像

我直接用第一个吧

git pull wordpress

这个是在下载镜像的过程中


下载完成


helloworld

程序员的老惯例了


这句其实就相当于你的镜像

做到 helloworld 了你就算是入门了。哈哈哈。

推荐一个写很有层次感的入门docker入门教程

我常用的 docker 命令

你可以使用帮助看一个命令的大概


登录

登录你自己的 dockerhub 账户,要去注册哦

来docker hub注册啊

docker login

查看容器

查看你已经下载好的镜像

docker images

查找镜像

docker search XX

下载镜像

docker pull xx

删除镜像

docker rmi xx

开始

docker run 你的镜像

看日志

docker logs 你的容器

停止一个容器示例

docker stop 你的容器

查看容器状态

docker stats 你的容器

格式

基本上都是这个格式 ,根据上面写好的注释,很容易去使用

更快更好更强

    使用 dockerfile

    使用 crontab

    使用 supervisr

略, 这个要扯起来就太长了

docker-compose 简介

一句话

docker-compose 是用来做docker 的多容器控制

docker-compose 是什么

docker-compose 是一个用来把 docker 自动化的东西。

有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。

为什么要用 docker-compose,他解决了什么

用通俗的语言来说,我们平时操作 docker 还是很原始的一系列动作,你手动使用 docker 的动作可以拆分成

找到一个系统镜像 // docker search

安装好 vm 或者 virtual box // apt-get install docker

在 vm 中安装镜像 // docker run -d -it 你的镜像

略..

这是最小的动作, 如果你要映射硬盘,设置nat网络或者桥接网络,等等…你就要做更多的 docker 操作, 这显然是非常没有效率的。

但是我们写在 docker-compose.file 里面就很好了。 你只需要写好后 只运行一句

docker-compose up -d

一切都是那么的简单

那么哪里可以买到呢?

你要你能上网,到处都可以得到他。

我自己的机器上有 python&pip 的环境,所以我的安装非常简单

先确定你是不是安装了 docker

没有安装请看上面的文章

我的环境是

linux-ubuntu:python2:pip

所以我的安装

pip install docker-compose

如此简单

从一个小例开始


先安装吧

如果你和我的环境相同,请直接看我的 docker-compose 安装

如果是别的话,别担心,这里有

安装指南

helloworld


服务更新

软升级

还比如

你的 nginx 更新了配置文件之后

docker-compose restart nginx

硬升级

docker-compose stop

升级你的程序

你要重新

docker-compose up

从日志得到需要的信息

直接使用 logs

docker-compose logs nginx

欧 shit 直接给我屏幕刷爆了

使用类似linux tail 命令

我们的 tial 命令一般是什么样的呢

tail -f xx.file

我们的docker-compose log 却是这样

root@ubuntu:~# docker-compose logs -f --tail 10 nginx

最近的10条开始


docker-compose 常用命令


解释一下

docker-compose 如何配置

先看看我自己写的一个 docker-compose.yml


version:docker-compose的版本

nginx 和 mariadb,wordpress 是要启动的三个服务

顺序不是重要的,我们看见wordpress中有个 depends_on: 的属性

depends_on: 依赖

代表wordpress 依赖于

- mariadb- nginx

两个服务, 所以他们两个会先启动

image: 镜像

就是你的 docker 镜像

我们用

docker search mariadb

找到我们需要的镜像


好了,就是bitnami/mariadb了

如果你看见有的么有 images ,而是一个 build, 那个说明这个不是用镜像的,而是使用 dockerfile 去构建容器。

如果要说 dockerfile 又要花很久了

想了解 dockerfile 可以看这里

编写Dockerfile

environment 环境变量

这个是在好理解不过的了。

不过这和我们程序语言设计层面的还是不一样的,这个是容器层面的环境变量。

如果我们写程序做一些逻辑判断的时候,肯定会使用

比如我们判断现在的编译器,我们会使用

#if __GNUC__ 或者 #if _MSC_VER

相应的,我们的容器里面肯定也有这样的逻辑,我们经常使用环境变量来传值,或者定义一个行为。写过程序的人都懂。

ports 端口映射

映射本机还有镜像的端口。这个没有什么好说的。

volumes 文件映射

有两种格式,

可以对应 docker 操作中的 -v my/path/:/docker/path

还可以使用单方面的 -v /path 

这样的话 就相当于 一个匿名映射, 其实还是在本机有对应目录的。

使用docker inspect -f {{.Volumes}} /path 可以看到详细信息

相对这个了解更多的 深入理解Docker Volume

docker-compose 需要注意的

我根据我自己的体验,给出几点需要注意的

不要把 docker 当做数据容器来使用,数据一定要用 volumes 放在容器外面

不要把 docker-compose 文件暴露给别人, 因为上面有你的服务器信息

多用 docker-compose 的命令去操作, 不要用 docker 手动命令&docker-compose 去同时操作

写一个脚本类的东西,自动备份docker 映射出来的数据。

不要把所有服务都放在一个 docker 容器里面

针对需求开始部署了

设定一个需求

我假定现在我们的需求是做一个博客系统

我们的第一印象肯定是 wordpress, 没有比这个更专业的了, 当然还有很多,我们使用 django 吧

用过 django 的肯定会知道, django 一开始是要构造工程的。

还有数据之类的

我们拟订一个过程

python 环境搭建

django 环境搭建

docker-compose.yml 写作

django 构建工程

django 数据库设定

开始运行

数据库同步

简单的单机部署

python 环境搭建

Dockerfile

ENV PYTHONUNBUFFERED 1

RUN mkdir /root/testdjango/code    #都写上绝对路径, 注意不要跟我一样。

WORKDIR /root/testdjango/code

ADD requirements.txt /root/testdjango/code/

RUN pip install -r requirements.txt

ADD . /root/testdjango/code/

python 的pip 有一个requirements.txt 文件来专门放依赖环境的

django 环境搭建

requirements.txt

Djangopsycopg2

docker-compose.yml 写作


django 构建工程

docker-compose run web django-admin.py startproject docker_composeexample .

django 数据库设定

我们做了 volumes, django 的东西在本地有映射。

做过 django 的人都知道 ,我们的设定都在 settings.py 中


开始运行

docker-compose up

数据库同步

docker-compose run web python manage.py syncdb

集群部署

敬请期待本文的下一篇

使用docker-compose 大杀器来部署服务 下

参考

Docker Compose—简化复杂应用的利器

docker-compose 安装指南

使用Docker Compose管理多个容器

docker 入门到实践

阿里云上部署和使用Docker Swarm集群

使用Docker Compose部署基于Sentinel的高可用Redis集群

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容