OrzLee

这个世界上只有一个问题
那就是时间问题

Laradock-部署本地开发环境

docker.png

前言

之前laravel开发环境一直都是homestead部署,最近发现docker蛮火的。这段时间没什么事,稍微研究了一番。

首先需要理解docker给我们解决了什么问题。 对于开发者来说,最重要的就是轻便。docker中的容器将每个进程单独分割,互不影响但又有使用关联。很神奇,试想一下homestead,它是一台虚拟机,一旦启动就会占用固定的资源,哪怕资源在虚拟机中没有使用,你也是无法干预的,在虚拟器启动的那刻就已经分配。这种情况会造成很多资源浪费。

使用docker,把每个应用/服务都单个放入容器中,不会占用固定资源。更多空闲资源可以被系统利用,不会浪费掉。

其实docker最大的特点是解决部署时的方便。项目上线需要生产环境,特别是分布式服务器,每台都要独立安装,但是使用docker部署起来就会相当方便,编写好docker-compose.yml 和各个 服务/应用的 Dockerfile 文件,几行命令就能部署好整个生产环境。

以上是我目前对docker的愚解。

安装docker

这部看docker文档就好了,很详细。 我是用的是windows,安装程序下一步... windows系统和MacOS使用安装程序不需要单独安装docker-compose

安装laradock

其实laradock文档中也很详细,直接clone代码就好了。

说说cp env-example .env文件吧。

### 主要是项目目录,你开发项目所在目录,如果在同目录下(多项目配置)则不用动
APP_CODE_PATH_HOST=../
### 项目在容器中挂载路径
APP_CODE_PATH_CONTAINER=/var/www
### 这个比较重要,数据卷存方位置,例如你的mysql数据库文件,redis持久化文件等(windows在C:\Users\用户名\.laradock\data)
DATA_PATH_HOST=~/.laradock/data
...
### workspace这个大项中,很多开发者用不到
### 像是PYTHON,NODE等我都会不安装
### 服务器上部署也是,不需要尽量别安装
WORKSPACE_INSTALL_NODE=true

### 开启zsh
SHELL_OH_MY_ZSH=true

### 开发环境需要XDebug就开启(反正我是需要)
WORKSPACE_INSTALL_XDEBUG=true
...
### php版本
PHP_VERSION=7.4
...
### 是否修改源,没翻墙还是需要
CHANGE_SOURCE=false
### ubuntu源
UBUNTU_SOURCE=aliyun
...
### php5.6含一下注意,redis扩展不支持,会报错
PHP_FPM_INSTALL_PHPREDIS=true

### 如果WORKSPACE_INSTALL_XDEBUG=true 开启了
### 那么这边也需要开启
PHP_FPM_INSTALL_XDEBUG=true
...
### 把我坑惨了,Supervisor是php-woker提供的,配置文件也在里面,如果不开启的话,php-woker容器中的php是不包含redis扩展的
PHP_WORKER_INSTALL_REDIS=true
...
### mysql配置,按自己需求该
MYSQL_VERSION=5.7
MYSQL_DATABASE=homestead
MYSQL_USER=homestead
MYSQL_PASSWORD=secret
### mysql外部端口,本地我已经装了mysql 3306、33060都已经被占用
MYSQL_PORT=33061
MYSQL_ROOT_PASSWORD=root
### 这里是多数据库配置,laradock/mysql/docker-entrypoint-initdb.d目录下对照样本加
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
...
### nginx配置
NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTPS_PORT=443
### 日志
NGINX_HOST_LOG_PATH=./logs/nginx/
### 多站点配置目录,找样本加
NGINX_SITES_PATH=./nginx/sites/
NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
NGINX_PHP_UPSTREAM_PORT=9000
NGINX_SSL_PATH=./nginx/ssl/
...

