Skip to content

baykier/devbox

Repository files navigation

devbox

devbox 是基于docker的开发环境封装项目,用于简化开发的环境搭建和迁移 如果喜欢欢迎star

如何简化开发环境

对于开发来说,需要用到的工具包,软件包,有可能非常非常多,而且经常出现冲突,docker的出现对于解决这个问题提
供的非常好的途径,并且还能保持系统的干净,清洁。对于单个的开发测试,封装在同一个环境,能有效解决依赖冲突

如何解决容器内外的权限问题

各个容器内的服务,如nginx 或者php-fpm,都是以用户角色运行,如果对于线上环境,我们可以把源码包直接 打入镜像内
部来避免权限问题。但是对于开发环境,还是挂载到容器内部最为实用,这时候,假如开发目录和容器内部运行服务的用户
不一致,就会出现权限问题,为了解决这个问题,我们有两种方法可以解决:
  • gosu root
这种方法就是容器内服务运行时候用[gosu](https://github.com/tianon/gosu)命令启用,只不过这里我们用gosu root启用,
下面以php 5.6 的Dockerfile为例:
     ENV GOSU_VERSION 1.10
     RUN set -x \
     	&& apk add --no-cache --virtual .gosu-deps \
     		                                dpkg \
     		                                gnupg \
     		                                openssl \
     	&& dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"  \
     	&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"  \
     	&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
     	&& chmod +x /usr/local/bin/gosu \
         # verify that the binary works
     	&& gosu nobody true \
     	&& apk del .gosu-deps
     
     ENTRYPOINT gosu root php-fpm

这样 php-fpm就会以root运行,避免挂载的目录权限不足问题,切记生产环境慎用

  • 修改UID和GID
这种方法,就是容器启动时候将容器内服务的用户UID和GID改成同开发者的主机用户UID和GID一致,来避免权限不足的问题
我们以nginx Dcoekrfile 为例:


    ## 将nginx uid gid 更新为开发环境用户ID
    RUN set -x \
    && usermod -u ${DEVBOX_UID} nginx \
    && groupmod -g ${DEVBOX_GID} nginx

以上里两种方法均可

所需要的依赖环境

  • docker
  • docker-compose
  • git

对于win10之前的可能需要安装vagrant来搭建

整体架构说明

devbox
  |--- bin                   可执行命令脚本
  |--- build                 各个项目Docker镜像构建目录,可根据需要自行修改,添加
  |    |--- nginx            Nginx Build目录
  |    |--- mongo            MogonDb Build目录
  |    |--- mysql            MysqlDb Build目录
  |    |--- php              Php Build目录
  |--- conf                  容器运行时挂着各项目配置目录 
  |--- data                  MongoDb 或MysqlDb数据文件
  |--- log                   各个容器内部日志文件,例如Nginx 或Php
  |--- plugins               需要用到的一些扩展
  |--- project               项目目录
  |--- .env.example          Docker-Compose的环境变量配置文件demo
  |--- .gitignore            
  |--- docker-compose.yml    Docker-Compose的配置文件
  |--- README.md
  |--- Vagrantfile.exmaple   Vgrantfile 参考Demo文件

如何使用

使用很简单,根据需要,复制docker-compose.yml.example为docker-compose.yml,.env.example为.env,修改.env里面的配置后 执行下面命令:

docker-compose up [-d] <service>

将 devbox/bin 目录链接到~/bin 目录

rm -fr ~/bin && sudo ln -s /pathro/devbox/bin /home/user/bin

这样可以直接用bin目录提供的php和composer命令了

License

MIT License

相关资源