Linux——Docker部署LNMP环境

Docker部署LNMP

网络规划:

192.168.1.40Docker
172.16.10.10Nginx容器
172.16.10.20MySQL容器
172.16.10.30PHP容器

镜像需求:

Nginx:nginx:latest

MySQL:mysql:5.7

PHP:php:7.2-fpm

[root@docker ~]# docker pull nginx
[root@docker ~]# docker pull mysql:5.7
[root@docker ~]# docker pull php:7.2-fpm

目录规划:

  • 网站的访问主目录:/docker/
  • Nginx的配置文件:/docker/
[root@docker ~]# mkdir /docker
#运行一个创建目录的容器
[root@docker ~]# docker run  -itd --name  test nginx
1ed78b1e1280829ccaed3fe7108d7bdccd776f792eda9e0a188e7225600c177f
#把nginx的配置文件拷贝出来
[root@docker ~]# docker cp test:/etc/nginx /docker/
[root@docker ~]# ls /docker/
nginx
#把网站目录拷贝出来
[root@docker ~]# docker cp  test:/usr/share/nginx/html /docker/
[root@docker ~]# ls /docker/
html  nginx

1.设置网络

创建一个自定义桥接网络

[root@docker ~]# docker network create  -d bridge  --subnet 172.16.10.0/24 --gateway 172.16.10.1 LNMP
d81e599d1ad6a73ff36128c04e571021ecda614539f716dab4a95715a66d2c33
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
d81e599d1ad6        LNMP                bridge              local

2.Nginx容器

[root@docker ~]# docker run  -itd --name  nginx -v /docker/nginx:/etc/nginx -v /docker/html:/usr/share/nginx/html -p 80:80 --network LNMP  --ip 172.16.10.10 nginx:latest 
232b016e56d3ef8b5db3a7f10757bc450fadd5350c227fecd19162e082c474af

3.MySQL容器

[root@docker ~]# docker run --name  mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network LNMP  --ip 172.16.10.20 mysql:5.7 
56505dc496054b7f0fd6881b2b73073ee9c08ef698338f7ed54a0bf61d5f8f0c
  • -e MYSQL_ROOT_PASSWORD=123.com:是给mysql账户设置一个密码。

4.PHP容器

[root@docker ~]# docker run  -itd --name  php -p 9000:9000 -v /docker/html:/usr/share/nginx/html --network LNMP  --ip 172.16.10.30 php:7.2-fpm 
5ca6bf3edab5830160cd9650c448059ec284b31a3e6aae5fbbd329a95bb2456a

5.连接

1.nginx和php连接验证

[root@docker ~]# cd /docker/nginx/conf.d/
[root@docker conf.d]# vim default.conf 
......
 11         index  index.html index.htm index.php;
......
 
 31   location ~ \.php$ {
 32         root           /usr/share/nginx/html;
 33         fastcgi_pass   172.16.10.30:9000;
 34         fastcgi_index  index.php; 35         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_s    cript_name;
 36         include        fastcgi_params;
 37     }
  • 删除31-37行的注释#号,然后修改其内容
  • d o c u m e n t r o o t document_root documentroot:开启fastcgi配置

添加nginx静态网站页面和php测试页面

[root@docker /]# cd /docker/html/
[root@docker html]# echo LNMP Hello !! >> index.html 
[root@docker html]# vim test.php 
<?php
phpinfo();
?>
[root@docker html]# docker restart nginx
nginx

防火墙

开启防火墙,做端口通过规则

[root@docker ~]# systemctl start firewalld
[root@docker ~]# firewall-cmd --add-port=80/tcp --permanent 
success
[root@docker ~]# firewall-cmd --add-port=3306/tcp --permanent 
success
[root@docker ~]# firewall-cmd --add-port=9000/tcp --permanent 
success
[root@docker ~]# firewall-cmd  --reload 
success
[root@docker ~]# firewall-cmd  --list-ports 
80/tcp 3306/tcp 9000/tcp

windows访问:

在这里插入图片描述

在这里插入图片描述

2.php和mysql的连接验证

为了实现php和mysql的连接,在此我使用phpMyAdmin的数据库管理工具来实现!

下载phpMyAdmin的资源包到官网去下载:

https://www.phpmyadmin.net/

