Docker制作php+nginx的镜像

系统环境:

1.系统环境:Centos 7.3

系统内核信息:

Linux version 3.10.0-514.21.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Thu May 25 17:04:51 UTC 2017

2.Centos中安装docker

yum install docker.x86_64

docker --version  #安装完

Docker version 1.12.6, build 85d7426/1.12.6

#启动docker

systemctl start docker

#设置开机自动启动

chkconfig docker on

3.修改docker的镜像地址(修改到国内地址比较快):

vim /etc/docker/daemon.json 在json文件中增加

"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

4.docker 默认的容器和镜像存储的位置:/var/lib/docker

修改docker默认的容器和镜像存储位置:

#停止镜像

systemctl stop docker

mv /var/lib/docker /data/docker

ln -s /data/docker /var/lib/docker

systemctl start docker

5.php+nginx的镜像制作方式采用成熟centos镜像拉起容器后再加进编译进nginx+php后使用docker file定制容器

    5.1.下载镜像及启动容器

docker pull centos

docker run -it --name nginxPhp centos bash(这种方式启动docker后,当退出伪tty终端时,这个容器也就停止了)

docker ps 查看当前正常执行的容器

docker ps -a 查看所有镜像包含退出,停止,异常的容器

注意当希望docker使用daemon守护进程方式后台启动时,需要启动后的容器内一直有个前端进程运行,不然就会遇到容器已启动就已经自动退出的机制。

      docker run -d --name nginxPhp centos  这个命令进去后啥也没做,所以这个容器直接就又关闭了。

变通解决方案:

docker run --name test2 -d centos /bin/bash -c "while true;do echo hello;sleep 1;done"

5.2.进入容器进行安装nginx和php

官网下载nginx和php 的编译包,nginx1.13.7,php-7.2

将nginx,php安装包:nginx-1.13.7.tar.gz,php-7.2.0.tar.gz放至宿主机 /data/soft下,安装nginx

重新启动一个新的容器挂载进宿主机目录

docker run --name test3 -v /data/soft:/data/soft -d centos /bin/bash -c "while true;do echo hello;sleep 1;done"

docker exec -it test3 bash

为php,nginx安装基础组件: yum -y install pcre-devel gcc libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libxslt-devel.x86_64 libxslt.x86_64 

安装完后进入cd /data/soft/nginx-1.13.7

./configure--prefix=/data/soft/nginx \

--user=root--group=root \

--with-pcre \

--with-ipv6 \

--with-http_ssl_module \

--with-http_gzip_static_module

make&& make install

ln -s /data/soft/nginx/sbin/nginx /usr/local/bin/nginx

继续安装php

cd /data/soft/php-7.2.0

./configure --prefix=/data/soft/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir \ --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql \ --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath \ --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache \ --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --with-jpeg-dir \ --with-mcrypt

make && make install


退出容器将此容器提交打上版本的镜像

docker commit --auther=gaogao --message='安装完php,nginx的基础包'  test3 centos:v1

使用新的镜像启动容器,这一次启动时进行端口的绑定,将宿主机的80绑定到容器80

docker run --name test4 -v /data/soft:/data/soft -v /data/website:/data/website -p 80:80 -d centos:v1 bash -c "while true;do echo hello;sleep 1; done"

docker exec -it test4 bash

nginx 启动

/data/soft/nginx/sbin/nginx

退出宿主机,使用浏览器访问宿主机IP,已经可以访问nginx的默认页面。

docker,还有太多的东西,等待继续..