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

【docker实操】使用docker部署一个laravel应用

时间:2023-03-30 02:40:44 PHP

最近部署了一个项目,新服务器,生产环境安装配置nginx、php、mysql、git、composer等东西很麻烦。Docker火了一段时间,已经成为后端和运维的必备技能。老大也说要试试,一起来感受一下docker的魅力吧。这篇文章是我学习和使用docker部署项目的记录。docker的主要优势可以概括为:一次构建,随处部署。我们使用docker搭建好项目后,可以使用统一的镜像部署在开发环境、测试环境、生产环境中,保证环境的一致性。并且docker支持linux、macos、windows三大平台。代码运行在容器中,不受外部操作系统的影响。这只取决于你的形象。另外我们可以部署不同版本的应用,比如mysql5.5和mysql5.7,互不干扰。操作思路关于docker的安装及相关概念,这里不再赘述。网上的资料很多,我说说具体的实现思路。正确的使用方式不是在项目完成后才开始构建docker镜像,而是在项目架构、依赖、环境确定后,再构建并配置docker镜像,然后在其中开发运行代码容器。之后部署只需要移植镜像生成容器即可,可以保证环境的一致性。我的项目非常简单。我只用nginx、php、mysql三件套。nginx使用php-fpm作为cgi解析器。需要用到三个镜像:nginx、php-fpm、mysql。为什么要使用三个图像而不是将所有三个图像集成到一个大图像中?这是docker推荐的。镜像要尽量解耦,方便复用,避免镜像臃肿。容器通过网络连接。官方提供了很多高质量的镜像,我们只需要根据官方镜像进行选择和配置即可。请参阅我的githubnginx镜像DockerFile以获取构建镜像的完整文件:FROMnginx:1.10ADDnginx.conf/etc/nginx/nginx.confADDsite.conf/etc/nginx/conf.d/ADDmkdir.sh/opt/RUNchmod+x/opt/mkdir.sh&&/opt/mkdir.sh把基础配置和站点配置复制进去,用shell步骤创建好日志文件夹php-fpm镜像DockerFile:FROMphp:7.0-fpmADDapt-list/opt/RUNcp/etc/apt/sources.list/etc/apt/sources.list.bak\&&cat/opt/apt-list>/etc/apt/sources.list\&&apt-getupdate\&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libmcrypt-dev\libpng-devRUNdocker-php-ext-install-j$(nproc)iconvmcrypt\&&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\&&docker-php-ext-install-j$(nproc)gd\&&docker-php-ext-安装pdo_mysql\&&docker-php-ext-installzipRUNcurl-sShttps://getcomposer.org/installer|php----install-dir=/usr/local/bin--filename=composer\&&composerconfig-grepo.packagistcomposerhttps://packagist.phpcomposer.com\php镜像是最麻烦的,需要安装系统依赖,php扩展,composer,设置环境变量phpextension是指使用apt的官方镜像dockr-hub-php,所以我们需要修改apt源。官方的php镜像基于debian,而不是ubuntu。运行一次dockerfile构建一层。推荐aptinstall分层安装,phpextension分层安装,不要全部放在一层。这样做的好处是如果二级php扩展安装失败,不需要再次运行aptinstall。我们在最后一层安装composer。为了使php版本一致,我们应该在php容器内部调用php作为cli:dockerrun-it-v$PWD:/opt/code-w/opt/codemy-phpphp-v命令太长,我们可以做一个别名,在~/.bash_aliases中添加一行(注意最后一个空格):aliasmyphp='dockerrun-it-v$PWD:/opt/code-w/opt/code--rmmy-php'weareinyourpath在/opt/code下创建laravel应用,修改权限,注意把你加入宿主机的www-data组:cd~/docker-php/opt/codemyphpcomposercreate-project--prefer-distlaravel/laravel.sudochown-Rwww-data:www-data。&&sudochmod-R775.mysqlmirrorDockerFile:FROMmysql:5.7mysql最简单,使用官方的docker-compose启动容器即可。我们现在有三个图像。如果一个一个开始,连接和挂载是很麻烦的。官方提供了docker-compose工具,一起编写配置,一键启动。docker-compose.yml:nginx:build:./nginxports:-"80:80"links:-"php"volumes:-~/docker-php/opt:/optphp:build:./phpports:-"9000:9000”链接:-“mysql”卷:-~/docker-php/opt:/optmysql:构建:./mysql端口:-“3306:3306”卷:-~/docker-php/opt/data/mysql:/var/lib/mysql环境:MYSQL_ROOT_PASSWORD:123456使用docker-composeup命令启动容器组:开始访问yourhost:80即可看到熟悉的laravel欢迎页面:进入mysql容器建立数据库并建表测试数据库连接:dockerexec-itdockerphp_mysql_1bashtomodifyyourpath/opt/code/routes:Testedandreportedanerror:SQLSTATE[HY000][2002]ConnectionrefusedGoogled了一下,修改了.env,改了db_host到你的ip:DB_HOST=127.0.0.1->DB_HOST=yourhostaccess/mysql,页面输出,大功告成:参考:docker入门实践Docker在PHP项目开发环境中的应用