设为首页 收藏本站
查看: 1507|回复: 0

[经验分享] docker Dockerfile、构建php、java、lnmp项目

[复制链接]

尚未签到

发表于 2019-2-20 10:27:09 | 显示全部楼层 |阅读模式
Dockerfile格式
  Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。


Dockerfile指令


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/

  [root@docker wwwroot]# docker run -d httpd:v2
  验证:
进入容器后,可以看到更改了index.html

构建业务基础镜像
  快速部署LNMP网站平台

  构建php服务器
  结构:
[root@docker php-docker]# tree
.
├── Dockerfile-php
├── php-5.6.32.tar.gz
├── php-fpm.conf
└── php.ini
  0 directories, 4 files


[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


[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配置文件


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、数据库名是容器名称,这样来通信

  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

  [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
  **

  构建镜像:
必须在/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/
  访问:http://192.168.1.13:8180/jenkins/login?from=%2Fjenkins%2F
  注意:构建完成镜像后查看如果容器是关闭的,说明有问题
以下是正常的

  查看日志:
docker logs b8a04a1bfe34 -f




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674769-1-1.html 上篇帖子: python docker registry 历史镜像批量删除 下篇帖子: mac安装docker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表