docker中安装lnmp开发环境

今天记录一下,我在win10子系统wsl2中利用docker容器技术来定制自己的开发环境,也算是对以前学习的docker知识点进行一个综合练习吧

至于怎么安装子系统,可以查看我以前记录的笔记

环境配置

环境配置

由于我这有的项目时间比较久,为了兼容,我的php版本先安装个5.6,等后面我再安装一个比较新的版本切换

目录结构

├── data #挂载数据卷的目录

│ ├── mysql

│ └── redis

├── docker #docker容器的一些配置启动文件

│ ├── bin #用于docker-compose的管理 目录

│ │ └── docker-compose-dev.yml

│ ├── config #容器服务的配置文件目录

│ │ ├── mysql

│ │ ├── nginx

│ │ ├── php

│ │ └── redis

│ └── dockerfile #各个容器的dockerfile目录

│ ├── mysql-5.7.27

│ ├── nginx-1.20.1

│ ├── php-5.6.9

├──ext #这个里面会保存一些php扩展源码

│ └── redis-6.0.6

├── log

│ ├── mysql

│ ├── nginx

│ ├── php

│ └── redis

└── www

步骤

Nginx Dockerfile文件

FROM nginx:1.20.1

LABEL author="lnssm"

LABEL email=3088573902@qq.com

LABEL version="1.0"

#时区

ENV TZ Asia/Shanghai

RUN date -R

#在容器里启动的服务都不能在后台运行,注意后面的分号别丢了

CMD ["nginx","-g","daemon off;"]

测试nginx Dockerfile文件

#在dockerfile目录下执行如下命令,运行测试能否成功

docker build -t lnssm/nginx:1.0 .

#运行nginx服务,使用curl测试

docker run --name mynginx -d -p 80:80 lnssm/nginx:1.0

#使用curl测试,或用浏览器测试

curl localhost

mysql Dockerfile文件

FROM mysql:5.7.27

LABEL author="lnssm"

LABEL email=3088573902@qq.com

LABEL version="1.0"

#设置时区

ENV TZ Asia/Shanghai

RUN date -R

CMD ["mysqld"]

测试mysql Dockerfile文件

#在dockerfile目录下执行如下命令,运行测试能否成功

docker build -t lnssm/mysql:1.0 .

#运行nginx服务,使用curl测试

docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 lnssm/mysql:1.0

#使用curl测试,或用浏览器测试

docker exec -it mysql mysql -uroot -p #回车输入密码,能否进入到mysql

redis Dockerfile文件

FROM redis:6.0.6

LABEL author="lnssm"

LABEL email=3088573902@qq.com

LABEL version="1.0"

#设置时区

ENV TZ Asia/Shanghai

RUN date -R

#容器启动时执行的命令

CMD ["redis-server"]

测试redis Dockerfile文件

#在dockerfile目录下执行如下命令,运行测试能否成功

docker build -t lnssm/redis:1.0 .

#运行nginx服务,使用curl测试

docker run --name myredis -d lnssm/redis:1.0

#使用redis 客户端链接测试

docker exec -it myredis redis-cli

PHP Dockerfile文件

FROM php:5.6.9-fpm

LABEL author="lnssm"

LABEL email=3088573902@qq.com

LABEL version="1.0"

#设置时区

ENV TZ Asia/Shanghai

RUN date -R

#安装依赖

RUN apt-get update --fix-missing && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include/jpeg

COPY ./ext/redis-4.3.0.tgz /usr/src/php/ext

#ADD ./ext/amqp-1.10.2.tgz /usr/src/php/ext/amqp

CMD cd /usr/src/php/ext && tar -zxvf redis-4.3.0.tgz && rm -rf redis-4.3.0.tgz && mv redis-4.3.0 redis && docker-php-ext-install redis

#RUN cd /usr/src/php/ext && tar -zxvf amqp-1.10.2.tgz && rm -rf amqp-1.10.2.tgz && mv amqp-1.10.2 amqp && docker-php-ext-install amqp

#ADD ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz

#&& cd libmcrypt-2.5.7 && ./configure –prefix=/usr/local && make && make install

RUN docker-php-ext-install gd mysqli opcache pdo pdo_mysql gd zip bcmath fileinfo hash iconv

#设置环境变量

ENV PHPREDIS_VERSION 4.3.0

#ENV PHPAMQP_VERSION 1.10.2

ENV PHPSWOOLE_VERSION 1.10.1

ENV PHPMONGODB_VERSION 1.5.3

ENV PHPUUID_VERSION 1.2.0

#RUN pecl install redis-$PHPREDIS_VERSION

# && pecl install swoole-$PHPSWOOLE_VERSION

# && pecl install mongodb-$PHPMONGODB_VERSION

# && pecl install amqp-$PHPAMQP_VERSION

