前言
之前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
配置文件文件,只能修改workspace
的Dockerfile
文件了,在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
workspace
、php
默认会自己启动,因为容器都依赖它们
如果你没有修改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...)环境在服务器上搭建难免出现奇奇怪怪的问题,在容器中的话互不干扰,横向扩展服务器简直不能再方便了。
评论 (0)