第六章:Dockfile

1.Dockfile常用命令
php引擎解析动态数据发送给浏览器页面。
  

  

  

  

  

   

测试案例:构建php镜像。
[root@linux-node1 ~]# mkdir test
[root@linux-node1 ~]# cd test/
[root@linux-node1 test]# vim Dockerfile
[root@linux-node1 test]# cat Dockerfile
#created by meng at 201805
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql --with-mysqli \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && \
make install && \
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
[root@linux-node1 test]# unzip Dockerfile.zip
[root@linux-node1 test]# ll
total 216392
-rw-r--r-- 1 root root 963 May 1 16:38 Dockerfile
-rw-r--r-- 1 root root 202285703 May 1 09:05 Dockerfile.zip
drwxr-xr-x 2 root root 69 Jan 12 17:30 nginx
drwxr-xr-x 2 root root 64 Jan 12 17:40 php
-rw-r--r-- 1 root root 19288947 Jul 5 2017 php-5.6.31.tar.gz
drwxr-xr-x 2 root root 110 Jan 12 17:45 tomcat


2.构建php网站平台镜像
[root@linux-node1 test]# docker build -t php:v1 .
HEALTHCHECK参数:有时候容器里面的服务发生异常但没有挂了,容器状态是好的,但是肯定是没法处理请求了。若要及时发现这种情况,可以设置该参数,保证容器里面的服务和容器的状态是一致的。
构建nginx镜像:
[root@linux-node1 nginx]# pwd
/root/test/nginx
[root@linux-node1 nginx]# ls
Dockerfile nginx-1.12.1.tar.gz nginx.conf
[root@linux-node1 nginx]# cat Dockerfile
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
./configure --prefix=/usr/local/nginx && \
make -j 2 && \
make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
[root@linux-node1 nginx]# cat nginx.conf
user root;
worker_processes auto;

error_log logs/error.log info;

pid logs/nginx.pid;


events {
use epoll;
}

