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,还有太多的东西,等待继续..