php项目生成docker,docker Dockerfile、构建php、java、lnmp项目

Dockerfile格式

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

fd741977c495481d7616fd81e2e6d02b.png

Dockerfile指令

965754d8f7e0150229181a7571e3fc31.png

Build镜像 --》存为镜像

编辑dockerfile文件

[root@docker wwwroot]# vi httpdfile

FROM centos:latest

MAINTAINER jacker

RUN yum install httpd -y

COPY index.html /var/www/html/

ENV HTTP_V=2.0

EXPOSE 80

WORKDIR /data/wwwroot

CMD ["httpd","-D","FOREGROUND"] #这个是httpd在前台运行

index.html 是放在/data/wwwroot/ 中,所以在最后要指定,不然系统找不到

[root@docker ~]# docker build -t httpd:v1 -f httpdfile /data/wwwroot/

1408f16058ced386a02545a5dd10378f.png

[root@docker wwwroot]# docker run -d httpd:v2

验证:

进入容器后,可以看到更改了index.html

构建业务基础镜像

快速部署LNMP网站平台

9049b790f18af268894e93efa893b0ab.png

构建php服务器

结构:

[root@docker php-docker]# tree

.

├── Dockerfile-php

├── php-5.6.32.tar.gz

├── php-fpm.conf

└── php.ini

0 directories, 4 files

833012d648392cf58f6131c28af07e7a.png

[root@docker php-docker]# cat Dockerfile-php

FROM centos:7

MAINTAINER jacker

ENV VERSION=5.6.32

RUN yum install epel-release -y && \

yum install -y gcc gcc-c++ make gd-devel libxml2-devel \

libcurl-devel libjpeg-devel libpng-devel openssl-devel \

libmcrypt-devel libxslt-devel libtidy-devel autoconf \

iproute net-tools telnet wget curl && \

yum clean all && \

