今天记录一下,我在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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号