每天给自己一个希望,试着不为明天而烦恼,不为昨天而叹息,只为今天更美好。
一、前期预备工作:创建image仓库镜像
本次使用docker 构建一个discuz论坛的容器
1.1 先创建一个本次实验的文件夹目录
➜ docker mkdir docker-discuz && cd docker-discuz
➜ docker-discuz
构建一个php的容器,并做简单的测试。
➜ docker-discuz docker container run --rm --name discuz --volume "$PWD/":/var/www/html php:5.6-apache
这个命令是基于php的镜像文件,创建了一个容器, 并且自带apache 服务器,上述命令的几个参数的含义
--rm: 停止运行后,自动删除服务器
--name discuz:容器的名字,这里定义为discuz
--volume "$PWD/":/var/www/html :将当前目录($PWD)映射到容器的/var/www/html(Apache 服务器默认的目录)。因此,当前目录的任何修改,都会同步到容器中,从而被外部访问到。
启动之后,会分配一个ip我们访问测试一下
➜ docker-discuz docker container run --rm --name discuz --volume "$PWD/":/var/www/html php:5.6-apache
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
可以看到这里的ip为 172.17.0.3,访问如果得到如下画面,就表示容器构建成功。
image.png
因为这里我是通过调用远程服务器的,所以这个ip没办法在当前电脑直接访问,所以,在启动容器时,同样可以指定一个ip,停掉上面的容器(因为加了--rm,因此在容器停止运行时,容器会被清理,如果启动时忘了加上--rm参数,可以参考前面的笔记去删掉这个容器)
➜ docker-discuz docker container run -d -p 192.168.1.202:80:80 --rm --name discuz --volume "$PWD/":/var/www/html php:5.6-apache
# -d 参数表示后台运行
# -p 表示容器启动时,给定 这个ip地址 80:80 表示,把容器中的80端口(冒号后面的80),映射给物理机80端口(冒号前面的80)
然后在本地电脑尝试访问一下
image.png
一切都很顺利,接下来,看看目录映射是否成功,在当前目录下,创建一个php文件,内容如下
<?php
phpinfo();
?>
因为php是解释运行的语言,这里不用重启容器,可以直接访问看看映射目录是否成功
image.png
很幸运,一切都按照我们的预想来的,接下来,就去准备discuz的安装包,放到当前目录(已经测试成功可映射到容器的apache访问目录)
1.2 开始安装部署discuz
discuz官方网站
https://www.discuz.net/forum.php
这里我用这个版本
https://files.gitee.com/group1/M00/0A/98/wKgCNF3jszaAR3zfALQPsgJPd6k089.zip?token=d86601ae859d6b7174a07433e77fb827&ts=1584378548&attname=Discuz_X3.4_SC_UTF8%E3%80%9020191201%E3%80%91.zip&disposition=attachment
下载到当前目录之后,解压,然后在浏览器就可直接安装,根据我上面配置的IP地址,我的访问地址是
[http://192.168.1.202/upload/install/](http://192.168.1.202/upload/install/)
image.png
这里能访问之后,在创建一个mysql的镜像,discuz需要连接mysql才能正常工作。
1.3 准备一个mysql容器
➜ docker-discuz docker container run -d --name discuzdb --env MYSQL_ROOT_PASSWORD=123456 --env MYSQL_DATABASE=discuz mysql:5.7
上面中,几个参数的含义
-d: 容器启动之后,后台运行
--name discuzdb:容器名称
--env MYSQL_ROOT_PASSWORD=123456:向容器进程传入一个变量
该变量会被作用MySQL的ROOT用户的密码
--env MYSQL_DATABASE=discuz:容器里面的MySql会根据该变量创建一个同名数据库
1.4 修改容器
php官方的image不带有mysql扩展,因此,必须自己新建image文件
由于上一次是背景执行,可以根据前面容器章节学到的知识,停止这个容器
#查看正在运行的容器
➜ docker-discuz docker container ls
可以看到 一个为discuz的容器,另一个则是上面创建的mysql的容器
image.png
停止discuz这个容器
➜ docker-discuz docker container stop d9885188acd5
d9885188acd5
因为启动时加了--rm因此,停止之后,容器会自动被删除。
接下来,在discuz这个目录创建 一个Dockerfile文件,下入如下内容
FROM php:5.6-apache
RUN docker-php-ext-install mysqli
CMD apache2-foreground
Dockerfile文件内容说明,请参与前面的Dockerfile文件的内容
新建这个镜像
➜ docker-discuz docker build -t discuz-mysql-web .
Sending build context to Docker daemon 43.15MB
Step 1/3 : FROM php:5.6-apache
---> 24c791995c1e
Step 2/3 : RUN docker-php-ext-install mysqli
---> Using cache
---> eaed6408ae5e
Step 3/3 : CMD apache2-foreground
---> Using cache
---> b4ea8a7a6c77
Successfully built b4ea8a7a6c77
Successfully tagged discuz-mysql-web:latest
1.5 让discuz和mysql相遇。
现在基于discuz-mysql-web 的image 重新创建一个 discuzweb的容器。
docker container run \
-d -p 192.168.1.202:80:80 --rm \
--name discuz-web \
--volume "$PWD/":/var/www/html \
--link discuzdb:mysql \
discuz-mysql-web
和之前单独启动一个容器比较,这里多了--link discuzdb:mysql 参数,表示discuz-web容器需要连接到discuzdb容器,冒号后面表示该容器的别名
,此时需要修改一下 当前目录也就是 docker-discuz目录的访问权限
sudo chmod -R 777 docker-discuz
接下来,在浏览器输入上面配置的ip,就可以安装discuz了。
image.png
安装前的一些检查
image.png image.png
选择全新安装
image.png
配置数据库
这里的服务器就用 link后面参数给的别名,
数据库名用discuzdb创建后面给的库名,和密码
其他根据自己实际情况填写
开始安装
image.png
安装成功
image.png
一个用docker构建的服务就完成了
image.png
经过一番操作之后,我们发现,在docker的这种方式,显示创建数据库容器,在添加web容器,虽然省去了搭建运行环境的时间,但是当项目模块比较多时,必须手动分别启动多个容器,因此Docker提供了
docker-compose
工具,下节,接着学习Docker Compose
本文参考自
https://docs.docker.com
http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html
如有侵权,请联系我尽快修改|删除
幸运!都是自己给自己带来的
完结,撒花
image.png
image.png
image.png
网友评论