网上看过了很多教程,在docker容器里面例如php-fpm容器里面进行发送邮件文章,都是没有正确的。今天我自己亲自进行了实验最终成功发送邮件ok。
我们为什么要这样做呢,我们以docker容器为例子(如果你是linux服务器可以直接使用命令进行安装)接下来我们跟着我看下去,我们在注册用户或者忘记密码时都需要邮件进行验证和确认等。那么对于docker容器我们如何做到呢?
docker的世界里面万事皆为容器-【就像一个一个箱子,彼此互不干扰】,所以我们可以在箱子里面放置我们需要的软件或者程序,例如:在一个箱子里面我们可以安装PHP,Mysql,Apache等等
发送邮件如何做到呢?一般情况下当你在docker里面安装了php-apache容器那么他就是这个php-apache软件,没有其他多余的服务,这也是它的优势之处。 【可以继续秒启动和关毕等等】
第一步:安装docker容器使用的时Dockerfile进行安装,这样安装不需要进入容器里面在继续安装,直接在宿主机进行安装完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | FROM php:5.6-apache MAINTAINER hello<sky8g@qq.com> ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y \ sendmail sendmail-cf m4 \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ libicu-dev \ libxml2-dev \ vim \ wget \ unzip \ git \ && docker-php-ext-install -j$(nproc) soap pdo pdo_mysql mysqli \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini \ && echo "ServerName "$(hostname -I) >> /etc/apache2/apache2.conf \ && sed -i '/#!\/bin\/sh/aservice sendmail restart' /usr/local/bin/docker-php-entrypoint \ && sed -i '/#!\/bin\/sh/aservice apache2 restart' /usr/local/bin/docker-php-entrypoint \ && sed -i '/#!\/bin\/sh/aecho "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts' /usr/local/bin/docker-php-entrypoint \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* CMD [ "/bin/bash" ] |
以上代码里面安装了两个软件,一个php 和一个是sendmail软件。
1 2 3 4 5 6 7 8 9 | apt-get update \ && apt-get install -y \ sendmail sendmail-cf m4 \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ libicu-dev \ libxml2-dev |
上面这一部分是安装email邮件服务的。下面是进行的命令是进行配置的。
1 2 3 4 | echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini \ echo "ServerName "$(hostname -I) >> /etc/apache2/apache2.conf \ sed -i '/#!\/bin\/sh/aservice sendmail restart' /usr/local/bin/docker-php-entrypoint \ sed -i '/#!\/bin\/sh/aservice apache2 restart' /usr/local/bin/docker-php-entrypoint \ |
开机启动apache2和sendmail的。
第二步:进行编译并创建自己的新的镜像【php+apache+sendmail一体的镜像】。
1 | $ docker build -t webservice:1.0 . |
其中 webservice是镜像的名字,1.0是tag,.点是当前的路径。就如下面的图一样。
第三步:对进行编译好的新的镜像 webservice:1.0 ,进行运行。
1 2 | [root@ip-10-1-91-28 test]# docker run -itd --name web-app --restart always -p 8009:80 webservice:1.0 /bin/bash 4b951d48bae11a36d77c0dbe5b70534afa1710a88f2934492a57dfd80c981fba |
-itd:表示的是后台运行。
–name:给运行的镜像起了一个别名字。
–restart always:开机既可以运行【既是宿主机开机就可以运行你们服务】
-p 8009:80:宿主机的8009端口映射到容器里面的80端口。【既是宿主机里面的8009端口的数据都会转发到docker容器里面】
webservice:1.0:使用运行时的开机镜像。
/bin/bash:开机后docker容器使用的镜像。
以上就是配置web服务发送邮件成功案例。