最近学习了 docker 的一些东西,docker 应该是未来发展的趋势,非常值得研究。
docker是:“一次封装,到处运行”,因为 docker 决绝了应用环境的问题,安装了 docker 的平台就能跑“docker 包”,这样就决绝了“开发环境能跑,一上线就崩”的尴尬。
这里用 docker 搭建 nginx + php + mariadb 的 web 环境。
创建目录,编辑文件
首先创建关于 docker 的目录,方便之后管理,以及 web 网页文件目录。
1 | $ mkdir -p /home/docker/nginx/conf.d |
然后编辑本地的 nginx 配置文件。
1 | $ cd /home/docker/nginx/conf.d |
1 | server { |
- php:9000 中 php 是一个标识,当把 php-fpm 与 nginx 的 两个 docker 服务进行连接时,用于指定前者的地址。 9000 是 php-fpm 服务的默认端口。
- /var/www/html 是 php 容器中网页的存储路径。
然后编辑本地的 web 网页文件。
1 | $ cd /var/www/testweb |
1 |
|
- servername 设置为 mariadb,原因与上面的 php 同理,是与数据库相连接时的标识。
创建容器
先创建 mariadb 容器:
1 | $ docker run --name testmariadb -itd -e MYSQL_ROOT_PASSWORD=root mariadb |
- --name 容器的名字
- -i 交互模式
- -t 开启一个伪终端
- -d 后台运行
- -e 设置环境变量
再创建 php-fpm 容器:
1 | $ docker run --name testphp -itd -v /var/www/testweb:/var/www/html --link testmariadb:mariadb devilbox/php-fpm:5.6-prod |
- -v 指定主机与容器的映射,/var/www/testweb 是本地网页文件目录,/var/www/html 是容器内网页文件目录。
- --link testmariadb:mariadb,把该容器和 testmariadb 容器链接起来,第二个 mariadb 是该容器在容器间连接时的别名,与之前设置的相对应。
这里没有使用 docker 官方的 php 镜像原因是官方镜像里没有许多扩展模块。devilbox/php-fpm 镜像把一些常用的动态扩展模块如:mysql、redis 都进行了打包。
最后创建 ngnix 容器:
1 | docker run --name testnginx -p 8000:80 -itd -v /var/www/testweb:/usr/share/nginx/html -v /root/docker/testweb/conf.d:/etc/nginx/conf.d --link testphp:php nginx |
- -p 8000:80 暴露容器的 80 端口,并映射到主机的 8000 端口。
查看容器是否已正常运行:
1 | $ docker ps -a |
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
此时数据库还无法进行远程连接,因此进入 mariadb 容器内部:
1 | $ docker exec -it testmariadb /bin/sh |
1 | $ mysql -u root -p root |
开放防火墙后,访问服务器的 8000 端口即可看到测试结果。
到此,docker下搭建 web 服务器的基本配置已经完成。