Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
2017-01-06 16:26
1206 查看
在编辑Dockerfile过程中参考了以下相关范例:https://hub.docker.com/_/php/、https://hub.docker.com/_/mysql/、https://hub.docker.com/_/nginx/。在build镜像时可能报出异常“containerd: container not started”,此时可能需要重启containerd或系统。
要删除某些无用的images,可执行如下命令:
一.安装Docker
二.在Home下创建如下docker目录(含源码安装包)
conf:配置文件目录,包含nginx.conf、php.ini、 my.cnf以及source.list等。当然这些配置文件并非必须的,可在相关的安装目录下去复制修改源配置文件,只是个人喜欢先准备好这些将要用到的文件。
packages:安装包目录,对于mysql的安装本人采用mariadb源码安装,所有的安装包都是官方下载的最新版。至于phpMyAdmin包是本人在开发测试时喜欢使用的mysql管理界面(客户端),如果最后phpMyAdmin能在容器中跑起来,也就初步说明整个创建过程是成功的。
Dockerfile-PHP-FPM:为构建php镜像而要编写的Dockerfile
Dockerfile-Mariadb:为构建mariadb镜像而要编写的Dockerfile
Dockerfile-Nginx:为构建nginx镜像而要编写的Dockerfile
三.构建mariadb镜像并运行mariadb容器
1.编辑Dockerfile-Mariadb
2.构建mariadb镜像
3.运行mariadb容器
四.构建php镜像并运行php-fpm容器
1.编辑Dockerfile-PHP-FPM
#install extensions & tools for PHP
RUN pecl install redis \
&& php -r "readfile('https://getcomposer.org/installer');" | php \
&& mv composer.phar /usr/local/bin/composer
2.构建php-fpm镜像
3.运行php-fpm容器
特别说明:php-fpm.conf中daemonize = no,否则php-fpm容器无法开启并运行在后台;本人在主机~/web下挂载了卷,绑定到容器/var/www
五.构建nginx镜像并运行nginx容器
1.编辑Dockerfile-Nginx
2.构建nginx镜像
3.运行nginx容器
特别说明:本人在主机~/web下挂载了卷,绑定到nginx容器/usr/local/nginx/html
六.创建新项目进行测试
1)上图是运行php-fpm容器后主机~/web目录结构图,提取~/docker/packages/phpMyAdmin.tar.gz至~/web/public下
2)复制phpMyAdmin配置文件
3)访问地址http://localhost/phpMyAdmin将出现下图,说明基于容器的nginx+php+mariadb服务环境已经创建成功
要删除某些无用的images,可执行如下命令:
sudo docker rmi $(sudo docker images -a|grep none|awk '{print $3 }')
一.安装Docker
sudo apt-get update sudo apt-get install docker.io
二.在Home下创建如下docker目录(含源码安装包)
conf:配置文件目录,包含nginx.conf、php.ini、 my.cnf以及source.list等。当然这些配置文件并非必须的,可在相关的安装目录下去复制修改源配置文件,只是个人喜欢先准备好这些将要用到的文件。
packages:安装包目录,对于mysql的安装本人采用mariadb源码安装,所有的安装包都是官方下载的最新版。至于phpMyAdmin包是本人在开发测试时喜欢使用的mysql管理界面(客户端),如果最后phpMyAdmin能在容器中跑起来,也就初步说明整个创建过程是成功的。
Dockerfile-PHP-FPM:为构建php镜像而要编写的Dockerfile
Dockerfile-Mariadb:为构建mariadb镜像而要编写的Dockerfile
Dockerfile-Nginx:为构建nginx镜像而要编写的Dockerfile
三.构建mariadb镜像并运行mariadb容器
1.编辑Dockerfile-Mariadb
FROM ubuntu MAINTAINER cenze <272666745@qq.com> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && groupadd -r mysql \ && useradd -r -g mysql mysql ADD conf/sources.list /etc/apt/ RUN apt-get update \ && apt-get install -y g++ cmake vim libncurses5-dev zlib1g-dev ENV PKGS="/usr/local/pkgs" ADD packages/mariadb-10.1.19.tar.gz $PKGS/ # install mariadb WORKDIR $PKGS/mariadb-10.1.19 ENV PREFIX_MARIADB="/usr/local/mariadb" RUN mkdir $PREFIX_MARIADB \ && cmake -DCMAKE_INSTALL_PREFIX="$PREFIX_MARIADB" . \ && make \ && make install ENV PATH $PREFIX_MARIADB/bin:$PATH ADD conf/my.cnf /etc/ RUN chown -R mysql:mysql $PREFIX_MARIADB/data \ && cd $PREFIX_MARIADB \ && ./scripts/mysql_install_db EXPOSE 3306 CMD ["mysqld"]
2.构建mariadb镜像
cd ~/docker sudo docker build -t cenze/mariadb -f Dockerfile-Mariadb .
3.运行mariadb容器
sudo docker run -d --name mariadb --privileged=true cenze/mariadb
四.构建php镜像并运行php-fpm容器
1.编辑Dockerfile-PHP-FPM
FROM ubuntu MAINTAINER cenze <272666745@qq.com> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ADD conf/sources.list /etc/apt/ RUN apt-get update \ && apt-get install -y gcc make vim autoconf libssl-dev libpcre3-dev zlib1g-dev libxml2-dev libcurl4-gnutls-dev libpng16-dev libmcrypt-dev \ && ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/ ENV PKGS="/usr/local/pkgs" ADD packages/php-7.1.0.tar.gz $PKGS/ #install php WORKDIR $PKGS/php-7.1.0 ENV PREFIX_PHP="/usr/local/php" RUN mkdir $PREFIX_PHP \ && CONFIG_PHP="\ --prefix=$PREFIX_PHP \
#默认为$PREFIX_PHP/lib,php-fpm启动时将在会自行搜索--sysconfdir[=$PREFIX_PHP/etc]指定目录下的php.ini, #但php以cli模式独立运行时只会在--with-config-file-path[=$PREFIX_PHP/lib]指定目录下搜索php.ini
--with-config-file-path=$PREFIX_PHP/etc \ --disable-cgi \ --enable-fpm \ --with-fpm-user=www-data \ --with-fpm-group=www-data \ --enable-mbstring \ --with-mysqli \ --with-pdo-mysql \ --with-mcrypt \ --with-zlib \ --with-curl \ --with-openssl \ --with-gd \ --enable-exif \ "\ && ./configure $CONFIG_PHP \ && make \ && make install ADD conf/php-fpm.conf $PREFIX_PHP/etc/ ADD conf/php.ini $PREFIX_PHP/etc/ ADD conf/www.conf $PREFIX_PHP/etc/php-fpm.d/ ADD conf/php-fpm $PREFIX_PHP/bin/ RUN chown -R www-data:www-data /var/www ###################Chroot######################################################### #如果不想chroot,这部分可以删除 #chroot的配置是一个大坑,如果你使用到session、sendmail、DNS解析等有关api,可能需要添加复制相应的目录和库文件 #以下只是本人会涉及到的,很少一部分 RUN cd /var/www \ && mkdir -p public dev etc tmp usr/share/zoneinfo var/log \ && cp -a /dev/zero /dev/random /dev/urandom /dev/null dev/ \ && chmod --reference=/tmp tmp/ \ && chown -R root:root . \ && chown -R www-data:www-data public var/log \ && cp /lib/x86_64-linux-gnu/libc.so.6 \ /lib/x86_64-linux-gnu/libdl.so.2 \ /lib/x86_64-linux-gnu/libnss_dns.so.2 \ /lib/x86_64-linux-gnu/libnss_files.so.2 \ /lib/x86_64-linux-gnu/libresolv.so.2 \ lib/ ###################Chroot End###################################################### ENV PATH $PREFIX_PHP/bin:$PATH
#install extensions & tools for PHP
RUN pecl install redis \
&& php -r "readfile('https://getcomposer.org/installer');" | php \
&& mv composer.phar /usr/local/bin/composer
EXPOSE 9000 CMD ["php-fpm","start"]
2.构建php-fpm镜像
cd ~/docker sudo docker build -t cenze/php-fpm -f Dockerfile-PHP-FPM .
3.运行php-fpm容器
sudo docker run -d --link mariadb -v /home/cenze/web:/var/www --name php-fpm --privileged=true cenze/php-fpm
特别说明:php-fpm.conf中daemonize = no,否则php-fpm容器无法开启并运行在后台;本人在主机~/web下挂载了卷,绑定到容器/var/www
五.构建nginx镜像并运行nginx容器
1.编辑Dockerfile-Nginx
FROM ubuntu MAINTAINER cenze <272666745@qq.com> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ADD conf/sources.list /etc/apt/ RUN apt-get update \ && apt-get install -y gcc make vim libpcre3-dev zlib1g-dev libssl-dev \ && ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/ ENV PKGS="/usr/local/pkgs" ADD packages/nginx-1.10.2.tar.gz $PKGS/ # install nginx WORKDIR $PKGS/nginx-1.10.2 ENV PREFIX_NGINX="/usr/local/nginx" RUN mkdir $PREFIX_NGINX \ && ./configure --prefix="$PREFIX_NGINX" --with-http_ssl_module \ && make \ && make install ADD conf/nginx.conf $PREFIX_NGINX/conf/ #WORKDIR $PREFIX_NGINX/html ENV PATH $PREFIX_NGINX/sbin:$PATH EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
2.构建nginx镜像
cd ~/docker sudo docker build -t cenze/nginx -f Dockerfile-Nginx .
3.运行nginx容器
sudo docker run -d -p 443:443 -p 80:80 --link php-fpm -v /home/cenze/web:/usr/local/nginx/html --name nginx --privileged=true cenze/nginx
特别说明:本人在主机~/web下挂载了卷,绑定到nginx容器/usr/local/nginx/html
六.创建新项目进行测试
1)上图是运行php-fpm容器后主机~/web目录结构图,提取~/docker/packages/phpMyAdmin.tar.gz至~/web/public下
2)复制phpMyAdmin配置文件
cd ~/web/phpMyAdmin cp config.sample.inc.php config.inc.php
3)访问地址http://localhost/phpMyAdmin将出现下图,说明基于容器的nginx+php+mariadb服务环境已经创建成功
相关文章推荐
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
- Docker笔记三:基于LVS DR模式构建WEB服务集群
- 实现lamp docker数据容器(mysql)与应用容器(apache+php)独立运行
- 基于Docker搭建MySQL(MariaDB)+ mycat读写分离测试环境
- 用linux构建基于mysql,php的nginx服务平台
- docker容器里面各测试环境部署部署脚本(nginx,php,redis,mysql,nodejs)
- Linux配置手册(八)基于MySQL构建PHP环境
- Docker 生产环境之配置容器 - 一个容器中运行多个服务
- Docker笔记三:基于LVS DR模式构建WEB服务集群
- docker实战1 (docker-toolbox的安装,docker基础命令详解[运行,容器导入/导出,镜像导入/导出,数据卷,网络],构建100个docker实例的测试环境)
- 基于在Apache和MySQL下构建PHP环境(三)
- docker构建Java Web + Mysql运行环境
- Docker容器启动lnmp环境下的mysql服务时报"MySQL server PID file could not be found"错误解决办法
- 基于golang从头开始构建基于docker的微服务实战笔记
- 再用五分钟利用docker升级搭建好php7.0.10服务环境(添加扩展mysql、gd、phalcon)
- [置顶] 基于Dockerfile构建LNMP环境(php7+mysql+nginx) --原创
- Nginx学习笔记——搭建Linux +Nginx+PHP+Mariadb(MySql)开发环境
- 基于Docker构建PHP开发环境