# && docker-php-ext-enable redis swoole mongodb uuid

#安装composer工具

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://mirrors.aliyun.com/composer/

# clear

RUN 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"]

Docker-compose-dev.yml配置

version: '3.3'

services:

nginx:

build: /mnt/d/wsl_www/docker/dockerfile/nginx-1.20.1

container_name: nginx

ports:

- "80:80"

restart: always

tty: true

volumes:

- /mnt/d/wsl_www/www:/var/www/html

- /mnt/d/wsl_www/log/nginx:/var/log/nginx

- /mnt/d/wsl_www/docker/config/nginx:/etc/nginx

- /mnt/d/wsl_www/docker/config/nginx/letsencrypt:/etc/letsencrypt

networks:

- lnmp-networks

php5.6:

build: /mnt/d/wsl_www/docker/dockerfile/php-5.6.9

tty: true

restart: always

container_name: php5.6

volumes:

- /mnt/d/wsl_www/www:/var/www/html

- /mnt/d/wsl_www/log/php:/var/log/php

- /mnt/d/wsl_www/docker/config/php:/usr/local/etc/php/

- /mnt/d/wsl_www/docker/config/php:/usr/local/etc/

depends_on:

- nginx

networks:

- lnmp-networks

redis:

build: /mnt/d/wsl_www/docker/dockerfile/redis-6.0.6

container_name: redis

tty: true

restart: always

ports:

- "6379:6379"

volumes:

- /mnt/d/wsl_www/docker/config/redis:/usr/local/etc/redis

- /mnt/d/wsl_www/data/redis:/data

- /mnt/d/wsl_www/log/redis:/var/log/redis

networks:

- lnmp-networks

mysql:

build: /mnt/d/wsl_www/docker/dockerfile/mysql-5.7.27

container_name: mysql

tty: true

restart: always

ports:

- "3306:3306"

volumes:

- /mnt/d/wsl_www/data/mysql:/var/lib/mysql

- /mnt/d/wsl_www/docker/config/mysql:/etc/mysql

- /mnt/d/wsl_www/log/mysql:/var/log/mysql

environment:

MYSQL_ROOT_PASSWORD: 123456

networks:

- lnmp-networks

networks:

lnmp-networks:

遇到的坑

1 . 访问php文件显示: 404 file not found

#解决办法,修改root路径与项目路径一致,默认是在/usr/share/nginx/html/ ,

location ~ .php$ {

root /var/www/html; #这里修改一下

include fastcgi_params;

fastcgi_index index.php;

fastcgi_pass php5.6:9000; #容器:端口号

#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

2 . 连接docker里的数据库,得使用数据库的容器名称!

安装php扩展amqp遇的坑,记录一下步骤

#这里我没有放在php的 Dockerfile文件里,有需要的可以直接加上就可以了!!!

说明

#我这里把php扩展源码包和依赖包都放在php5.6.9的目录下的ext目录下!!!!

环境说明

步骤

1 . 源码包和依赖包得到到php容器中

#命令

docker cp amqp-1.10.2.tgz php5.6.9:/home

docker cp rabbitmq-c-0.8.0.tar.gz php5.6.9:/home

2 . 先安装依赖

解压

#解压命令

tar -zxvf rabbitmq-c-0.8.0.tar.gz && cd rabbitmq-c-0.8.0 && rm -rf rabbitmq-c-0.8.0.tar.gz

编译并安装

#指定安装目录并编译安装

./configure --prefix=/usr/local/rabbitmq-c-0.8.0 && make && make install

3 . 再安装php扩展amqp

解压amqp-1.10.2.tgz

#解压

tar -zxvf amqp-1.10.2.tgz && cd amqp-1.10.2

设置php配置目录,编译安装

#使用phpize生成配置脚本

/usr/local/bin/phpize

#编译

./configure --with-php-config=/usr/local/bin/php-config --with-amqp --with-librabbitmq-dir = /usr/local/rabbitmq-c-0.8.0 && make && make install

可能出现的问题

#问题是amqp_ssl_socket.h not found

#解决办法:需要向依赖包里把这个文件得到到这amqp-1.10.2目录中

cp cp /home/rabbitmq-c-0.8.0/librabbitmq/amqp_ssl_socket.h /home/amqp-1.10.2/

#再重新make && make install

4 . 修改php.ini配置文件

#我这里是没有docker-php-ext-enable这个脚本的,

#php.ini配置文件添加,可以使用php -i |grep php.ini 查看配置文件路径

extension=amqp.so

5 . 重启php 服务

#查看php 加载的模块

php -m

展开阅读全文

页面更新:2024-03-10

标签:环境   子系统   容器   脚本   路径   源码   时区   步骤   命令   浏览器   版本   数据库   文件   测试   目录   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top