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应用完成!