[root@docker ~]# yum -y install unzip
[root@docker ~]# cd /docker/
[root@docker docker]# ls
html 	nginx  	phpMyAdmin-4.9.1-all-languages.zip
[root@docker docker]# unzip phpMyAdmin-4.9.1-all-languages.zip 
#该目录名
[root@docker docker]# mv phpMyAdmin-4.9.1-all-languages phpmyadmin
#把phpmyadmin移动到网站目录下
[root@docker docker]# mv phpmyadmin/ ./html/

更改nginx配置文件

[root@docker ~]# vim /docker/nginx/conf.d/default.conf 
......
location ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) {
         root           /usr/share/nginx/html;
         fastcgi_pass   172.16.10.30:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }    
.......
[root@docker ~]# docker restart  nginx 
nginx

访问会发现缺少扩展插件

在这里插入图片描述

在镜像中添加PHP和MySQL连接的模块

[root@docker Dockerfile]# docker build -t phpmysql .[root@docker docker]# mkdir Dockerfile
[root@docker docker]# cd Dockerfile/
[root@docker Dockerfile]# vim Dockerfile
FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysqli pdo pdo_mysql
[root@docker Dockerfile]# docker build -t phpmysql .
#接下来时间可能较长,请耐心等待

删除之前的php容器,用刚刚 制作带有mysql扩展的php镜像运行

[root@docker ~]# docker rm -f php 
php
[root@docker ~]# docker run  -itd --name  php -p 9000:9000 -v /docker/html:/usr/share/nginx/html --network LNMP  --ip 172.16.10.30 phpmysql:latest 
2a5feac4c98e11956f97e8f1c3169f8869ff28e9a838e6efc3fb5fbfbe6e7a32

修改phpmyadmin的配置文件,指定连接的数据库的IP,然后重启php容器

[root@docker ~]# cd /docker/html/phpmyadmin/
[root@docker phpmyadmin]# cp config.sample.inc.php config.inc.php 
[root@docker phpmyadmin]# vim config.inc.php 
......
31 $cfg['Servers'][$i]['host'] = '172.16.10.20';
......
[root@docker phpmyadmin]# docker restart php 
php

账户和密码是运行MySQL的时候设置的

账户:root