http {

include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;
root html;
index index.html index.php;

location ~ \.php$ { #转发请求。将.php文件转发给php-fpm进程(引擎)处理,后返回。
root html;
fastcgi_pass lnmp_php:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
[root@linux-node1 nginx]# docker image build -t nginx:v1 -f Dockerfile .

构建php镜像:
[root@linux-node1 php]# ls
Dockerfile php-5.6.31.tar.gz php.ini
[root@linux-node1 php]# cat Dockerfile
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql --with-mysqli \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && \
make install && \
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

结果:
[root@linux-node1 php]# docker image build -t php:v1 .
[root@linux-node1 php]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 98d65c22dcf1 About a minute ago 418MB //
php v1 4af07ce50175 2 minutes ago 1.01GB //
nginx v2 41238fb31cda 7 days ago 183MB
richarvey/nginx-php-fpm latest 1bb16fc4c08f 7 days ago 303MB
mysql latest 8d65ec712c69 11 days ago 445MB
nginx latest b175e7467d66 2 weeks ago 109MB
centos 7 e934aafc2206 3 weeks ago 199MB
busybox latest 8ac48589692a 3 weeks ago 1.15MB
nginx 1.11 5766334bdaa0 12 months ago 183MB
  
  
(1)自定义网络
[root@linux-node1 php]# docker network create lnmp
//
[root@linux-node1 php]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e74d73fb1282 bridge bridge local
c6290c433e26 host host local
a9181a8c22a0 lnmp bridge local
9004adeec394 none null local
(2)创建php容器
[root@linux-node1 opt]# tar -xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
[root@linux-node1 wwwroot]# cat index.html
hello docker
[root@linux-node1 ~]# ls /app/wwwroot/
index.html wordpress

[root@linux-node1 php]# docker run -itd --name lnmp_php --net lnmp --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html php:v1
d7c49b7e7a95e3f859ee41ff33b6fed59a436d5b41f945ddf63fd8c77bf88d08
(3)创建nginx容器
[root@linux-node1 php]# docker run -itd --name lnmp_nginx --net lnmp --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html nginx:v1
062f9b89b1cfaebbffdf127fe5434d11b37c3f23fe8d24bedac72499ddac4a4d
[root@linux-node1 php]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
062f9b89b1cf nginx:v1 "./sbin/nginx -g 'da…" About a minute ago Up About a minute 80/tcp lnmp_nginx
d7c49b7e7a95 php:v1 "./sbin/php-fpm -c /…" 9 minutes ago Up 9 minutes 9000/tcp lnmp_php

[root@linux-node1 wwwroot]# echo "<?php phpinfo();?>" >index.php
[root@linux-node1 wwwroot]# cat index.php
<?php phpinfo();?>
[root@linux-node1 wwwroot]# ls
index.html index.php wordpress

[root@linux-node1 php]# docker rm -f lnmp_nginx
lnmp_nginx
[root@linux-node1 php]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7c49b7e7a95 php:v1 "./sbin/php-fpm -c /…" 15 minutes ago Up 15 minutes 9000/tcp lnmp_php
[root@linux-node1 php]# docker run -itd --name lnmp_nginx --net lnmp -p 888:80 --mount type=bind,src=/app/wwwroot/,dst=/usr/local/nginx/html nginx:v1 //暴露端口号
0e12363c63ef4a7ac76da4be3841d87a4c69745e7a90489326c1b770ed366880
[root@linux-node1 php]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0e12363c63ef nginx:v1 "./sbin/nginx -g 'da…" 3 seconds ago Up 2 seconds 0.0.0.0:888->80/tcp lnmp_nginx
d7c49b7e7a95 php:v1 "./sbin/php-fpm -c /…" 15 minutes ago Up 15 minutes 9000/tcp lnmp_php
测试:
输入http://10.0.0.80:888/
显示hello docker
[root@linux-node1 wwwroot]# mv index.html /opt/
然后显示PHP Version 5.6.31
执行index.php啦!

nginx配置文件指定了与php通信的规则,测试:
[root@linux-node1 php]# docker exec -it 0e12363c63ef bash
[root@0e12363c63ef nginx]# ping lnmp_php
PING lnmp_php (172.18.0.2) 56(84) bytes of data.
64 bytes from lnmp_php.lnmp (172.18.0.2): icmp_seq=1 ttl=64 time=0.141 ms
64 bytes from lnmp_php.lnmp (172.18.0.2): icmp_seq=2 ttl=64 time=0.134 ms
^C
[root@0e12363c63ef nginx]# pwd
/usr/local/nginx

(4)创建mysql容器
[root@linux-node1 php]# docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql --character-set-server=utf8
2cf48a8b08f2d61c5b558a839224880a7319b6e9f070048ee622d6c7801dff1f
[root@linux-node1 php]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2cf48a8b08f2 mysql "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp lnmp_mysql
0e12363c63ef nginx:v1 "./sbin/nginx -g 'da…" 17 minutes ago Up 17 minutes 0.0.0.0:888->80/tcp lnmp_nginx
d7c49b7e7a95 php:v1 "./sbin/php-fpm -c /…" 33 minutes ago Up 33 minutes 9000/tcp lnmp_php
说明:
https://hub.docker.com/_/mysql/
[root@linux-node1 php]# docker volume ls
DRIVER VOLUME NAME
local ef852068aee3f245da147b070e483e4b3bdb32478118fb1e38b310442ab2c6e8
local mysql-vol //要新生成的。
local nginx-vol


[root@linux-node1 ~]# mysql -h10.0.0.80 -uroot -p123456
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

解决:
[root@linux-node1 ~]# head -3 /etc/my.cnf
[mysqld]
#meng add
default_authentication_plugin=mysql_native_password

[root@linux-node1 ~]# rpm -qa | grep mysql*
mysql-connector-python-1.1.6-1.el7.noarch
mysql-mmm-monitor-2.2.1-14.el7.noarch
mysql++-manuals-3.1.0-12.el7.x86_64
mysql-proxy-devel-0.8.5-2.el7.x86_64
mysql-proxy-0.8.5-2.el7.x86_64
mysql-mmm-tools-2.2.1-14.el7.noarch
mysql-mmm-agent-2.2.1-14.el7.noarch
mysql++-devel-3.1.0-12.el7.x86_64
mysqlreport-3.5-11.el7.noarch
mysql-connector-odbc-5.2.5-6.el7.x86_64
mysql++-3.1.0-12.el7.x86_64
mysql-mmm-2.2.1-14.el7.noarch
mysql-connector-java-5.1.25-3.el7.noarch
mysql-utilities-1.3.6-1.el7.noarch
mysqltuner-1.6.0-1.el7.noarch
[root@linux-node1 ~]# yum install -y mysql*

 

  

posted @ 2018-05-01 16:22  bkycrmn  阅读(168)  评论(0)    收藏  举报