构建docker基础镜像并部署LNMP网站平台

本文介绍如何使用Docker从零开始构建LNMP(Linux+Nginx+MySQL+PHP)网站平台,包括创建基础镜像及部署流程。通过具体示例展示了Nginx、Tomcat、PHP等组件的安装配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写dockerfile时,尽量使用&&连接shell命令。尽量少使用 RUNCOPYADD 指令,因为这三个指令每次使用都会在镜像中增加分层(layers),导致最终生成的镜像变大。使用其他指令生成的是临时过渡层,不会增加镜像的大小。

构建nginx基础镜像

# Dockerfile-nginx 写入以下内容
FROM centos:7
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/*  # 清理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/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 -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:v1
COPY 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:7
ENV VERSION=8.0.46

RUN 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/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["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:v1
COPY 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:7
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/*
     
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/bin
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: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网站如下。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值