从零开始搭建本地 Docker 开发环境

本地开发之痛苦

在开发以前,首先你须要安装各类开发工具和服务支持到你的开发环境当中,可能会出依赖问题,环境变量问题,端口冲突,经编译库问题等等。php

开发途中,可能你又须要依赖一些其余的服务,你最好祈祷不会出问题,可能你又要重写来配置你的环境,由于你的全部的依赖服务都在你的惟一的工做空间里面。html

若是你的伙伴的操做系统不统一,可能你还会遇到一些不一样元字符解析不一致的问题。mysql

而后上线以前,可能你在本地开发调试均可以完美运行,一但部署到服务器,就会出现各类问题。由于大多数状况下,咱们的开发环境和生产环境并不相同。linux

可能你下次又有要用到一个新的开项目的开发环境。你又要重复面对上面这些问题.nginx

你不得不去审视,你要话费大量的时间用在搭建环境当中来。laravel

什么是Docker

Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口。 对咱们而言,我以为只须要把他理解成一个便携的应用容器便可git

Docker本地开发环境的好处

试错

对开发者而言,天天会催生出的各式各样的新技术都须要尝试,然而开发者却不太可能为他们一一搭建好环境并进行测试。时间很是宝贵,正是得益于 Docker,让咱们有可能在一条或者几条命令内就搭建完环境,并且这个环境大到一个特定版本的操做系统,小到一个软件。Docker 有一个傻瓜化的获取软件的方法,Docker后台会自动得到环境镜像而且运行环境。github

统一开发和生产环境

对于通常的小公司来讲,搭建一个公用的开发环境是一件不那么划算的事情。那么就能够用Docker来统一开发环境,由于无论你用的是WindowsMac 仍是 Ubuntu。 若是生产环境也使用的Docker的话,你甚至能够直接打包一套环境,直接丢上去就能够运行了,不再用担忧开发-生产环境之间的差别了。web

高性能

虚拟机的粒度是虚拟出的机,而Docker的粒度则是被限制的应用,相比较而言 Docker 的内存占用更少,更加轻量级,性能也更优。redis

而秒级的启动,也可让咱们启动电脑时候,开发环境的运行是无感知的。

成果展现

咱们可能常常要给用户或者是同事展现同样功能的,可是搭建演示环境的过程倒是很是麻烦的。如今能够直接将咱们的镜像打包丢过去,而没必要去作任何环境配置的工做,同时也没必要担忧他们的环境配置会致使咱们的产品没法运行。

安装Docker

mac平台下,就是去下载一个dmg的安装文件。下载好了以后,双击,而后拖入就能够了,windows应该也是相似的。

就是安装qq同样简单,傻瓜式的。

附上dockerhub上的下载连接

成功以后属于docker version若是出来版本信息就是安装成功,相似以下

Client: Docker Engine - Community
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:47:43 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:55:00 2018
  OS/Arch:          linux/amd64
  Experimental:     true
复制代码

安装docker-composer

通常来讲,mac安装docker以后就会携带docker-composer

其余平台,附上下载连接

安装完成以后能够输入命令检测

➜  ~ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018
复制代码

若是没有出现版本相关信息,能够尝试再次安装

下载laradock

laradock的项目地址是https://github.com/laradock/laradock 咱们找一个地方clone下来便可

我这里是在个人用户目录下面新建了一个Docker目录,而后clone了项目下来

配置env文件

  1. 拷贝example成.env

    cp env-example env
    复制代码
  2. .env文件中APP_CODE_PATH_HOST是本地路径 APP_CODE_PATH_CONTAINER是远程映射路径,看需求修改,大多数状况下是不须要的

  3. 若是有调试代码的需求,也能够将PHP_FPM_INSTALL_XDEBUGWORKSPACE_INSTALL_XDEBUG两个选项打开

  4. 若是还有其余的需求,能够在.env里面搜索,里面已经将大多数配置项都给独立出来了

运行容器

进入到laradock的工做目录下面,就是clone的项目的根目录个人工做目录就是~/Docker/laradock

而后运行以下命令

docker-compose up -d nginx mysql
复制代码

就会看到在自动执行build操做,而且build完了以后自动后台启动了以下容器

  • nginx
  • php-fpm
  • workspace
  • mysql

那是由于php-fpmworkspace还有docker-in-docker是随nginx一并启动的

因此实际上

docker-compose up -d nginx mysql
复制代码

docker-compose up -d nginx workspace php-fpm mysql
复制代码

这两条命令的效果是同样的,能够都带上,也能够不写。

up命令在第一次启动的时候实际上就是build + start的组合,若是容器不存在,那么就build一个容器,而且启动服务,若是容器存在那么直接启动服务,大概就是这么个意思 -d的意思是后台运行

配置web项目

一下是我laravel项目的部分配置

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=root
......
复制代码

注意,数据库主机必须得是别名才能够,若是DB_CONNECTION这个地方输入172.0.0.1或者是localhost都是会链接失败的。

在其它的项目中也必须是这样的,配置数据库连接,redis,或者MemCache连接都必须设置成具体的别名。或者你说我找到各个容器的ip,能够嘛。能够,可是并不建议这样作,由于ip是会变更的。

具体别名能够参考./docker-compose.yml文件中的设置

这个主要的技术实现应该是用了docker的虚拟网桥技术.

配置宿主机的host

由于,每每咱们访问的时候,是经过宿主机上面的浏览器发送请求的,因此,配置宿主机上面的host必不可少。

vim /etc/hosts
复制代码

我这里加入一条我本身设置的虚拟域名

127.0.0.1       blog.test
复制代码

而后保存,刷新下host。

配置nginx

进入到./laradock/nginx/sites文件夹,而后ll一下,咱们会发现,laradock已经帮咱们放了好多列举的文件进来

app.conf.example
default.conf
laravel.conf.example
symfony.conf.example
复制代码

根据需求拷贝一份,而后修改一下就能够了,都不是很难,因为咱们本地是laravel开发的博客项目,因此我就直接拷贝laravel.conf.example,而后使用vim打开

cp laravel.conf.example blog.conf
vim blog.conf
复制代码

打开后的内容...

server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name laravel.test;
    root /var/www/laravel/public;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
复制代码

咱们会发现,若是没有特殊需求的话,这个里面大多数地方咱们并不须要修改。咱们只须要关注server_nameroot这两个参数,把这个里面的laravel换成咱们项目名就能够了,这里咱们换成blog

下面是修改后的内容

server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name blog.test;
    root /var/www/blog/public;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
复制代码

访问

输入url

http://blog.test/
复制代码

浏览器返回结果

blog项目

enjoy !

转载请注明出处juejin.im/post/5cbea7…

相关文章
相关标签/搜索