GithubHelp home page GithubHelp logo

imacken / devdock Goto Github PK

View Code? Open in Web Editor NEW
246.0 13.0 62.0 8.75 MB

Build php development & production environment based on Docker

License: MIT License

Shell 25.39% Dockerfile 74.61%
docker docker-compose docker-images docker-containers php-docker php development-environment

devdock's Introduction

DevDock

非常感谢 laradockDevDock 是简化定制之后的产物,方便学习使用。

支持的软件 (镜像)

  • 数据库引擎
    • Mysql
    • Mongo
  • Mysql 管理工具
    • adminer
  • 缓存引擎:
    • Redis
    • Memcached
  • 搜索引擎
    • elasticsearch
  • PHP 服务器
    • Nginx
  • PHP 进程管理
    • php-worker
  • PHP 编译工具
    • php-fpm
  • WebSocket 服务
    • laravel-echo-server
  • 工具: - Workspace (PHP7-CLI, SOAP, xDebug, Composer, Git, Node, YARN, Gulp, SQLite, Vim, Nano, cURL...)

    如果你找不到你需要的软件,构建它然后把它添加到这个列表。

安装

克隆 DevDock 仓库:

在你系统的任意位置(建议在你的工作目录):

git clone https://github.com/RystLee/DevDock.git
cd DevDock
cp .env.example .env

查看 .env 文件你会发现很多环境配置项,在这里可以自行配置开发环境。

启动

进入到 DevDock 目录中

例如 Nginx 和 Mysql:

查看 docker-compose.yml 文件:

docker-in-docker:
        image: docker:dind
        privileged: true
        volumes:
            - ${APP_CODE_LOCAL_PATH}:${APP_CODE_CONTAINER_PATH}

DevDock 默认将同级目录下的所有文件映射到数据卷容器 docker-in-docker 中。其实可以你完全可以灵活配置,添加多个映射,例如:

volumes:
  - ../project1:/var/www
  - ../../project2:/var/www

