Docker微服务-Dockerfile之Nginx+PHP

目录

一、简介

二、Dockerfile常用命令

三、Nginx镜像制作

1、利用ubuntu先做一个ubuntu基础镜像。

2、创建ubuntu基础镜像

3、基于ubuntu:1.0编写nginx的dockerfile

4、 创建nginx镜像

5、启动成功测试

6、初学编辑者经常遇到的问题

四、PHP镜像制作

1、几个重要的问题

2、测试


一、简介

能把不同的功能组装在一起的一个脚本,比如你想要吃一顿咖喱牛肉。首先你得把牛肉,咖喱包,酱油,盐等作料放到锅里吧,然后抄一抄顿个20来分钟出锅,才能eat。但是dockerfile来了之后,你不需要再炒了,也无需等待。热一下直接开吃,"啊呀,真香"。如果你告诉我连火也打不着,不会使用天然气,这你就得偷你父皇的打火机玩一下了,记住别直接干没气了,小心他抽你,哈哈。

二、Dockerfile常用命令

百度上也很多,这里不再赘述,下面我粘贴了一个连接,可以参考下。

【Docker】之 Dockerfile 指令详解_王廷云的博客的博客-CSDN博客_dockerfile指令

可以参考这篇文章。

*** 下面我给大家介绍一下基于ubuntu的PHP+nginx的环境实现(php和nginx打成一个镜像)。

三、Nginx镜像制作

1、利用ubuntu先做一个ubuntu基础镜像。

因为前期要安装很多依赖命令,如果只写一个dockerfile也行,就是命令多了点,调试比较麻烦,我喜欢先做一部分再做一部分

FROM ubuntu
MAINTAINER itdd
ENV MYPATH /etc/nginx
WORKDIR $MYPATH
RUN apt-get -y update
#安装vim编辑器
RUN apt-get -y install vim
RUN apt-get -y install lrzsz
#安装ifconfig命令查看网络IP
RUN apt-get -y install net-tools
# nginx 依赖
RUN apt-get install -y gcc
RUN apt-get install -y libpcre3 libpcre3-dev
RUN apt-get install -y zlib1g zlib1g-dev
RUN apt-get install -y openssl 
RUN apt-get install -y libssl-dev

CMD echo $MYPATH
CMD echo "success"
CMD /bin/bash

2、创建ubuntu基础镜像

docker build -t ubuntu:1.0 .

3、基于ubuntu:1.0编写nginx的dockerfile

FROM ubuntu:1.0
MAINTAINER itdd
ENV MYPATH /etc/nginx
WORKDIR $MYPATH
RUN apt-get install -y make
RUN mkdir -p /tmp/nginx/
ADD nginx-1.18.0.tar.gz /tmp/nginx/
RUN cd /tmp/nginx/nginx-1.18.0/ && ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
&& make \
&& make install
RUN ln -s /usr/local/nginx/sbin/nginx /usr/bin/
EXPOSE 80 443
ENTRYPOINT ["nginx","-g","daemon off;"]

nginx-1.18.0.tar.gz文件是从官网自己下载的,可以下载合适的版本,放到和dockerfile同一个目录下。 

下载nginx地址: http://mirrors.sohu.com/nginx/

nginx -g daemon off 的作用说两句

Docker容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果docker容器pid=1的进程挂了,那么docker容器便会直接退出。

nginx默认是以后台模式启动的,Docker未执行自定义的CMD之前,nginx的pid是1,执行到CMD之后,nginx就在后台运行,bash或sh脚本的pid变成了1。所以一旦执行完自定义CMD,nginx容器也就退出了。为了保持nginx的容器不退出,应该关闭nginx后台运行

4、 创建nginx镜像

docker build -t ubuntu-nginx:1.0 .

docker run -p 8001:80 -d ubuntu-nginx:1.0

5、启动成功测试

Docker微服务-Dockerfile之Nginx+PHP_第1张图片

6、初学编辑者经常遇到的问题

/bin/sh: 1: ./configure: not found

 如果把

RUN cd /tmp/nginx/nginx-1.18.0/ && ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
&& make \
&& make install

