docker Dockerfile、构建php、java、lnmp项目
Dockerfile格式Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
http://i2.运维网.com/images/blog/201811/26/8597faf68b70f0d429169911acd641e0.png
Dockerfile指令
http://i2.运维网.com/images/blog/201811/26/42475ebe8d30162d3e3eb2cedcad2341.png
Build镜像 --》存为镜像
编辑dockerfile文件
# 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/ 中,所以在最后要指定,不然系统找不到
# docker build -t httpd:v1 -f httpdfile /data/wwwroot/
http://i2.运维网.com/images/blog/201811/26/56d004e533389e98c583b47c76888b40.png
# docker run -d httpd:v2
验证:
进入容器后,可以看到更改了index.html
构建业务基础镜像
快速部署LNMP网站平台
http://i2.运维网.com/images/blog/201811/26/3bbec500db83e58cd74c81494d171dbb.png
构建php服务器
结构:
# tree
.
├── Dockerfile-php
├── php-5.6.32.tar.gz
├── php-fpm.conf
└── php.ini
0 directories, 4 files
http://i2.运维网.com/images/blog/201811/27/741e17de9259588ade0521e5feb1ccc1.png
# 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服务器
# tree
.
├── Dockerfile-nginx
└── nginx.conf
http://i2.运维网.com/images/blog/201811/27/586c9fb6de97d581796fee303caaa907.png
# 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配置文件
http://i2.运维网.com/images/blog/201811/27/63035641be98a7c7ad6b113f1eb0d1cf.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、# cat test.php
9、# 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、数据库名是容器名称,这样来通信
http://i2.运维网.com/images/blog/201811/27/7ef125832cc94732d8eb1550fda8f600.png
JAVA项目
# 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
http://i2.运维网.com/images/blog/201812/03/da7b73a2c2bf1b2d85e4ed2e7f91f04d.png
# 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
**
http://i2.运维网.com/images/blog/201812/03/e7197670f05dce4d9b913c3131a24302.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/
访问:http://192.168.1.13:8180/jenkins/login?from=%2Fjenkins%2F
注意:构建完成镜像后查看如果容器是关闭的,说明有问题
以下是正常的
http://i2.运维网.com/images/blog/201811/27/fff011b57d27c226bfad3e816acd0c7d.png
查看日志:
docker logs b8a04a1bfe34 -f
页:
[1]