天天看点

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单,代码风格很差。

这篇主要记录了三种docker使用的方式。

用supervisor方式运行一个多进程的docker实例

创建一个ngnix和php运行的环境

创建一个ngnix,php,mysql集合运行的环境,使用docker-compose构建

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接
感觉docker的东西越看越多,从刚开始的简简单单的一个docker run,到现在看到要build自己的镜像,compose,也就是以前的Fig,配置网络,还有swarm的docker集群,一点一点来吧。

先把两个附件写在这里吧

Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。这里使用进程管理工具 supervisor 来管理容器中的多个进程。使用 Supervisor 可以更好的控制、管理、重启我们希望运行的进程。

首先创一个文件夹叫做<code>supervisor</code>,目录结构为

其中文件Dockerfile文件内容为:

文件<code>supervisord</code>内容为:

使用命令进行构建

输出:

使用<code>docker ps</code> 一下

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

使用命令<code>docker exec</code>进入container里面看看

使用passwd修改一下密码,然后在本机的命令行里进行ssh连接吧。

该方法就是直接使用docker命令进行构建一个ngnix,php结合运行的环境,没有使用docker-compose。

先用户根目录<code>~</code>下创建目录,并将该目录设置为Docker的共享目录。

其中<code>default.conf</code>文件内容,这是个nginx的配置文件

index.html 里写一句 HelloW0rld,phpinfo.php里面写一个<code>&lt;?php phpinfo();?&gt;</code>。

然后在命令行下执行命令

好的,如果不出意外,就可以看到phpinfo的界面了。这个是没有添加mysql的测试环境,直接在目录<code>~/Workspace/tmp/www</code>下面放网页就可以直接使用了。

Supervisor给出了一种能够在container中运行多个线程的方法,但是现在还是不知道要怎么样把自己的web服务部署到container中,数据库怎么建,可以有人会说直接使用SFTP将网站直接传到container里,安装数据库,配环境,但是docker中一旦container被删除,内容就没了。像这样将所有服务放在一个容器内的模式有个形象的非官方称呼:Fat Container。与之相对的是将服务分拆到容器的模式。从Docker的设计可以看到,构建镜像的过程中可以指定唯一一个容器启动的指令,因此Docker天然适合一个容器只运行一种服务,而这也是官方更推崇的。下面就记录一下部署一个简单的php程序和数据库联动的测试环境。

整体的文件结构是这样的

我们创建一个这样的目录

mysql目录下的Dockerfile文件只有一行<code>FROM mysql:5.6</code>,也就是直接使用mysql官方镜像5.6,然后使用命令

构建自己的镜像phpenv/mysql。

使用命令

启动镜像,将容器的3306端口绑定到本机的3306端口,其中参数<code>-v</code>后代表使用<code>~/Docker/test/data/mysql</code>挂在到镜像的<code>/var/lib/mysql</code>,也就是替代源镜像的数据库文件目录,让数据库文件目录暴露在本机上,做到数据库内容的持久化。<code>MYSQL_ROOT_PASSWORD</code>为设置mysql的一个root密码。

运行结果

使用DBeaver连接后

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

查看一下当前<code>~/Docker/test/data/mysql</code>数据库目录下的文件

新建一个库docker_test后<code>~/Docker/test/data/mysql</code>数据库目录下的文件

可以发现数据库已经创建好了,也如下图

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

为了验证数据库数据的持久型,我们先停止当前运行的container并产出它,然后从镜像启动一个新的container,如命令

再次连接数据库验证,发现刚才新建的库<code>docker_test</code>还在,数据库文件持久型保存了。

待完善

nginx在构建的时候要替换两个配置文件,Dockfile

挂载文件在docker-compose里进行定义。

php什么也不做,只通过Dockfile

来构建

docker-compose文件

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

下面的代码是今年网络安全周的一个手机在线答题系统,代码很挫,大牛误笑

将目录直接放在<code>~/Docker/test/htdocs</code>下面,然后在test目录下执行<code>docker-compose up</code>,正常情况下,就会跑起来上面的容器,然后按照代码的README将数据库部署就可以运行了。

Docker -- 2 -- 利用docker部署网站和数据库supervisor方式运行一个多进程的docker实例ngnix和php运行的环境ngnix,php,mysql集合运行的环境启动一个真实的代码参考链接

<a href="https://github.com/yeasy/docker_practice/">Docker 从入门到实践</a>

<a href="#">第一本Docker书</a>

<a href="https://github.com/ma6174/blog/issues/8">如何进入一个正在运行的Container</a>

<a href="http://avnpc.com/pages/build-php-develop-env-by-docker">Docker在PHP项目开发环境中的应用</a>

原文链接:

<a href="http://dengnanyi.com/2016/12/24/2016_12/docker-learn-3/">http://dengnanyi.com/2016/12/24/2016_12/docker-learn-3/</a>