目录

一、简介

二、Dockerfile常用命令

三、Nginx镜像制作

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

2、创建ubuntu基础镜像

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

4、 创建nginx镜像

5、启动成功测试

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

四、PHP镜像制作

1、几个重要的问题

2、测试


一、简介

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

二、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-devCMD 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、启动成功测试

dockerfile搭建lamp环境 dockerfile构建nginx+php_nginx

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 2417876887@qq.com
 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是我之前安装过一遍环境从里面复制出来的,你也可以这样操作。

dockerfile搭建lamp环境 dockerfile构建nginx+php_nginx_02

dockerfile搭建lamp环境 dockerfile构建nginx+php_docker_03

 nginx.conf配置文件

dockerfile搭建lamp环境 dockerfile构建nginx+php_微服务_04

 启动nginx用户和php-fpm一致

 

dockerfile搭建lamp环境 dockerfile构建nginx+php_微服务_05

 php-fpm.conf 路径是否正确

dockerfile搭建lamp环境 dockerfile构建nginx+php_微服务_06

 

dockerfile搭建lamp环境 dockerfile构建nginx+php_dockerfile搭建lamp环境_07

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

dockerfile搭建lamp环境 dockerfile构建nginx+php_docker_08

要一致!要一致!要一致,重要的话我说三遍

dockerfile搭建lamp环境 dockerfile构建nginx+php_微服务_09

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

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

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

 

dockerfile搭建lamp环境 dockerfile构建nginx+php_dockerfile搭建lamp环境_10

 完美!!!!!

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

dockerfile搭建lamp环境 dockerfile构建nginx+php_nginx_11