密码:123.com

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# docker搭建lnmp环境 <!-- TOC --> - [docker搭建lnmp环境](#docker搭建lnmp环境) - [一、Dockerfile定制镜像](#一dockerfile定制镜像) - [二、docker-compose](#二docker-compose) - [三、docker-compose编排lnmp环境](#三docker-compose编排lnmp环境) - [1、mysql](#1mysql) - [2、redis](#2redis) - [3、mongo](#3mongo) - [4、nginx](#4nginx) - [5、php](#5php) - [6、完整版](#6完整版) - [四、参考](#四参考) <!-- /TOC --> 有收获的话请**加颗小星星**,没有收获的话可以 **反对** **没有帮助** **举报**三连 ## 一、Dockerfile定制镜像 ```bash # FROM 指定基础镜像 FROM 镜像 FROM php:7.2-fpm # RUN 执行 RUN or RUN ["可执行文件", "参数1", "参数2"] RUN echo 'Hello, Docker!' > /usr/share/nginx/html/index.html RUN ["php", "-S", "0.0.0.0:8080"] # COPY 复制文件 COPY ... COPY swoole-4.2.10.tgz /home COPY nginx.conf /etc/nginx/nginx.conf # ADD 复制文件或目录,如果是.tgz,会被解压缩 ADD ... ADD nginx.conf /etc/nginx/nginx.conf # CMD 容器启动 CMD echo $HOME => CMD [ "/bin/sh", "-c", "echo $HOME" ] CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] # ENTRYPOINT 入口点 ENTRYPOINT ["docker-entrypoint.sh"] 存在 ENTRYPOINT 后,CMD 的内容将会作为参数传给 ENTRYPOINT # ENV 环境变量 ENV ENV MYSQL_ROOT_PASSWORD root # ARG与ENV差不多 ARG 所设置的构建环境环境变量,在将来容器运行时是不会存在这些环境变量的 ENV MYSQL_ROOT_PASSWORD root # VOLUME 匿名卷 VOLUME ["", ""...] VOLUME ["/data"] # EXPOSE 暴露端口 EXPOSE [...] EXPOSE 80 443 # WOEKDIR 指定工作目录,进入容器后的落地目录 WORKDIR WORKDIR /var/www # USER 指定当前用户 USER USER root ``` ## 二、docker-compose - 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 - 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。 ## 三、docker-compose编排lnmp环境 ### 1、mysql 这里我们使用了mysql5.5版本,没其它用意,相比5.7以上版本,占内存和硬盘最小的一个版本 我们准备了一个`my.cnf`作为额外配置,这里我修改了数据库的时区 ```cnf [mysqld] default-time-zone = '+8:00' ``` ```Dockerfile FROM mysql:5.5 COPY my.cnf /etc/mysql/conf.d EXPOSE 3306 ``` ### 2、redis 我们使用准备的配置文件`redis.conf`覆盖容器默认启动的配置文件,修改了`ip绑定`和`密码` ```conf bind 0.0.0.0 requirepass root ``` ```Dockerfile FROM redis:latest COPY redis.conf /usr/local/etc/redis/redis.conf CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] EXPOSE 6379 ``` ### 3、mongo mongodb我们没有特殊处理 ```Dockerfile FROM mongo:latest EXPOSE 27017 ``` ### 4、nginx 我们准备了一份`nginx.conf`和虚拟目录`conf.d`,为了以后可以动态的配置网站的代理和负载均衡 还有一个日志目录,放在外层`logs`目录里面,记录nginx的访问日志 特别注意的是`fastcgi_pass php:9000;`而不是`fastcgi_pass 127.0.0.1:9000;`,目前自己也没明白 ```Dockerfile FROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 ``` ### 5、php php算是这里面最难搞定的,因为我们需要额外的添加php扩展,虽然php的docker官方提供了`docker-php-ext-configure`, `docker-php-ext-install`, `docker-php-ext-enable`,还是有些扩展需要通过`手动编译`或者`pecl`安装 由于pecl官网下载慢,我们事先下载好了几个需要的扩展 php-fpm用的是debian的linux系统,下载也很慢,我们备用了阿里云的镜像`sources.list` 我们还准备了php的默认配置`php.ini`和`opcache.ini` 比如swoole扩展安装,记得安装包用完后清理,还有得用`COPY`命令,`ADD`会解压缩 ```Dockerfile # swoole COPY swoole-4.2.10.tgz /home RUN pecl install /home/swoole-4.2.10.tgz && \ docker-php-ext-enable swoole && \ rm /home/swoole-4.2.10.tgz ``` ### 6、完整版 ```yml version: '3' networks: frontend: driver: bridge backend: driver: bridge volumes: mysql: driver: local mongo: driver: local redis: driver: local services: php: build: ./php volumes: - ${WORKER_DIR}:/var/www ports: - 9100:9000 depends_on: - mysql - redis - mongo networks: - backend nginx: build: ./nginx volumes: - ${WORKER_DIR}:/var/www - ./logs/nginx:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d ports: - 8000:80 depends_on: - php networks: - frontend - backend mysql: build: ./mysql environment: - MYSQL_ROOT_PASSWORD=root volumes: - ${DATA_PATH}/mysql:/var/lib/mysql ports: - 3310:3306 networks: - backend mongo: build: ./mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=root ports: - 27010:27017 volumes: - ${DATA_PATH}/mongo:/data/db networks: - backend redis: build: ./redis volumes: - ${DATA_PATH}/redis:/data ports: - 6310:6379 networks: - backend ```
要使用Docker部署LNMP架构(Linux+Nginx+MySQL+PHP),首先需要安装DockerDocker Compose。你可以按照以下步骤进行部署: 1. 安装DockerDocker Compose: 首先,按照引用中的指引,配置Docker的yum源,并安装DockerDocker Compose。安装完成后,启动Docker服务。 2. 准备部署文件: 下载引用中的docker-lnmp项目,将docker-compose-linux-x86_64-v2.5.0文件移动到/usr/local/bin目录下,并赋予执行权限。 3. 编辑docker-compose.yml文件: 进入docker-lnmp项目文件夹,在该目录下找到docker-compose.yml文件,并使用任意文本编辑器进行编辑。根据你的需求,可以对镜像版本、端口映射、环境变量等进行配置。 4. 运行Docker Compose: 在docker-lnmp项目文件夹中打开终端,并执行以下命令: ``` docker-compose up -d ``` 这将启动LNMP架构的Docker容器,并在后台运行。 5. 验证部署: 使用浏览器访问本地主机的Nginx服务,默认端口为80。如果一切正常,你应该能够看到Nginx的欢迎页面。 通过以上步骤,你可以使用Docker快速部署LNMP架构,并实现应用程序的隔离性和安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker部署LNMP完整教程](https://blog.csdn.net/ThesCript_j/article/details/107402923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker部署lnmp架构](https://blog.csdn.net/weixin_65643437/article/details/131124609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值