如果你开启了oh-my-zsh,默认是没有任何插件的,皮肤也是默认,laradock没有露出.zshrc配置文件文件,只能修改workspaceDockerfile文件了,在Dockerfile文件找到下面代码(我是按照之前写得一篇文章oh-my-zsh强大的zsh配置管理配置安装的):

###########################################################################
# Oh My ZSH!
###########################################################################

USER root

ARG SHELL_OH_MY_ZSH=false
RUN if [ ${SHELL_OH_MY_ZSH} = true ]; then \
    apt install -y zsh \
;fi

USER laradock
RUN if [ ${SHELL_OH_MY_ZSH} = true ]; then \
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) --keep-zshrc" && \
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && \
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && \
    sed -i -r 's/^plugins=\(.*?\)$/plugins=(laravel5 zsh-syntax-highlighting zsh-autosuggestions)/' /home/laradock/.zshrc && \
    sed -i -r 's/^ZSH_THEME=\".*?\"$/ZSH_THEME="ys"/' /home/laradock/.zshrc && \
    echo '\n\
bindkey "^[OB" down-line-or-search\n\
bindkey "^[OC" forward-char\n\
bindkey "^[OD" backward-char\n\
bindkey "^[OF" end-of-line\n\
bindkey "^[OH" beginning-of-line\n\
bindkey "^[[1~" beginning-of-line\n\
bindkey "^[[3~" delete-char\n\
bindkey "^[[4~" end-of-line\n\
bindkey "^[[5~" up-line-or-history\n\
bindkey "^[[6~" down-line-or-history\n\
bindkey "^?" backward-delete-char\n' >> /home/laradock/.zshrc \
;fi

可以自定义安装插件,修改皮肤。git clone ...下载插件,记得在sed -i -r 's/^plugins=\(.*?\)$/plugins=(laravel5 zsh-syntax-highlighting zsh-autosuggestions)/' /home/laradock/.zshrc && \中加载你的插件,sed -i -r 's/^ZSH_THEME=\".*?\"$/ZSH_THEME="ys"/' /home/laradock/.zshrc && \ 修改皮肤(例如我这里修改的是ys皮肤,echo '\n\ ...默认绑定了一些快捷键,不需要可以删掉。有兴趣可以查看我的文章oh-my-zsh强大的zsh配置管理)。

其他没什么安装需要注意的了,执行:

### 启动容器 mysql redis nginx php-worker
### -d参数是后台运行
docker-compose up -d mysql redis nginx php-worker

workspacephp 默认会自己启动,因为容器都依赖它们 如果你没有修改COMPOSE_FILE=docker-compose.yml配置文件的话,laradock项目中所有镜像全部会安装 !!!0.0!!!。

启动之后你可以进入容器:

### 就像虚拟机一样,很亲切
### 像composer,git等命令都有,不需要单独安装
docker-compose exec workspace bash

进入workspace后执行:

cd 你的项目名称/
php artisan migrate
...

workspace可以换成你想操作的(已经启动)任何容器名称(mysql,nginx...),非常方便操作。

并非完美

laradock在修改配置后重新docker-compose build xxx又会重新安装/编译一次,非常耗时,特别是workspace容器,简直恐怖。这点没有虚拟机来得方便。 docker在MacOS中存在文件读取缓慢的问题。 mysql或者其他数据库在容器中部署还存在一定的安全隐患。

结语

其实自己手动折腾一遍之后并不像想象中那么难。 仔细查看Dockerfile文件后你会发现里面就是各种安装部署命令,只是用docker特定的语法包裹了。docker安装容器就是执行你编写好的命令。 服务器部署直接一套docker就搞定,而且服务器项目比较杂的话非常适合,毕竟各种项目(php,java,python...)环境在服务器上搭建难免出现奇奇怪怪的问题,在容器中的话互不干扰,横向扩展服务器简直不能再方便了。

本原创文章未经允许不得转载 | 当前页面:OrzLee » Laradock-部署本地开发环境

评论