命令分开写成多个RUN就会报上面的错误,因为在制作镜像的过程中,一条命令就是一个镜像,当你上一个命令里执行了cd /tmp/nginx/nginx-1.18.0/的时候,下一个RUN就不在这个目录了,所以需要再一个容器里连续执行。很重要这一点。

四、PHP镜像制作

FROM ubuntu-nginx:1.0
MAINTAINER [email protected]
ENV MYPATH /tmp/php
WORKDIR $MYPATH
# 安装依赖
RUN apt-get update
# 不选时区 可以通过配置环境变量,来跳过这个步骤
ARG DEBIAN_FRONTEND=noninteractive
RUN echo "6" | apt-get install -y pkg-config 
RUN apt-get -y install gcc make openssl curl libssl-dev \
libxml2-dev libzip-dev libcurl4-openssl-dev libpng-dev libjpeg-dev \
libwebp-dev libonig-dev libsqlite3-dev libsodium-dev libargon2-dev
RUN mkdir -p /tmp/php/
ADD php-7.4.30.tar.gz /tmp/php/
RUN cd /tmp/php/php-7.4.30/ && ./configure --prefix=/usr/local/php74 \
--with-config-file-path=/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-curl --enable-fpm \
&& make \
&& make install \
&& cp php.ini-development /usr/local/php74/etc/php.ini 
ADD php-fpm.conf /usr/local/php74/etc/php-fpm.conf 
ADD www.conf /usr/local/php74/etc/php-fpm.d/www.conf
ADD nginx.conf /etc/nginx/nginx.conf
# 复制代码到环境
ADD index.php /usr/local/nginx/html/index.php
RUN groupadd www
RUN useradd -g www www

# 启动文件打入镜像
ADD startServer.sh /tmp/php/startServer.sh
RUN chmod +x /tmp/php/startServer.sh
EXPOSE 80 443
ENTRYPOINT ["./startServer.sh"]

1、几个重要的问题

这里面如果自己安装镜像的时候坑不少,反正就是各种依赖的安装。我简要说几个重点:

1) pkg-config报的安装是因为我在执行 ./configure的时候或者是在make的时候报错了,百度了一下需要安装这个包,解决了。安装这个包还需要填写时区,要不每次打包还需要手动写时区比较麻烦,百度用 ARG DEBIAN_FRONTEND=noninteractive 设置环境变量解决了。

2) nginx的启动程序用户组合php-fpm的启动用户组一样,要不互相访问有权限问题。

3) 当我们环境里有两个启动程序,必须保证一个前台启动一个后台启动,要不然你的容器会启动一直失败。

4) 你中途一定会遇到各种问题,百度查就完事了,大部分网上都有,不要放弃。

2、配置文件介绍

主服务器的目录/tmp/php中的nginx.conf,php-fpm.conf,www.conf是我之前安装过一遍环境从里面复制出来的,你也可以这样操作。

Docker微服务-Dockerfile之Nginx+PHP_第2张图片

 nginx.conf配置文件

Docker微服务-Dockerfile之Nginx+PHP_第3张图片

 启动nginx用户和php-fpm一致

 Docker微服务-Dockerfile之Nginx+PHP_第4张图片

 php-fpm.conf 路径是否正确

Docker微服务-Dockerfile之Nginx+PHP_第5张图片

 Docker微服务-Dockerfile之Nginx+PHP_第6张图片

 index.php没的说了,自己写个测试的文件吧。

 www.conf 启动php-fpm用户名和上面nginx配置文件中的要一致!要一致!要一致,重要的话我说三遍

Docker微服务-Dockerfile之Nginx+PHP_第7张图片

3、构建镜像,创建镜像、测试

docker build -t ubuntu-nginx-php:1.0 .

docker run -p 8005:80 -d ubuntu-nginx-php:1.0

 Docker微服务-Dockerfile之Nginx+PHP_第8张图片

 完美!!!!!

这是我学习的过程中打过的版本镜像有的已经删除了,应该打了20多个吧。过程中确实学到不少

Docker微服务-Dockerfile之Nginx+PHP_第9张图片

你可能感兴趣的:(Docker,docker,微服务,容器)