
构建docker基础镜像并部署LNMP网站平台
发布日期:2021-05-15 07:34:46
浏览次数:26
分类:原创文章
本文共 5820 字,大约阅读时间需要 19 分钟。
构建docker基础镜像并部署LNMP网站平台
编写dockerfile时,尽量使用&&连接shell命令。尽量少使用 RUN、COPY 和 ADD 指令,因为这三个指令每次使用都会在镜像中增加分层(layers),导致最终生成的镜像变大。使用其他指令生成的是临时过渡层,不会增加镜像的大小。
构建nginx基础镜像
# Dockerfile-nginx 写入以下内容FROM centos:7RUN 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/* # 清理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.12.2* && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV PATH $PATH:/usr/local/nginx/sbinCOPY nginx.conf /usr/local/nginx/conf/nginx.confWORKDIR /usr/local/nginxEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
# 创建镜像$ docker build -t nginx:v1 -f Dockerfile-nginx . # .表示将当前目录中的文件打包为镜像$ docker images # 查看镜像$ docker run -d --name nginx01 -p 88:80 nginx:v1 # 使用创建的镜像运行容器# 访问http://主机IP:88/status.html,显示ok# # 利用已有镜像创建新的镜像$ echo "Good day, mate" >> index.html$ vim Dockerfile-index # 写入以下内容FROM nginx:v1COPY index.html /usr/local/nginx/html#$ docker build -t nginx:v2 -f Dockerfile-index .$ docker images # 查看镜像$ docker run -d --name nginx02 -p 89:80 nginx:v2# 访问http://主机IP:89,显示Good day, mate
如果镜像拉取速度太慢,修改/etc/docker/daemon.json
配置文件如下。
$ vi /etc/docker/daemon.json{ "registry-mirrors": ["https://registry.dockercn.com","https://mj9kvemk.mirror.aliyuncs.com"]}
构建tomcat基础镜像
# Dockerfile-tomcat 写入以下内容FROM centos:7ENV VERSION=8.0.46RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \ yum clean all && rm -rf /var/cache/yum/* RUN wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.46/bin/apache-tomcat-${VERSION}.tar.gz && \ 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/* && \ mkdir /usr/local/tomcat/webapps/test && \ echo "ok" > /usr/local/tomcat/webapps/test/status.html && \ 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 ENV PATH $PATH:/usr/local/tomcat/binWORKDIR /usr/local/tomcatEXPOSE 8080CMD ["catalina.sh", "run"] # 前台运行tomcat
# 创建镜像$ docker build -t tomcat:v1 -f Dockerfile-tomcat .$ docker run -d --name tomcat01 -p 8089:8080 tomcat:v1 # tomcat端口是8080# 访问http://主机IP:8089/test/status.html# # 创建新的镜像并部署war包(需要先去jenkins.io下载jenkins.war包)$ vim Dockerfile # 写入以下内容FROM tomcat:v1COPY jenkins.war /usr/local/tomcat/webapps/ROOT.war# 创建镜像并运行tomcat容器$ docker build -t tomcat:v2 -f Dockerfile .$ docker run -d --name tomcat02 -p 8088:8080 tomcat:v2# 检查容器中部署的war包$ docker exec -it tomcat02 bash# ls webapps/ROOT ROOT.war test# 访问http://主机IP:8088,可以查看部署的jenkins
构建php基础镜像
# Dockerfile-php 写入以下内容FROM centos:7RUN 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/* RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \ tar -zxf php-5.6.36.tar.gz && \ cd php-5.6.36 && \ ./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* && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 需要准备php.ini和php-fpm.conf配置文件ENV PATH $PATH:/usr/local/php/sbin:/usr/local/php/binCOPY php.ini /usr/local/php/etc/COPY php-fpm.conf /usr/local/php/etc/WORKDIR /usr/local/phpEXPOSE 9000CMD ["php-fpm"]
# 创建镜像$ docker build -t php:v1 -f Dockerfile-php .$ docker images# 运行容器并检查是否正常运行$ docker run -d --name php01 php:v1$ docker ps -l$ docker exec -it php01 bash# pwd# ps -ef# ./bin/php -v # 查看php版本
快速部署LNMP网站平台
下面利用前面构建的基础镜像来搭建一个LNMP网站平台(Linux + nginx + mysql + php)。
# 创建自定义网络$ docker network create lnmp# 创建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# 创建php容器$ docker run -d --name lnmp_php --net lnmp \--mount src=wwwroot,dst=/wwwroot php:v1# 创建nginx容器(docker主机上需准备nginx.conf配置文件)$ docker run -d --name lnmp_nginx --net lnmp -p 8000:80 \--mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/conf/nginx.conf \--mount src=wwwroot,dst=/wwwroot nginx:v1# 测试$ cd /var/lib/docker/volumes/wwwroot/_data/$ vi test.php # 写入<?php phpinfo();? ># 访问http://主机IP:8000/test.php# 部署wordpress博客$ wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz$ tar -zxf wordpress-4.9.4-zh_CN.tar.gz # 解压后得到wordpress文件夹# 部署wordpress$ cp -r wordpress /var/lib/docker/volumes/wwwroot/_data/# 访问http://主机IP:8000/wordpress/# 利用之前创建mysql容器时的信息配置wordpress# 数据库名:wordpress,用户名:root,密码:123456,数据库主机:lnmp_mysql
如果不能自动创建wp-config.php
配置文件,可能需要复制网站给出的配置文件内容,并在/var/lib/docker/volumes/wwwroot/_data/wordpress/
目录下创建该配置文件。配置好的wordpress网站如下。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月11日 11时07分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
最优装载问题
2019-03-11
最大团问题
2019-03-11
课程总结
2019-03-11
CMake的主体框架
2019-03-11
微积分(三)
2019-03-11
软件工程应用
2019-03-11
数据科学
2019-03-11
函数与高级变量
2019-03-11
键盘事件
2019-03-11
注册页面案例
2019-03-11
np.bincount(x)的简单解释
2019-03-11
LeetCode Top-100 T22-括号生成
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
JAVA 多线程
2019-03-11
Java的 arraylist类【具体案例】
2019-03-11
牛客-链表中环的入口节点(Java)
2019-03-11
解决微信小程序中 calc 失效问题
2019-03-11
堆的应用_topK算法和堆排序
2019-03-11
最大半连通子图
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11