当前位置: 首页 > 后端技术 > PHP

docker学习笔记的lnmp

时间:2023-03-29 19:58:49 PHP

的构建学习了dockerfile构建lnmp和多容器构建lnmp。不断删除、重建、测试。记录同一个容器使用dockerfile构建lnmpdocker搜索镜像但是我一般使用https://hub.docker.com/r/libr...在里面找镜像。新建dockerfile,写入FROMubuntu:16.04MAINTAINERcpRUNapt-getupdate&&\apt-getinstallnginxEXPOSE80dockerfile1所在目录,运行dockerbuild-tlnp:v1。我用的是dockerfile1,跑错了。必须使用名字dockerfile,否则需要通过-f指定文件。ubuntu在docker中更新软件速度太慢。添加一行命令,将ubuntu中的source替换为国内的RUNsed-is@/archive.ubuntu.com/@/mirrors.aliyun.com/@g/etc/apt/sources.list切换到国内的sources。那么这个要继续吗?[是/否]中止。又出现了,因为有些软件安装会交互。如果运行后发现问题,每次运行完成后会立即退出。默认情况下,docker容器会使用容器内部的第一个进程,即pid=1的程序,作为docker容器是否运行的依据。如果docker容器pid挂了,docker容器会直接退出。所以之前使用nginxrestart命令也会导致nginx容器停止。Docker容器要在后台运行,必须有一个前台进程。每次rebuild时构建php支持下载依赖有点慢。于是在ubuntu16.04的基础上重建了一个ubuntu:v1。从ubuntu:v1MAINTAINERcpRUNapt-getinstall-ynginx&&\apt-getinstall-yphp7.0-fpmCOPY./default/etc/nginx/sites-available/defaultCMDservicephp7.0-fpmstart&&nginx-g'daemonoff;'EXPOSE80使用COPY命令向其添加nginx配置文件和php配置文件。在安装mysql的过程中,我测试了apt-getinstall-ymysql-server-5.7,出现提示要求输入密码,但是卡住了。RUNDEBIAN_FRONTEND=noninteractiveapt-getinstall-ymysql-server-5.7文件是dockerbuild原因是chown-Rmysql:mysql/var/lib/mysql,这样mysql就可以读写了。mysql默认是MYSQL_ONETIME_PASSWORD,所以用mysql直接进入,然后马上改密码ALTERUSER'root'@'localhost'IDENTIFIEDBY'password';正常安装apt-getphp-mysql就可以访问了。注意docker容器日志输出问题。只有主进程(pid为1)的相关进程日志才会输出到stdoutCompletebuildFROMubuntu:v1MAINTAINERcpRUNapt-getinstall-ynginx&&\apt-getinstall-yphp7.0-fpmRUNDEBIAN_FRONTEND=noninteractiveapt-获取安装-ymysql-server-5.7COPY./default/etc/nginx/sites-available/defaultCMDchown-Rmysql:mysql/var/lib/mysql&&servicemysqlstart&&servicephp7.0-fpmstart&&nginx-g'守护程序关闭;'EXPOSE80多容器使用--link构建lnmp--link是通过/etc/hosts绑定的。直接使用现成的镜像dockerpullphp:7.0-fpmdockerpullmysql:5.6dockerpullnginx先运行mysqldockerrun-d-p3309:3306-eMYSQL_ROOT_PASSWORD=root--nametest_mysqlmysql:5.6然后运行phpdockerrun-d-p9001:9000-v/Users/chenpei/PHP:/usr/share/nginx/html--nametest_php--linktest_mysqlphp:7.0-fpmfast-cgi协议是把脚本名传给fpm,所以也去挂载目录。运行php容器也需要相应的php-mysql扩展,但是要安装docker-php-ext-installmysqlipdopdo_mysql最后运行nginxdockerrun-d-p8088:80-v/Users/chenpei/PHP:/usr/share/nginx/html--nametest_nginx--linktest_phpnginx:latest修改配置文件并重启fastcgi_passtest_php:9000常用命令dockersearchimage搜索可用镜像dockerbuildimage。通过dockerfiledockerbuild-timage:tag构建镜像。Passeddockerfile从基础镜像构建镜像MAINTAINER维护者,或者创建者COPY复制到容器中ADD功能类似于COPYEXPOSE声明暴露的端口RUN用于执行命令CMD命令及其参数是容器启动后默认执行,dockerfile中只能有一个ENV设置环境变量ARG构建参数。容器运行时,不会保存环境变量VOLUME。为了防止用户在运行时忘记挂载保存动态文件的目录为volume,在Dockerfile中,我们可以预先指定某些目录挂载为Anonymousvolumes,这样如果用户没有指定运行时挂载,应用也可以正常运行,无需向容器存储层写入大量数据。WORKDIR相当于cd命令,主要是因为docker分层概念USER指定了当前用户下的命令RUNONBUILD等,HEALHCHECK健康检查只有在构建下一级镜像时才会执行