使用 Docker 高效搭建本地开发环境(详细教程)

news/2024/12/2 13:50:03/

Docker本地开发环境的好处

试错

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

统一开发和生产环境

对于一般的小公司来说,搭建一个公用的开发环境是一件不那么划算的事情。那么就可以用Docker来统一开发环境,因为不管你用的是WindowsMac 还是 Ubuntu。如果生产环境也使用的Docker的话,你甚至可以直接打包一套环境,直接丢上去就可以运行了,再也不用担心开发-生产环境之间的差异了。

高性能

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

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

成果展示

我们可能经常要给用户或者是同事展示一样功能的,但是搭建演示环境的过程却是非常麻烦的。现在可以直接将我们的镜像打包丢过去,而不必去做任何环境配置的工作,同时也不必担心他们的环境配置会导致我们的产品无法运行。

安装Docker

mac平台下,就是去下载一个dmg的安装文件。下载好了之后,双击,然后拖入就可以了,windows应该也是类似的。

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

附上dockerhub上的下载链接:

https://hub.docker.com/search/?type=edition&offering=community&q=

成功之后属于docker version如果出来版本信息就是安装成功,类似如下

Client: Docker Engine - CommunityVersion:           18.09.0API version:       1.39Go version:        go1.10.4Git commit:        4d60db4Built:             Wed Nov  7 00:47:43 2018OS/Arch:           darwin/amd64Experimental:      falseServer: Docker Engine - CommunityEngine:Version:          18.09.0API version:      1.39 (minimum version 1.12)Go version:       go1.10.4Git commit:       4d60db4Built:            Wed Nov  7 00:55:00 2018OS/Arch:          linux/amd64Experimental:     true

 

安装docker-composer

一般来说,mac安装docker之后就会携带docker-composer

其他平台,附上下载链接:

https://github.com/docker/compose/releases

安装完成之后可以输入命令检测

➜  ~ 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 timeoutsfastcgi_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 timeoutsfastcgi_read_timeout 600;include fastcgi_params;

访问

输入url

http://blog.test/

http://www.ppmy.cn/news/347621.html

相关文章

plus.runtime.version总是13.8.4

引言 最近在uniapp中使用到了plus.runtime.version,但是在开发环境下一直无法获取到真正的版本号,他的值一直都是13.8.4,在全局进行搜索也没有发现哪里设置了13.8.4,后来查阅了相关资料才知道这并不是自己写错了。 场景复现&…

redhat 7及以上版本crsctl start crs启动失败问题

因为rac老版本启动依赖的是init.d,而redhat 7及以上版本默认为systemd,两者的差异较大。导致redhat 7及以上版本启动crs的ohasd服务时会卡住一段时间且最后无法启动成功,strace日志则会显示无法找到/var/tmp/.oracle/npohasd文件。 手动的方…

AppTask.moveToFront()源码分析

ActivityManager.AppTask.moveToFront()执行后,导致其他AppTask退到了后台,点击返回直接回到了桌面(HomeScreen),没有回到上一个AppTask。 下面分析一下源码看看为什么其他AppTask退到了后台,如何解决该问题…

提升网络安全的关键利器:EventLog Analyzer

导语: 随着网络攻击和数据泄露事件的不断增加,企业对于网络安全的关注度也日益提高。在这样的背景下,安全信息与事件管理系统(SIEM)成为了提升网络安全的关键利器之一。本文将重点介绍一款强大的SIEM工具——EventLog…

MySQL 日期与时间函数

一、获取日期、时间 函数用法CURDATE(),CURRENT_DATE()返回当前日期,只包含年、月、日CURTIME() , CURRENT_TIME()返回当前时间,只包含时、分、秒NOW() , SYSDATE(),CURRENT_TIMESTAMP() , LOC…

漂白剂哪种好:

市面上的漂白剂主要分为「液体状」(漂白水)及「粉末状」(漂白粉或漂白素)两大类,那么这两大类漂白剂漂白剂哪种好呢?其实不同品牌之间的配方又各有特色,必须配合想清洁的污垢种类选择适当的配方…

AJAX详解

目录 AJAX(Asynchronous Javascript And Xml) 传统请求及缺点 AJAX概述 绑定事件 XMLHttpRequest对象 AJAX GET请求 AJAX GET请求的缓存问题 AJAX POST请求 JSON对象 基于JSON的数据交互 基于XML的数据交换 AJAX乱码问题 AJAX的异步与同步 AJAX代码封装 AJAX实现…

第四章 频率域滤波

4频率域滤波 4.1背景 4.1.1傅里叶级数和变换史 任何周期函数都可以表示为不同频率的正余弦之和。 4.2基本概念 4.2.1复数 复数C的定义( j − 1 j\sqrt{-1} j−1 ​): C R j I CRjI CRjI 极坐标下 C ∣ C ∣ ( cos ⁡ θ j sin ⁡ …