dockerfile基于centos7构建lnmp镜像

本文详细介绍如何使用Dockerfile构建包含Linux、Nginx、MySQL和PHP的LNMP环境镜像,涵盖从安装基础软件到配置运行的具体步骤。

vim dockerfile

FROM centos:7
ADD nginx-1.18.0.tar.gz /root/
RUN yum -y install make gcc pcre-devel zlib-devel php php-mysql php-gd php-fpm
&& cd /root/nginx-1.18.0
&& ./configure
&& make
&& make install
&& echo “<?php phpinfo(); ?>” > /usr/local/nginx/html/index.php
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY php.sh /usr/bin
CMD [“php.sh”]

php.sh内容

#! /bin/bash
/usr/local/nginx/sbin/nginx
exec php-fpm -F

执行dockerfile

docker build -t lnmp:1.1 ./

查看镜像 docker images

在这里插入图片描述

基于镜像创建一个容器

docker run --name -d -p lnmp 80:80 lnmp:1.1

查看结果

<think>根据用户需求,需要详细步骤使用Dockerfile构建LNMP环境和WordPress。结合引用内容,步骤如下: 1. **环境准备**: - 创建项目目录(如`lnmp`),内部按服务分子目录:`nginx`、`mysql`、`php`。 - 下载所需软件包(Nginx、MySQL、PHP等)到对应目录(引用[1][4])。 2. **自定义网络**: ```bash docker network create --subnet=172.111.0.0/16 mynetwork # 引用[5] ``` 3. **Nginx镜像构建**: - 在`nginx`目录创建`Dockerfile`(引用[3][4]): ```dockerfile FROM centos:7 RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make ADD nginx-1.12.2.tar.gz /usr/local/src/ RUN useradd -M -s /sbin/nologin nginx WORKDIR /usr/local/src/nginx-1.12.2 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module RUN make && make install ENV PATH /usr/local/nginx/sbin:$PATH COPY nginx.conf /usr/local/nginx/conf/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` - 编写`nginx.conf`配置文件(引用[4])。 - 构建镜像:`docker build -t nginx:lnmp .`(引用[3])。 4. **MySQL镜像构建**: - 在`mysql`目录创建`Dockerfile`(引用[4]): ```dockerfile FROM centos:7 RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make ADD mysql-5.7.38.tar.gz /usr/local/src/ WORKDIR /usr/local/src/mysql-5.7.38 RUN cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci RUN make && make install ... # 后续需添加初始化命令和配置文件 ``` - 准备`my.cnf`配置文件(引用[4])。 - 构建镜像:`docker build -t mysql:lnmp .` 5. **PHP镜像构建**: - 在`php`目录创建`Dockerfile`(引用[4]): ```dockerfile FROM centos:7 RUN yum -y install gd libjpeg libpng freetype libxml2 libxslt zlib curl-devel libjpeg-devel libpng-devel freetype-devel ADD php-7.4.30.tar.gz /usr/local/src/ WORKDIR /usr/local/src/php-7.4.30 RUN ./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-fpm-user=www --with-fpm-group=www \ --with-curl --with-gd --with-gettext --with-iconv-dir --with-kerberos \ --with-mysqli --with-openssl --with-pdo-mysql --with-pear --with-xmlrpc \ --with-xsl --with-zlib --enable-fpm --enable-bcmath --enable-libxml \ --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex \ --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop \ --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip RUN make && make install ... # 复制配置文件等 ``` - 准备`php.ini`、`php-fpm.conf`、`www.conf`(引用[4])。 - 构建镜像:`docker build -t php:lnmp .` 6. **启动容器**(注意顺序): - 启动MySQL(限制I/O): ```bash docker run -itd --name mysql --net mynetwork --ip 172.111.0.20 \ -v /mysql/data:/usr/local/mysql/data \ --memory="500m" --memory-swap="1g" \ --device-write-bps /dev/sda:10mb \ mysql:lnmp ``` - 启动PHP(链接Nginx和MySQL卷): ```bash docker run -itd --name php --net mynetwork --ip 172.111.0.30 -p 9000:9000 \ --volumes-from nginx --volumes-from mysql php:lnmp # 引用[5] ``` - 启动Nginx: ```bash docker run -itd --name nginx --net mynetwork --ip 172.111.0.10 -p 80:80 \ --volumes-from php nginx:lnmp ``` 7. **部署WordPress**: - 下载WordPress到Nginx的站点目录(通过共享卷)。 - 在MySQL中创建数据库和用户(进入mysql容器操作): ```sql CREATE DATABASE wordpress; GRANT ALL ON wordpress.* TO 'wpuser'@'%' IDENTIFIED BY 'wppass'; FLUSH PRIVILEGES; ``` - 浏览器访问`http://主机IP`,按WordPress安装向导完成配置。 > **注意**:实际步骤需根据具体版本调整。建议使用官方基础镜像(如`mysql:5.7`、`php:fpm`)简化Dockerfile。 §§相关问题§§ 1. 如何限制Docker容器的内存和Swap使用? 2. 如何优化Docker构建LNMP环境的性能? 3. Docker中如何实现容器间的数据共享? 4. WordPress容器化部署的常见问题如何解决? </think>以下是根据引用内容整理的**使用Dockerfile构建LNMP环境并运行WordPress**的详细步骤,结合Docker最佳实践和性能调优要求: --- ### 一、环境准备 1. **主机配置**(引用[1][2]): - 操作系统:CentOS 7.3+ - Docker版本:19.03+ - 目录结构: ``` lnmp-project/ ├── nginx/ │ ├── Dockerfile # Nginx镜像构建脚本 │ ├── nginx.conf # Nginx配置文件 │ └── nginx-1.12.2.tar.gz # Nginx源码包 ├── mysql/ │ ├── Dockerfile # MySQL镜像构建脚本 │ └── my.cnf # MySQL配置文件 └── php/ ├── Dockerfile # PHP镜像构建脚本 ├── php.ini # PHP核心配置 ├── php-fpm.conf # PHP-FPM配置 └── www.conf # PHP进程池配置 ``` --- ### 二、构建镜像(引用[3][4]) #### 1. **Nginx镜像** ```dockerfile # nginx/Dockerfile FROM centos:7 RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make ADD nginx-1.12.2.tar.gz /usr/local/src/ RUN useradd -M -s /sbin/nologin nginx WORKDIR /usr/local/src/nginx-1.12.2 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module RUN make && make install ENV PATH /usr/local/nginx/sbin:$PATH COPY nginx.conf /usr/local/nginx/conf/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` 构建命令: `docker build -t nginx:lnmp .` #### 2. **MySQL镜像** ```dockerfile # mysql/Dockerfile FROM centos:7 RUN yum -y install gcc gcc-c++ ncurses-devel bison cmake make ADD mysql-5.7.38.tar.gz /usr/local/src/ WORKDIR /usr/local/src/mysql-5.7.38 RUN cmake ... # 省略编译参数(引用[4]) RUN make && make install COPY my.cnf /etc/my.cnf EXPOSE 3306 CMD ["mysqld_safe"] ``` 构建命令: `docker build -t mysql:lnmp .` #### 3. **PHP镜像** ```dockerfile # php/Dockerfile FROM centos:7 RUN yum -y install gd libjpeg-devel libpng-devel freetype-devel ADD php-7.4.30.tar.gz /usr/local/src/ WORKDIR /usr/local/src/php-7.4.30 RUN ./configure ... # 省略PHP编译参数(引用[4]) RUN make && make install COPY php.ini /usr/local/php/etc/ COPY php-fpm.conf /usr/local/php/etc/ COPY www.conf /usr/local/php/etc/php-fpm.d/ EXPOSE 9000 CMD ["php-fpm", "-F"] ``` 构建命令: `docker build -t php:lnmp .` --- ### 三、启动容器(引用[4][5]) 1. **创建自定义网络**(容器互通): ```bash docker network create --subnet=172.111.0.0/16 mynetwork ``` 2. **启动容器**: ```bash # 启动MySQL(限制I/O速率) docker run -d --name mysql --net mynetwork --ip 172.111.0.20 \ -v /mysql/data:/var/lib/mysql \ --memory="500m" --memory-swap="1g" \ --device-write-bps /dev/sda:10mb \ mysql:lnmp # 启动PHP(共享Nginx和MySQL卷) docker run -d --name php --net mynetwork --ip 172.111.0.30 -p 9000:9000 \ --volumes-from nginx --volumes-from mysql \ php:lnmp # 启动Nginx(绑定80端口) docker run -d --name nginx --net mynetwork --ip 172.111.0.10 -p 80:80 \ --volumes-from php \ nginx:lnmp ``` --- ### 四、部署WordPress(引用[2][4]) 1. **下载WordPress**: ```bash docker exec nginx wget https://wordpress.org/latest.tar.gz -P /usr/local/nginx/html/ docker exec nginx tar -zxvf /usr/local/nginx/html/latest.tar.gz -C /usr/local/nginx/html/ ``` 2. **配置数据库**: ```sql CREATE DATABASE wordpress; GRANT ALL ON wordpress.* TO 'wpuser'@'%' IDENTIFIED BY 'wppass'; FLUSH PRIVILEGES; ``` 3. **浏览器访问**: - 打开 `http://主机IP/wordpress` - 按向导填写数据库信息: - 数据库名:`wordpress` - 用户名:`wpuser` - 密码:`wppass` - 主机:`172.111.0.20` (MySQL容器IP) --- ### 五、备份与快照(引用[2]) 1. **容器快照**: ```bash docker commit nginx nginx_backup docker commit mysql mysql_backup docker commit php php_backup ``` 2. **镜像打包**: ```bash docker save -o lnmp_backup.tar nginx:lnmp mysql:lnmp php:lnmp ``` --- ### 关键配置说明 - **Nginx与PHP协作**:通过`fastcgi_pass 172.111.0.30:9000`(PHP容器IP)在`nginx.conf`中配置。 - **数据持久化**:MySQL数据目录挂载到主机`/mysql/data`防止丢失。 - **资源限制**(引用[2]): - MySQL内存限制:`--memory="500m" --memory-swap="1g"` - 磁盘I/O限制:`--device-write-bps /dev/sda:10mb` > **提示**:生产环境建议使用官方镜像(如`mysql:5.7`、`php:fpm`)简化构建过程,此处演示自定义编译以满足特定需求[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值