Dockerfile 方式定制 lnmp 环境
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,现在容器化技术越来越成熟和流行,比传统的虚拟化技术确实是有很大的优势,所以流行是必然的。今天来实践一把,使用Docker的dockerfile方式定制lnmp环境。环境配置操作系统:CentOS Li
千家信息网最后更新 2025年01月31日Dockerfile 方式定制 lnmp 环境
现在容器化技术越来越成熟和流行,比传统的虚拟化技术确实是有很大的优势,所以流行是必然的。今天来实践一把,使用Docker的dockerfile方式定制lnmp环境。
环境配置
操作系统:CentOS Linux release 7.6.1810Docker 版本:19.03.5Nginx 版本:1.15.5PHP 版本:7.2.26MySQL 版本:8.0.18Redis 版本:5.0.5
创建目录结构
docker目录://docker相关配置[root@zhangdeTalk data]# tree dockerdocker├── bin│ └── docker-compose-linux.yml //dockerfile.yml├── config│ ├── mysql│ │ └── mysqld.cnf //数据库配置文件│ ├── nginx│ │ ├── conf.d│ │ │ └── default.conf //nginx主要配置文件│ │ └── nginx.conf //nginx基础配置文件│ ├── php│ │ ├── php.ini //php基础配置文件│ │ └── www.conf //php主要配置文件│ └── redis│ └── redis.conf //redis配置文件├── dockerfile│ ├── mysql-8.0.18│ │ └── Dockerfile //mysql的dockerfile│ ├── nginx-1.15.5│ │ └── Dockerfile //nginx的dockerfile│ ├── php-7.2-fpm│ │ └── Dockerfile //php的dockerfile│ └── redis-5.0.5│ └── Dockerfile //redis的dockerfile├── README.en.md└── README.md
www目录://站点目录[root@zhangdeTalk data]# tree wwwwww└── zhangdetalk_blog_admin├── 1.html└── index.php
logs目录://日志目录[root@zhangdeTalk data]# tree logslogs├── mysql├── nginx│ ├── access.log│ └── error.log├── php└── redis
mysql目录://数据库数据目录
redis目录://数据库数据目录
Docker安装
先在CentOS安装Docker,可参考另外一篇文章:CentOS安装Docker
构建lnmp镜像Dockerfile
PHP Dockerfile
From php:7.2-fpm#维护者信息MAINTAINER zhangdeTalk 2393222021@qq.com#时区ENV TZ Asia/ShanghaiRUN date -R#RUN docker-php-ext-install bcmath dom fileinfo filter ftp gd gmp hash iconv imap json mbstring mysqli odbc opcache pdo pdo_mysql pdo_odbc phar reflection session snmp soap sockets zip#RUN docker-php-ext-install mysqli opcache pdo_mysqlWORKDIR /workingRUN apt-get update --fix-missing && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include/jpeg \ && docker-php-ext-install gd mysqli opcache pdo_mysql gd zipENV PHPREDIS_VERSION 4.0.1ENV PHPXDEBUG_VERSION 2.6.0ENV PHPSWOOLE_VERSION 4.2.13ENV PHPMONGODB_VERSION 1.5.3RUN pecl install redis-$PHPREDIS_VERSION \ && pecl install xdebug-$PHPXDEBUG_VERSION \ && pecl install swoole-$PHPSWOOLE_VERSION \ && pecl install mongodb-$PHPMONGODB_VERSION \ && docker-php-ext-enable redis xdebug swoole mongodb# install composer new# https://getcomposer.org/installer | https://install.phpcomposer.com/installer RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php composer-setup.php \ && php -r "unlink('composer-setup.php');" \ && mv composer.phar /usr/local/bin/composer \ && composer config -g repo.packagist composer https://packagist.laravel-china.orgRUN apt-get install -y git# clearRUN rm -rf /var/cache/apt/* \ && rm -rf /var/lib/apt/lists/*RUN mkdir /var/lib/sessions \ && chmod o=rwx -R /var/lib/sessions#容器启动时执行指令CMD ["php-fpm"]
Nginx Dockerfile
From nginx:1.15.5#维护者信息MAINTAINER zhangdeTalk 2393222021@qq.com#时区ENV TZ Asia/ShanghaiRUN date -R#容器启动时执行指令CMD ["nginx", "-g", "daemon off;"]
Mysql Dockerfile
From mysql:8.0.18#维护者信息MAINTAINER zhangdeTalk 2393222021@qq.com#时区ENV TZ Asia/ShanghaiRUN date -R#容器启动时执行指令CMD ["mysqld"]
Redis Dockerfile
From redis:5.0.5#维护者信息MAINTAINER zhangdeTalk 2393222021@qq.com#时区ENV TZ Asia/ShanghaiRUN date -R#容器启动时执行指令CMD ["redis-server"]
dockerfile.yml配置
version: '3.3'services: nginx: build: ../dockerfile/nginx-1.15.5 ports: - "80:80" #nginx restart: always tty: true container_name: nginx volumes: - /data/www:/var/www/html - /data/logs/nginx:/var/log/nginx - /data/docker/config/nginx/conf.d:/etc/nginx/conf.d - /data/docker/config/nginx/nginx.conf:/etc/nginx/nginx.conf - /etc/letsencrypt:/etc/letsencrypt networks: - lnmp-networks php7: build: ../dockerfile/php-7.2-fpm tty: true restart: always container_name: php7 volumes: - /data/www:/var/www/html - /data/logs/php:/var/log/php - /data/docker/config/php/php.ini:/usr/local/etc/php/php.ini - /data/docker/config/php/www.conf:/usr/local/etc/php-fpm.d/www.conf depends_on: - nginx networks: - lnmp-networks redis: build: ../dockerfile/redis-5.0.5 container_name: redis tty: true restart: always volumes: - /data/docker/config/redis/redis.conf:/etc/redis/redis.conf - /data/redis:/var/lib/redis - /data/logs/redis:/var/log/redis networks: - lnmp-networks mysql: build: ../dockerfile/mysql-8.0.18 container_name: mysql tty: true restart: always ports: - "3306:3306" #mysql volumes: - /data/mysql:/var/lib/mysql - /data/docker/config/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf - /data/logs/mysql:/var/log/mysql - /data/mysqlback:/data/mysqlback environment: MYSQL_ROOT_PASSWORD: root networks: - lnmp-networksnetworks: lnmp-networks:
Nginx配置文件
vim /data/docker/config/nginx/conf.d/default.confserver { listen 80; listen [::]:80; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php; charset utf-8; server_name zhangdetalk.com www.zhangdetalk.com; location ~ \.md$ { default_type 'text/plain'; } root /var/www/html/zhangdetalk_blog_admin;//项目目录 location / { #try_files $uri $uri/ =404; index index.php index.htm index.html; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } } location ~ \.php$ { include fastcgi_params; fastcgi_index index.php; fastcgi_pass php7:9000;//容器:端口号 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
docker-compose安装
1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose2. chmod +x /usr/local/bin/docker-compose //设置可执行权限
创建并启动容器
docker-compose -f docker-compose-linux.yml up -d --force-recreate --remove-orphans
容器查看
docker ps
测试
vim /data/www/zhangdetalk_blog_admin/index.php
通过访问站点:http://www.zhangdetalk.com/可以看到显示数据库连接成功,并打印出PHP的相关信息到此步,我们的lnmp环境搭建大功告成!
github源码
相关的源码下载地址:https://github.com/zhangdejian/docker_lnmp.git
遇到的问题
1、PHP代码连接数据库,host不能写成127.0.0.1或localhost,需要填写数据库容器名字
2、mysql8连接,连接失败,因为加密方式有变化解决方式:主机登录mysql,修改成旧的加密方式(mysql_native_password),并重置密码 * mysql -uroot -p;* use mysql;* select host,user,plugin from user;* alter user 'root'@'%' identified with mysql_native_password by '123456';
可参考这篇文章:Docker 安装 MySQL8.0
目录
配置
容器
数据
文件
数据库
信息
版本
方式
指令
时区
维护者
环境
基础
技术
源码
站点
篇文章
加密
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微信类软件开发教材
steam 服务器 错误
服务器u盘启动盘
软件开发流程实训总结
女生学网络技术怎么样
无法连接http服务器
腾讯云服务器管理系统
阿里巴巴数据库专题
学好c语言能干数据库开发吗
app软件开发验收标准
如何打开网页的数据库
软件开发技术好做吗
滨州采购软件开发服务
为啥叫网络安全
云服务器登录千牛后台
寻呼机用什么网络技术
鞍山网络技术有限公司
服务器上的代码安全
发电厂网络安全应急机制
济南app软件开发怎么样
网络安全工程报告怎么写
恩牛网络技术实习生
网络安全热点演讲
足球经理2022数据库的影响
为维护网络安全我们青少年应该
幼儿园护苗网络安全活动
深圳市橙为网络技术地址
无线网络安全防范措施有哪些
网络安全晨会目的
英雄无敌6服务器