创建网站配置文件 参考 nginx/sites/default.conf (不要使用 default.conf,它会在容器中被删除

server_name laravel.dev;

root /var/www/laravel/public;

创建初始数据库信息,在 docker-compose.yml 文件中 (多个数据库请通过 phpmyadmin 或 手动进入到 mysql 容器中创建):

environment:
  MYSQL_DATABASE: homestead
  MYSQL_USER: homestead
  MYSQL_PASSWORD: secret
  MYSQL_ROOT_PASSWORD: root

然后运行:

docker-compose up -d nginx mysql

你可以从以下列表选择你自己的容器组合:

nginx, php-fpm, php-worker, mysql, redis, memcached, elasticsearch, workspace

将配置文件中的各种服务的 host 改为相应的容器名称,如:DB_HOST: mysql

说明: workspace 和 php-fpm 将运行在大部分实例中, 所有不用在命令中 up 加上它们.

进入 Workspace 容器, 执行像 (Artisan, Composer, Gulp, ...)等命令

docker-compose exec -it -u devdock workspace bash

增加 --user=devdock (例如 docker-compose exec --user=devdock workspace bash) 作为您的主机的用户创建的文件. (你可以从 docker-compose.yml 修改 PUID (User id) 和 PGID (group id) 值 )。

使用

灵活配置开发环境

在 docker-compose.yml 中,引用了很多环境变量,可自行在 .env 进行配置。典型的,我已经将 nginx 目录下 的 sites 目录映射到 nginx 容器,所以当你修改 nginx 网站配置文件后,只要重启 nginx 容器即可:

docker-compose restart nginx

常用命令

  • 列出正在运行的所有容器

docker ps

  • 你也可以使用以下命令查看当前 DevDock 启动的容器

docker-compose ps

  • 关闭所有容器

docker-compose stop

  • 停止某个容器:

docker-compose stop {container_name}

  • 删除服务容器

docker-compose down {container_name}

- 该命令不会删除你的数据卷容器,如果你重新创建服务容器,服务容器默认仍会使用上次创建的数据卷容器
 * 如果不加 {容器名称} ,命令会删除所有服务容器。
  • 列出所有数据卷容器

docker volume ls

  • 删除数据卷容器

docker volume rm <VOLUME NAME>

  • 删除所有数据卷容器

docker volume rm $(docker volume ls -q)

  • 删除所有未被使用的数据卷容器

docker volume rm $(docker volume ls -qf dangling=true)

  • 查看容器日志

Nginx 的日志在 logs/nginx 目录 查看其它容器日志 (Mysql, php-fpm, …) 你可以运行:

docker-compose logs {image-name}

编辑 Docker 镜像

  1. 找到你想修改的镜像的 dockerfile , 例如: mysqlmysql/Dockerfile.
  2. 按你所要的编辑文件.
  3. 重新构建镜像:

如果你做任何改变 Dockerfile 确保你运行这个命令,可以让所有修改更改生效:

docker-compose build

选择你可以指定哪个镜像 (而不是重建所有的镜像):

docker-compose build {image-name}

如果你想重新创建整个镜像,你需要使用 --no-cache 选项

docker-compose build --no-cache {container-name}

增加更多镜像

为了增加镜像(软件), 编辑 docker-compose.yml 添加容器细节, 你需要熟悉 docker compose 文件语法.

使用 Redis

  • docker-compose up -d redis
  • 以 Laravel 为例,打开 .env 文件,然后配置 REDIS_HOST
...
REDIS_HOST=redis
...

如果在你的 .env 文件没有找到 REDIS_HOST 变量。打开数据库配置文件 config/database.php 然后用 redis 替换默认 IP 127.0.0.1 ,例如:

'redis' => [
    'cluster' => false,
    'default' => [
        'host'     => 'redis',
        'port'     => 6379,
        'database' => 0,
    ],
],
  • 启用 Redis 缓存或者开启 Session 管理也在.env文件中用redis替换默认file设置CACHE_DRIVERSESSION_DRIVER
CACHE_DRIVER=redis
SESSION_DRIVER=redis
  • Compose 安装 “predis/predis”:
composer require predis/predis:^1.0
  • 你可以用以下代码在 Laravel 中手动测试:
\Cache::store('redis')->put('DevDock', 'Awesome', 10);

使用 PHP

  • PHP 扩展

PHP 的扩展 FPM 和 CLI 分别安装在 php-fpm 和 workspace 镜像当中,如果需要定制,请分别到 php-fpm/Dockerfile-xx 和 workspace/Dockerfile 文件中编辑。

默认运行 php-fpm 7.1 版本,如需其他版本可以参考 laradock 自行添加。

supervisor 进程管理工具安装在 php-worker 容器中,修改配置重启容器即可生效。

使用自定义域名

假定你的自定义域名是 laravel.dev

  • 打开 /etc/hosts 文件,映射 laravel.dev 到 127.0.0.1
127.0.0.1    laravel.test
  • 打开你的浏览器访问 http://laravel.test

你可以在 nginx 配置文件自定义服务器名称,如下:

server_name laravel.test;

使用 Elasticsearch

进入到 elasticsearch 目录下,config 和 plugins 分别放置了配置文件和插件,可根据需要修改和添加,完成之后重建镜像

docker-compose build elasticsearch

安装全局 Composer 命令

为启用全局 Composer Install 在容器构建中允许你安装 composer 的依赖,然后构建完成后就是可用的。

  • 打开 docker-compose.yml 文件

  • 在 workspace 项中找到 COMPOSER_GLOBAL_INSTALL 选项并设置为 true

  • 重建容器 docker-compose build workspace

安装 Node + NVM

在 workspace 容器安装 NVM 和 Nodejs

  • 打开 docker-compose.yml 文件

  • 在 workspace 项中找到 INSTALL_NODE 选项设为 true

  • 重建容器 docker-compose build workspace

安装 xDebug

  • 打开 docker-compose.yml 文件

  • 在 php-fpm 和 workspace 项中分别找到 INSTALL_NODE 选项设为 true

  • 重建容器 docker-compose build workspace php-fpm

Debug

  • 看到包含 address already in use 的错误:

确保你想运行的服务端口 (80, 3306, etc.) 不是已经被其他程序使用,例如 apache/httpd 服务或其他安装的开发工具

  • 容器报类似 Connection refused 的错误:

将配置文件中服务的 host 改为相应的容器名称,如 mysql

  • 如遇到 Elasticsearch 等内存消耗大的容器莫名其妙挂掉,而且查看日志无果,请打开 Docker App > Preferences > Advanced 提高系统给予 docker 的内存大小

  • 如果 Elasticsearch 启动报错,可能是之前未被清理掉的 volumes 中已存在的 node 导致的。所以,每次销毁容器时都需要清理掉响应的 volume,可以执行命令 docker volume rm $(docker volume ls -qf dangling=true) 来进行清理。

devdock's People

Contributors

imacken avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

devdock's Issues

你好,我在使用您的开源项目的时候遇到了以下问题

我已经确保安装了docker
并且我可以正常的自己pull镜像并创建容器
我根据你的使用指南clone 项目以后,进入项目
执行命令docker-compose up -d nginx mysql redis (因为看见你的说明里面,说phpfpm依赖不需要特地添加)
最后获得的错误是
WARNING: The PMA_DB_ENGINE variable is not set. Defaulting to a blank string.
WARNING: The PMA_PORT variable is not set. Defaulting to a blank string.
WARNING: The PHP_VERSION variable is not set. Defaulting to a blank string.
WARNING: The PHP_WORKER_SUPERVISORD_CONF variable is not set. Defaulting to a blank string.
WARNING: The DOCKER_HOST_IP variable is not set. Defaulting to a blank string.
WARNING: The APPLICATION variable is not set. Defaulting to a blank string.
WARNING: The PHP_IDE_CONFIG variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_XDEBUG variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_SOAP variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_ZIP_ARCHIVE variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_PHPREDIS variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_MEMCACHED variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_MONGO variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_XDEBUG_CONF variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INI_CONF variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_POOL_CONF variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_LOG_PATH variable is not set. Defaulting to a blank string.
WARNING: The NGINX_SITES_PATH variable is not set. Defaulting to a blank string.
WARNING: The NGINX_CONF variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_HTTP_PORT variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_HTTPS_PORT variable is not set. Defaulting to a blank string.
WARNING: The ELASTICSEARCH_HOST_HTTP_PORT variable is not set. Defaulting to a blank string.
WARNING: The ELASTICSEARCH_HOST_TRANSPORT_PORT variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_XDEBUG variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_NODE variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_SOAP variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_YARN variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_MONGO variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_COMPOSER_GLOBAL_INSTALL variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_WORKSPACE_SSH variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_PUID variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_PGID variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_NODE_VERSION variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_YARN_VERSION variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_TIMEZONE variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_XDEBUG_CONF variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_CRONTAB variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_DATABASE variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_USER variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_ROOT_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_CONF variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PORT variable is not set. Defaulting to a blank string.
WARNING: The MEMCACHED_HOST_PORT variable is not set. Defaulting to a blank string.
WARNING: The MONGODB_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.memcached.ports is invalid: Port ranges don't match in length
services.mongo.ports is invalid: Port ranges don't match in length
services.mysql.ports is invalid: Port ranges don't match in length
services.nginx.ports is invalid: Port ranges don't match in length
services.nginx.ports is invalid: Port ranges don't match in length
services.phpmyadmin.ports is invalid: Port ranges don't match in length
services.elasticsearch.ports is invalid: Port ranges don't match in length
services.elasticsearch.ports is invalid: Port ranges don't match in length
WuillydeMBP% docker-compose up -d nginx mysql redis
WARNING: The PMA_DB_ENGINE variable is not set. Defaulting to a blank string.
WARNING: The PMA_PORT variable is not set. Defaulting to a blank string.
WARNING: The PHP_VERSION variable is not set. Defaulting to a blank string.
WARNING: The PHP_WORKER_SUPERVISORD_CONF variable is not set. Defaulting to a blank string.
WARNING: The DOCKER_HOST_IP variable is not set. Defaulting to a blank string.
WARNING: The APPLICATION variable is not set. Defaulting to a blank string.
WARNING: The PHP_IDE_CONFIG variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_XDEBUG variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_SOAP variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_ZIP_ARCHIVE variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_PHPREDIS variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_MEMCACHED variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INSTALL_MONGO variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_XDEBUG_CONF variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_INI_CONF variable is not set. Defaulting to a blank string.
WARNING: The PHP_FPM_POOL_CONF variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_LOG_PATH variable is not set. Defaulting to a blank string.
WARNING: The NGINX_SITES_PATH variable is not set. Defaulting to a blank string.
WARNING: The NGINX_CONF variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_HTTP_PORT variable is not set. Defaulting to a blank string.
WARNING: The NGINX_HOST_HTTPS_PORT variable is not set. Defaulting to a blank string.
WARNING: The ELASTICSEARCH_HOST_HTTP_PORT variable is not set. Defaulting to a blank string.
WARNING: The ELASTICSEARCH_HOST_TRANSPORT_PORT variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_XDEBUG variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_NODE variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_SOAP variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_YARN variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_MONGO variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_COMPOSER_GLOBAL_INSTALL variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_INSTALL_WORKSPACE_SSH variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_PUID variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_PGID variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_NODE_VERSION variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_YARN_VERSION variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_TIMEZONE variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_XDEBUG_CONF variable is not set. Defaulting to a blank string.
WARNING: The WORKSPACE_CRONTAB variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_DATABASE variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_USER variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_ROOT_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_CONF variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PORT variable is not set. Defaulting to a blank string.
WARNING: The MEMCACHED_HOST_PORT variable is not set. Defaulting to a blank string.
WARNING: The MONGODB_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.memcached.ports is invalid: Port ranges don't match in length
services.mongo.ports is invalid: Port ranges don't match in length
services.mysql.ports is invalid: Port ranges don't match in length
services.nginx.ports is invalid: Port ranges don't match in length
services.nginx.ports is invalid: Port ranges don't match in length
services.phpmyadmin.ports is invalid: Port ranges don't match in length
services.elasticsearch.ports is invalid: Port ranges don't match in length

rm: cannot remove '/var/lib/apt/lists/*': No such file or directory

在Mac上部署docker时出现一个问题:

rm: cannot remove '/var/lib/apt/lists/*': No such file or directory
ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c rm -r /var/lib/apt/lists/*' returned a non-zero code: 1

google之后发现:

终端出现: 'E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/archive.canonical.com_dists_maverick_partner_binary-i386_Packages, E:无法解析或打开软件包的列表或是状态文件。'
解决方法,终端执行:

    sudo rm -rf /var/lib/apt/lists/* -vf
    sudo apt-get update

看样子只有在apt出问题时才会使用这个方法,如果想要一个干净的环境 rm -rf /var/lib/apt/lists/ 这个方式可能解决这个问题。

另:

docker --version
Docker version 17.06.0-ce, build 02c1d87

请求流程是怎么样的?

docker小白不太懂,整个请求的流程是不是像下面这样的?
client->nginx->php-fpm->workspace(php-cli)->php-fpm->nginx->client

如果是的话,php-fpm->workspace(php-cli)->php-fpm 这几步流程是具体怎么实现的,是走端口吗? 看了laradock的workspace里面有个crontab的文件 跑了这个命令 php /var/www/artisan 这个应该是内置的服务器吧, 是不是通过这个连接了php-fpm和workspace两个容器?

在docker-compose up -d的时候报错:

按照redeme方法操作,运行下面的命令:

docker-compose up -d nginx php-fpm php-worker mysql redis memcached elasticsearch workspace

结果报错:

ERROR: Cannot locate specified Dockerfile: Dockerfile-72

装好后不能执行 404 目录好像不对

server_name laravel.app;

root /var/www/laravel/public;

index index.php index.html index.htm;

location / {
     try_files $uri $uri/ /index.php$is_args$args;
}

进入docker 后的目录

/var/www/laravel/public

root@3eb093c21707:/var/www/laravel/public# ls
index.php
root@3eb093c21707:/var/www/laravel/public#

访问的结果是404

nginx系统升级的问题

先谢谢您提供的这个repo,跑起开发环境来简直太爽了.
有个问题请教下.

/workspace/Dockerfile 文件里面

里面的apt-update 相当的慢. 怎么能够去掉?

还有就是应该不会每次up 都会执行apt-update吧?

E: Package 'libpng12-dev' has no installation candidate

ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y --no-install-recommends curl libmemcached-dev libz-dev libpq-dev libjpeg-dev libpng12-dev libfreetype6-dev libssl-dev libmcrypt-dev && pecl channel-update pecl.php.net && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100;

php-ftm/Dockerfile-71:
libpng12-dev \ => libpng-dev \

docker-compose up

ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c if [ ${INSTALL_SOAP} = true ]; then apt-get update -yqq && apt-get -y install libxml2-dev php-soap && docker-php-ext-install soap ;fi' returned a non-zero code: 100

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.