在编辑Dockerfile过程中参考了以下相关范例:https://hub.docker.com/_/php/、https://hub.docker.com/_/mysql/、https://hub.docker.com/_/nginx/。在build镜像时可能报出异常“containerd: container not started”,此时可能需要重启containerd或系统。

要删除某些无用的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-devENV 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 installENV PATH $PREFIX_MARIADB/bin:$PATH
ADD conf/my.cnf /etc/
RUN chown -R mysql:mysql $PREFIX_MARIADB/data \
&& cd $PREFIX_MARIADB \
&& ./scripts/mysql_install_dbEXPOSE 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

特别说明:此时的MySQL实例只能以 root 从本地访问,可手动配置root密码以及访问权限等。--privileged=true container内的root拥有真正的root权限,容器会被允许直接配置主机的网络堆栈;否则,container内的root只是外部的一个普通用户权限。

四.构建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-jpeg-dir=/usr/lib/x86_64-linux-gnu \--with-png-dir=/usr/lib/x86_64-linux-gnu \
--with-gd \
--enable-exif \--enable-bcmath \ #如果没有自带libbcmath,就sudo apt-get install php-bcmath
"\
&& ./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 mkdir /var/www \&& chown -R www-data:www-data /var/www
###################Chroot#########################################################
#如果不想chroot,这部分可以删除
#chroot的配置是一个大坑,如果你使用到session、sendmail、DNS解析等有关api,可能需要添加复制相应的目录和库文件
#以下只是本人会涉及到的,很少一部分
RUN chown -R root:root /var/www \&& cd /var/www \
&& mkdir -p lib 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 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:$PATHEXPOSE 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/phpMyAdmincp config.sample.inc.php config.inc.php 

特别说明:$cfg['Servers'][$i]['host'] = 'your-real-ip';

3)访问地址http://localhost/phpMyAdmin将出现下图,说明基于容器的nginx+php+mariadb服务环境已经创建成功

转载于:https://www.cnblogs.com/XiongMaoMengNan/p/6256799.html

Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境相关推荐

  1. 为所有PHP-FPM容器构建单独的NGinx Dock镜像

    最近,原文作者一直在使用Docker容器来开发PHP微服务套件.一个问题是PHP应用已经搭建,可以和PHP-FPM和Nginx(取代了简单的Apche/PHP环境)一起工作,因此每个PHP微服务需要两 ...

  2. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

    文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...

  3. Docker/Podman使用入门---从容器构建镜像 提交镜像到服务器UCloud dockerhub

    文章目录 1.docker commit 提交镜像命令 2.将镜像提交到UCloud服务器 step1: 先在UCloud服务器上面,创建镜像仓库 step2: 登录UCloud镜像仓库 step3: ...

  4. 【笔记】基于Docker在MacBook安装Informix Developer Edition

    序言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会 ...

  5. docker 打包mysql_基于docker部署mysql的数据持久化问题

    本人最近在使用docker部署mysql时,在持久化mysql数据时遇到了一个有趣的问题,将排查过程及思考记录在这里,以备后查. 先简单描述下我遇到的问题:在mysql容器中创建了两个数据库,然后使用 ...

  6. 如何使用Docker Volumes在基于Docker的应用程序上启用实时重新加载

    In this post you'll learn how to configure a development environment with live-reload enabled. This ...

  7. 自己动手写Docker系列 -- 5.1实现容器的后台运行

    简介 在前几篇中,我们已经构建了一个基础的镜像,本篇开始做一些进阶的功能,下面就是实现docker中的-d命令,让容器能够后台运行 源码说明 同时放到了Gitee和Github上,都可进行获取 Git ...

  8. ubuntu docker慢_基于docker搭建MulVAL攻击图

    拥抱docker,经常做了一些好玩的东西,想在别人的电脑上运行,都发现一堆问题,不是少一个依赖,就是缺一个环境变量,好不郁闷.于是,将目光锁定在了docker上,只要大家都有docker,自己本地能跑 ...

  9. 贝壳如何docker安装openwrt_基于Docker编译openwrt

    Docker确实是个好东西,当我用MAC OSX下载编译openwrt过程中遇到不少问题时,想到openwrt官网wiki建议使用的Ubuntu,于是我想到了Docker. 至于Docker怎样好,在 ...

最新文章

  1. SpringMVC 如何实现将消息的websocket
  2. 比特币再度遭遇资金“大逃离” 后市前景愈发摇摇欲坠
  3. Java常用的技术网站
  4. Windows on Device 项目实践 4 - 智能风扇制作
  5. CF1305E Kuroni and the Score Distribution
  6. 01-gt;选中UITableViewCell后,Cell中的UILabel的背景颜色变成透明色
  7. 探索性数据分析EDA及数据分析图表的选择
  8. 高校开学返校最新消息!学生票乘车时间延长至5月31日!
  9. [APIO2013]机器人(斯坦纳树)
  10. 比赛计分软件部分界面抓图
  11. JAVA的抽象类和接口
  12. 基于ATMEGA128单片机的播种机控制系统
  13. IIS站点无法启动,万维网发布服务无法开机启动解决办法
  14. win2008虚拟化服务器配置,Win2008虚拟化实战之创建虚拟机
  15. web自动化:web控件交互操作/多窗口处理/网页frame
  16. 标题:史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法。 其中,乘以7是最复杂
  17. 详细理解JS的三座大山
  18. 小米捧红氮化镓快充?看完此文让你秒懂氮化镓!
  19. FX5u控制4个伺服,一个完整的项目 回原点、JOG手动、绝对定位、相对定位、控制等部分
  20. 数据结构:实现图书信息管理系统

热门文章

  1. 数组翻转_算法系列之翻转单词顺序
  2. 乐易家智能机器人价格_安川焊接机器人价格多少钱?核心是质量好
  3. a站手机访问电脑版_公司电脑一键变网盘,支持手机、家里电脑远程访问
  4. hashmap是散列表吗_一篇文章教你读懂哈希表-HashMap
  5. android 蓝牙 setscanmode,蓝牙LE扫描在后台无法在Android M上运行
  6. 面试官:你说一下Redis使用场景都有哪些
  7. 你真的了解防火墙吗?
  8. 用flood测试web服务器响应时间,用Flood测试Web服务器响应时间(1)
  9. Serverless 实战 —— Funcraft OSS ROS 进行 CI/CD
  10. java 打地鼠 源代码_Java实现的打地鼠小游戏完整示例【附源码下载】