docker 容器搭建 lnmp 环境小记

1.阿里云容器地址

https://cr.console.aliyun.com  

2.创建镜像仓库

3.虚拟机修改docker源

修改文件:/etc/docker/daemon.json

内容:

{  "registry-mirrors": ["https://78zjyej0.mirror.aliyuncs.com"]  }  

4.虚拟机登录仓库账号

docker login --username= registry.cn-shenzhen.aliyuncs.com  

输入账号密码,账号为阿里云账号,密码是在仓库那里另外设置的密码
有时login会出现这个问题: x509: certificate has expired or is not yet valid

这个问题是由于虚机的系统时间没有校正导致的,使用date命令查看时间是否为本地时间 ,使用命令 ntpdate cn.pool.ntp.org 校正时间,如果提示命令不存在,使用命令安装 yum instal ntp ,再使用 date 命令进行查看,确保时间为本地时间,最后重新使用 docker login 命令,输入密码即可。

5.拉取php镜像

docker pull php:7.2-fpm  

尝试过很多php镜像,发现还是这个好用一点,配置文件分割清析在 /usr/local/etc 下面,php相关命令较全,在 /usr/local/bin 下可以看到很多命令,包括 phpize php-config 等等,而且改配置立即生效。

6.xdebug扩展

使用镜像开启一个容器 docker run -itd --name php php:7.2-fpm ,进入容器 docker exec -it php bash ,
使用 php -m 命令可看相关模块,笔者自己安装了 xdebug 扩展,使用命令 php -i > phpinfo.txt 获取到环境信息,复制文件里的内容到这个网址获取对应版本的 xdebug https://xdebug.org/wizard.php
,文件是下载到宿主机的,要拷贝文件到docker容器中, docker cp filename containerid:target_file_path ,到容器中解压文件并进入目录

/usr/local/bin/phpize  ./configure --with-php-config=/usr/local/bin/php-config  make && make install  

安装完成,添加配置,在目录 /usr/local/etc/php/conf.d 下添加xdebug.ini文件,内容为

;zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so    ;xdebug.remote_enable=1  ;xdebug.idekey="PHPSTORM"  ;xdebug.remote_connect_back=1  ;xdebug.remote_port=9900  ;xdebug.remote_log="/tmp/xdebug_log/"  

使用的时间把”;”删除,使用xdebug生效, php -m 查看安装模块是否有xdebug。如果要安装其他模块,安装命令和配置添加类似,可以下载相应的php安装源码cp到虚拟机安装所需的扩展。(笔者曾经试过自己安装在一个centos容器中安装php环境,跑到最后达到了1.5G,最重要的是fileinfo这个扩展安装不了,提示内存不足,在网上找了很多方法都不行,最后放弃了,直接找现成的php容器)

7.提交镜像

回到宿主机,为保留刚才做的修改,所以重新创建一个镜像 git commit -m 'update php image' songzw/php-fpm:v1 ,此时使用 git images 可以看到多了一个 songzw/php-fpm:v2 镜像

8.提交镜像到阿里仓库

docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/songzw/php:[镜像版本号] 把仓库修改到阿里, docker push registry.cn-shenzhen.aliyuncs.com/songzw/php:[镜像版本号] 完成推送。

9.在php容器中需要安装composer才能安装扩展包,使用composer命令时要用到git,zip,unzip命令,所以要先 apt-get update , apt-get install git zip upzip ,重新构建镜像。

10.docker-compose构建nginx

./nginx/Dockerfile

from nginx  COPY ./*.conf /etc/nginx/conf.d/  run mkdir -p /var/nginx/logs/access /var/nginx/logs/error && chmod -R 777 /var/nginx  CMD nginx  

nginx如果本地没有,则会先从远程仓库中拉取,将本地的conf配置文件拷贝到容器,在容器中创建目录并且授权,这个不是必须的,因为我本地的conf文件里配置的日志文件和错误文件是在这个目录,所有本地也要先有这个目录,如果容器起不来,使用docker logs containerid来查看日志,有可能是这个目录问题导致的,最后以nginx进程来运行容器,这个放到docker-compose里面没有生效,导致容器起不来。

11.docker-compose构建mysql

./mysql/Dockerfile

from mysql:5.6  COPY ./*.cnf /etc/mysql/mysql.conf.d/  

需要在mysql目录下 touch my.cnf ,里面内容为自定义配置,可以为空,mysql:5.6镜像如果本地不存在也是从远程拉取。

12.docker-compose构建php

from songzw/php-fpm:v5  COPY *.conf /usr/local/etc/php-fpm.d/  COPY *.ini /usr/local/etc/php/conf.d/  run chown -R www-data.www-data /var/www  

其中songzw/php-fpm:v5是笔者从php:7.2-fpm拉取下来进行重新构建的镜像,要创建文件 touch my.conftouch my.ini ,这样可以添加自定义配置,/var/www修改属主是因为会出现缓存文件的写权限问题

13.docker-compose.yml

最后呈现docker-compose.yml文件内容

mysql:    build: ./mysql/    volumes:     - /var/mysql/data:/var/lib/mysql     - /var/mysql/logs:/var/log/mysql    expose:     - "3306"    ports:     - 3306:3306    env_file:     - ./env     php:    build: ./php/    volumes:     - /var/www/html:/var/www/html    expose:     - "9000"    links:     - mysql    command: php-fpm     nginx:    build: ./nginx    volumes_from:     - php    volumes:     - /var/nginx:/var/nginx    links:     - php    ports:     - "80:80"  

使用 docker-compose up -ddocker-compose down 便可以搭建和销毁环境,其中nginx的配置文件在配置连接php时使用php容器ip或者 fastcgi_pass php:9000 ;,php代码连接mysql数据库时使用mysql容器ip或者别名mysql,即links对应的别名。

原文出处:laravel-china -> https://laravel-china.org/topics/13497/docker-container-set-up-lnmp-environment?order_by=created_at&

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。