Docker容器实践——使用Dockerfile构建定制LNMP架构镜像并部署Wordpress应用

Docker容器实践------使用Dockerfile构建docker镜像https://blog.csdn.net/xiaochenXIHUA/article/details/160341844

一、使用开源项目的Dockerfile构建镜像并运行

FileBrowser是一款好用的私有网盘系统,使用go语言编写的web软件;它实现了在指定目录内提供文件管理界面,可以用来上传、删除、预览和编辑你的文件。它支持使用二进制文件直接在系统中安装,也支持使用Docker容器安装。

bash 复制代码
#使用FileBrowser源码的Dockerfile文件构建镜像并运行为自己的私有网盘

#1-将FileBrowser源码下载到本地并进入该目录下
git clone https://github.com/filebrowser/filebrowser.git
cd filebrowser/

#2-下载FileBrowser的二进制文件到指定目录并解压到当前目录下
wget https://github.com/filebrowser/filebrowser/releases/download/v2.63.2/linux-amd64-filebrowser.tar.gz -c -P /data
tar -zxvf /data/linux-amd64-filebrowser.tar.gz -C .

#3-使用FileBrowser的Dockerfile文件构建镜像
docker build -t filebrowser:ck-2026.04.21 .


#4-运行FileBrowser的镜像【运行命令参考:https://filebrowser.org/installation.html#__tabbed_1_1】
#4.1-先创建FileBrowser存储到宿主机的目录并授权
mkdir -p /data/filebrowser-data
cd /data/filebrowser-data/
mkdir {srv,database,config}
chmod 777 srv database config
chown -R 1000:1000 srv database config

#4.2-运行构建好的filebrowser:ck-2026.04.21容器
docker run -d \
    --name filebrowser \
    -v ./srv:/srv \
    -v ./database:/database \
    -v ./config:/config \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=Asia/Shanghai \
    -p 8080:8080 \
    --restart unless-stopped \
    filebrowser:ck-2026.04.21 \
    --port 8080
    
#4.3-查看运行容器及其日志(日志中会显示用户与临时密码)
docker ps
docker logs filebrowser

#4.4-在浏览器输入【IP:8080】访问,能够显示FileBrowser的登录界面则表示成功
#使用默认用户【admin】与临时密码登录后需要修改密码

二、编写Dockerfile文件构建定制镜像

2.1、编写Dockerfile构建自己的基础Linux系统镜像

bash 复制代码
#构建自己的基础定制系统镜像
#1-编辑Dockerfile文件
vi Dockerfile

#2-【Dockerfile】文件的完整内容
FROM centos:7.9.2009

#镜像的维护者
MAINTAINER coffeemilk.blog.csdn.net

#配置系统国内可用的yum源(阿里云源)
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \ 
    && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \
    && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \
    && curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \
    && yum clean all && yum makecache


#安装必须的软件库
RUN yum install -y  wget gcc gcc-c++ glibc make autoconf openssl openssl-devel ntpdata crontabs

#将本机的时区(Asia/Shanhai)复制到容器中
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


#3-构建镜像命令
docker build -t centos:ck-7.9 .

2.2、使用源码构建LNMP架构中的Nginx镜像

bash 复制代码
#1-首先创建nginx目录并下载需使用的nginx源码内容
mkdir nginx
cd nginx/
wget https://nginx.org/download/nginx-1.30.0.tar.gz