rm -rf /var/cache/yum/*

COPY php-${VERSION}.tar.gz /

RUN cd / && \

tar zxf php-${VERSION}.tar.gz && \

mv php-${VERSION} /usr/local/ && \

cd /usr/local/php-${VERSION} && \

./configure --prefix=/usr/local/php \

--with-config-file-path=/usr/local/php/etc \

--enable-fpm --enable-opcache \

--with-mysql --with-mysqli --with-pdo-mysql \

--with-openssl --with-zlib --with-curl --with-gd \

--with-jpeg-dir --with-png-dir --with-freetype-dir \

--enable-mbstring --with-mcrypt --enable-hash && \

make -j 4 && make install && \

cp php.ini-production /usr/local/php/etc/php.ini && \

cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \

sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf && \

mkdir /usr/local/php/log && \

cd / && rm -rf php* && \

cd /usr/local/ && rm -rf php-${VERSION}

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/php/sbin

COPY php.ini /usr/local/php/etc/

COPY php-fpm.conf /usr/local/php/etc/

WORKDIR /usr/local/php

EXPOSE 9000

CMD ["php-fpm"]

执行(这一步是创建镜像):docker build -t php:v5.6.32 -f Dockerfile-php .

说明:

执行dockerfile是从上往下执行,跟shell执行顺序一致

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 这个是设置时间,因为容器精装版的系统,没有crontab任务计划模块,需要自己安装

WORKDIR 工作目录,进入容器后就是/usr/local/php

自己配置好php.ini、php-fpm.conf 再复制到容器上

EXPOSE:转发的端口

CMD:前台运行php-fpm ,这样好处:创建容器时就自动在前台运行,不用进入虚拟机开启php服务

构建nginx服务器

[root@docker nginx-docker]# tree

.

├── Dockerfile-nginx

└── nginx.conf

ea2d4dcac4833b2f487076062bb3ac46.png

[root@docker nginx-docker]# cat Dockerfile-nginx

FROM centos:7

MAINTAINER jacker

RUN yum install -y gcc gcc-c++ make \

openssl-devel pcre-devel gd-devel \

iproute net-tools telnet wget curl && \

yum clean all && \

rm -rf /var/cache/yum/*

RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && \

tar zxf nginx-1.15.5.tar.gz && \

cd nginx-1.15.5 && \

./configure --prefix=/usr/local/nginx \

--with-http_ssl_module \

--with-http_stub_status_module && \

make -j 4 && make install && \

rm -rf /usr/local/nginx/html/* && \

echo "ok" >> /usr/local/nginx/html/status.html && \

cd / && rm -rf nginx-1.15.5* && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/nginx/sbin

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

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

执行(这一步是创建镜像):docker build -t nginx:v1.15 -f Dockerfile-nginx-1.15 .

说明:

CMD:nginx前台运行,避免断开

nginx+php结合:是通过nginx.conf配置文件

8e639d4c6b9c595545ac5c18b4160bae.png

lnmp验证:

1、自定义网络

docker network create lnmp

2、创建Mysql容器

docker run -d \

--name lnmp_mysql \

--net lnmp \

--mount src=mysql-vol,dst=/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8

3、创建PHP容器

docker run -d --name lnmp_php --net lnmp --mount src=wwwroot,dst=/wwwroot php:v1

4、创建Nginx容器

docker run -d --name lnmp_nginx --net lnmp -p 88:80 \

--mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf --mount src=wwwroot,dst=/wwwroot nginx:v1

5、以wordpress博客为例

https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

6、mv wordpress /var/lib/docker/volumes/wwwroot/_data/

7、cd /var/lib/docker/volumes/wwwroot/_data/

8、[root@docker _data]# cat test.php

9、[root@docker _data]# cat index.html

lnmp

10、访问 http://192.168.1.13:88/wordpress/

http://192.168.1.13:88/test.php

http://192.168.1.13:88 是否正常

11、数据库名是容器名称,这样来通信

1e684a865b3bceb46feacca01c213082.png

JAVA项目

[root@docker tomcat-docker]# tree -L 1

.

├── apache-tomcat-8.5.32

├── apache-tomcat-8.5.32.tar.gz

├── Dockerfile-tomcat

├── jdk-8u11-linux-x64.tar.gz

├── jdk-8u65-linux-x64.gz

├── jenkins.war

├── profile

├── setclasspath.sh

└── update_war

15161f92ecee4a064d83073c8b69d6ba.png

[root@docker tomcat-docker]# cat Dockerfile-tomcat

FROM centos:7

MAINTAINER jacker

ENV VERSION=8.5.32

COPY jdk-8u11-linux-x64.tar.gz /

COPY apache-tomcat-8.5.32.tar.gz /

RUN yum install wget curl unzip iproute net-tools -y && \

yum clean all && \

rm -rf /var/cache/yum/*

RUN cd / && \

tar xf jdk-8u11-linux-x64.tar.gz && mv jdk1.8.0_11/ /usr/local/jdk1.8

#RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \

RUN cd / && \

tar zxf apache-tomcat-${VERSION}.tar.gz && \

mv apache-tomcat-${VERSION} /usr/local/tomcat && \

rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \

sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

COPY setclasspath.sh /usr/local/tomcat/bin

#COPY profile /etc

#RUN source /etc/profile

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080

CMD ["catalina.sh", "run"]

**说明:

setclasspath.sh 添加如下三行:

export JAVA_HOME=/usr/local/jdk1.8/

export JAVA_BIN=/usr/local/jdk1.8/bin

export JRE_HOME=/usr/local/jdk1.8/jre

**

00dbff443c245afe46a4f41e3dd5d5bd.png

构建镜像:

必须在/data/docker/tomcat-docker 目录下,因为. 表示copy的文件都在这个目录

docker build -t tomcat:v8.5.32 -f Dockerfile-tomcat .

docker run -d --name tomcat-op --mount src=webapps,dst=/usr/local/tomcat/webapps/ -p 8180:8080 tomcat:v8.5.32

ln -sf /var/lib/docker/volumes/webapps/_data webapps

cp jenkins.war /data/webapps/

注意:构建完成镜像后查看如果容器是关闭的,说明有问题

以下是正常的

05649453c1e4a0cbbce939db39ee6c77.png

查看日志:

docker logs b8a04a1bfe34 -f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值