#2-【nginx.conf】(Nginx主配置)文件内容
user  www;
worker_processes  auto;
#日志/进程ID路径 匹配编译安装目录
error_log  /usr/local/nginx/logs/error.log warn;
pid        /usr/local/nginx/logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /usr/local/nginx/logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    # 加载子配置
    include /usr/local/nginx/conf/conf.d/*.conf;
}


#3-【fastcgi_params】(Nginx默认文件)文件内容
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


#4-【www.conf】(站点配置)文件内容
server {
    listen       8081;
    server_name  localhost;
 
    root   /usr/local/nginx/html;
    index  index.html index.htm index.php;
 
    location ~ \.php$ {
        root /usr/local/nginx/html;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    error_page  404  /404.html;
    error_page  500 502 503 504  /50x.html;
}

使用源码安装配置Linux上的Web服务器------Nginx

bash 复制代码
#使用Dockerfile且用Nginx源码构建Nginx镜像
vi Dockerfile

#【Dockerfile】完整文件
FROM centos:ck-7.9

#镜像的维护者
MAINTAINER coffeemilk.blog.csdn.net

#使用源码构建Nginx
#创建所需的www用户
RUN useradd -M -s /sbin/nologin www
#复制nginx的源码包到/usr/local/src目录并解压
ADD nginx-1.30.0.tar.gz /usr/local/src

#安装Nginx所需的依赖库
RUN yum install -y \
gcc gcc-c++ \
make \
pcre pcre-devel \
zlib zlib-devel \
openssl openssl-devel \
gd gd-devel \
GeoIP GeoIP-devel \
libxml2 libxml2-devel \
libxslt libxslt-devel \
libcurl-devel \
libpng libpng-devel \
libjpeg-turbo libjpeg-turbo-devel \
freetype freetype-devel \
perl perl-devel \
patch

#设置工作目录
WORKDIR /usr/local/src/nginx-1.30.0

#配置并编译Nginx
RUN ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-http_v2_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_xslt_module && make && make install

#将宿主机上的Nginx的配置与网站配置复制到容器中
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY fastcgi_params /usr/local/nginx/conf/fastcgi_params
RUN mkdir /usr/local/nginx/conf/conf.d
COPY www.conf /usr/local/nginx/conf/conf.d/www.conf

#暴露端口
EXPOSE 8081

#容器启动时执行启动Nginx服务命令且以前台方式运行
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]




#构建定制的Nginx镜像【若不想使用缓存可以在后面添加(--no-cache)】
docker build -t nginx:ck-1.30.0 . --no-cache

2.3、编写Dockerfile构建LNMP架构中的Mysql镜像

bash 复制代码
#使用Dockerfile且用rpm包构建Mysql镜像
vi Dockerfile

#【Dockerfile】文件的完整内容
FROM centos:ck-7.9

MAINTAINER coffeemilk.blog.csdn.net

COPY mysql-community-common-5.7.31-1.el7.x86_64.rpm /root/mysql-community-common-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm /root/mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-client-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-client-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-libs-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-server-5.7.31-1.el7.x86_64.rpm  /root/mysql-community-server-5.7.31-1.el7.x86_64.rpm
COPY postfix-2.10.1-9.el7.x86_64.rpm  /root/postfix-2.10.1-9.el7.x86_64.rpm

WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm

ADD initialization.sql /root/initialization.sql
ADD my.cnf /etc/my.cnf
ADD setup.sh /root/setup.sh

RUN yum clean all && rm -rf /root/*.rpm && chmod +x /root/setup.sh

EXPOSE 3306

CMD ["/root/setup.sh"]



#构建定制的mysql镜像【若不想使用缓存可以在后面添加(--no-cache)】
docker build -t mysql:ck-5.7.31 . --no-cache

2.4、编写Dockerfile构建LNMP架构中的PHP镜像

bash 复制代码
#使用Dockerfile与php源码构建镜像
vi Dockerfile

#【Dockerfile】文件的完整内容
# base image
FROM centos:ck-7.9

MAINTAINER coffeemilk.blog.csdn.net

ADD libzip-1.3.2.tar.gz /usr/local/src

WORKDIR /usr/local/src/libzip-1.3.2
RUN ./configure && make && make install


ADD remi-release-7.7-2.el7.remi.noarch.rpm /usr/local/src
WORKDIR /usr/local/src
RUN yum -y install epel-release && rpm -ivh remi-release-7.7-2.el7.remi.noarch.rpm


ADD php-7.4.10.tar.gz /usr/local/src

RUN yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel  libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel sqlite-devel

RUN yum -y install --enablerepo=remi install oniguruma5php oniguruma5php-devel


WORKDIR /usr/local/src/php-7.4.10
RUN export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" && ./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip && make && make install


COPY php.ini-production /usr/local/php/etc/php.ini
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY www.conf /usr/local/php/etc/php-fpm.d/www.conf

RUN useradd -M -s /sbin/nologin www


EXPOSE 9000

CMD ["/usr/local/php/sbin/php-fpm"]



#构建定制的php镜像【若不想使用缓存可以在后面添加(--no-cache)】
docker build -t php:ck-7.4.10 . --no-cache

三、使用定制的Docker镜像部署Wordpress应用

在docker中部署定制的mysql、nginx和php服务,然后在lnmp环境下部署wordpress内容发布系统,并实现对外访问。

部署过程:

1、通过基础镜像构建mysql、nginx、php镜像

2、通过本地卷实现数据持久化存储

3、通过docker容器构建lnmp环境

4、通过docker容器部署wordpress应用

bash 复制代码
#使用定制的LNMP镜像构建LNMP运行环境

#1-运行mysql容器
mkdir -p /data/lnmp/db
cd /data/lnmp/db
docker run -d --name mysql5.7 -v /data/lnmp/db:/var/lib/mysql -p 13306:3306 mysql:ck-5.7.31

#2-运行php容器(注意这里容器的名称到时候需要与nginx中www.conf中fastcgi_pass后的名称一致)
mkdir -p /data/lnmp/www
docker run -d --name php -v /data/lnmp/www:/usr/local/nginx/html --link=mysql5.7:mysql5.7 php:ck-7.4.10

#3-运行nginx容器
mkdir -p /data/lnmp/nginxlog
mkdir -p /data/lnmp/conf
cp /data/imagestest/lnmp/nginx/www.conf  /data/lnmp/conf/
echo "coffeemilk make webserver for nginx1.30.0" > /data/lnmp/www/index.html
echo '<?php phpinfo(); ?>' > /data/lnmp/www/phpinfo.php
docker run -d --name nginxck -p 8081:8081 -v /data/lnmp/www:/usr/local/nginx/html -v /data/lnmp/nginxlog:/usr/local/nginx/logs -v /data/lnmp/conf:/usr/local/nginx/conf/conf.d --link=php:php  nginx:ck-1.30.0

#4-在浏览器输入【IP:8081】访问,若显示"coffeemilk make webserver for nginx1.30.0"则nginx容器部署成功
#在浏览器输入【IP:8081/phpinfo.php】能够显示php的详情页面,则表示nginx能够解析php

#5-部署wordpress
#5.1-下载wordpress并解压
wget https://cn.wordpress.org/wordpress-6.9.4-zh_CN.tar.gz -c -P /data/lnmp/www
cd /data/lnmp/www/
tar -zxvf wordpress-6.9.4-zh_CN.tar.gz
#5.2-在浏览器输入【IP:8081/wordpress】即可访问(然后填写连接mysql数据库的信息:数据库名称【wordpress】、用户名【root】、密码【mysqlabc123】数据库主机是【mysql5.7】(之所以是这个名称是因为当前是在容器部署的,nginxck是通过该名称与数据库连接的))
#5.3-在服务器进入wordpress目录【/data/lnmp/www/wordpress】创建【wp-config.php】文件,并将浏览器显示的【wp-config.php 的配置规则】内容全部复制一份到该文件中

到这里恭喜你,表示自己构建LNMP的所有定制镜像,并安装wordpress应用完成!

相关推荐
星梦清河2 小时前
微服务-Docker
docker·微服务
Taking_fish3 小时前
docker常见操作命令(基础服务搭建)
运维·docker·容器
眷蓝天10 小时前
Docker 镜像瘦身:从 GB 到 MB 的优化实践
运维·docker·容器
一叶飘零_sweeeet13 小时前
Docker Compose实战指南
运维·docker·容器
亚空间仓鼠13 小时前
Docker 容器技术入门与实践 (六):Docker镜像瘦身
docker·容器·eureka
SPC的存折14 小时前
10、Docker容器故障排查
linux·运维·数据库·docker·容器
乌托邦的逃亡者16 小时前
Dockerfile的配置和使用
linux·运维·docker·容器
七七powerful16 小时前
loki监控docker容器&系统&nginx日志的告警规则
nginx·docker·容器
SPC的存折18 小时前
8、Docker镜像瘦身
运维·docker·容器