使用 Docker 高效搭建本地开发环境(详细教程)
阅读本文大概需要 6 分钟。
来自:juejin.cn/post/6844903828949565448
本地开发之痛苦
什么是Docker
Linux
机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。对我们而言,我觉得只需要把他理解成一个便携的应用容器 即可Docker
本地开发环境的好处
试错
Docker
,让我们有可能在一条或者几条命令内就搭建完环境,而且这个环境大到一个特定版本的操作系统,小到一个软件。Docker 有一个傻瓜化的获取软件的方法,Docker
后台会自动获得环境镜像并且运行环境。统一开发和生产环境
Docker
来统一开发环境,因为不管你用的是Windows
、Mac
还是 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 - 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
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
文件
拷贝example成.env
cp env-example env
.env
文件中APP_CODE_PATH_HOST
是本地路径APP_CODE_PATH_CONTAINER
是远程映射路径,看需求修改,大多数情况下是不需要的如果有调试代码的需求,也可以将
PHP_FPM_INSTALL_XDEBUG
和WORKSPACE_INSTALL_XDEBUG
两个选项打开如果还有其他的需求,可以在
.env
里面搜索,里面已经将大多数配置项都给独立出来了
运行容器
laradock
的工作目录下面,就是clone
的项目的根目录我的工作目录就是~/Docker/laradock
。docker-compose up -d nginx mysql
build
操作,并且build完了之后自动后台启动了如下容器nginx php-fpm workspace mysql
php-fpm
和workspace
还有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
配置nginx
./laradock/nginx/sites
文件夹,然后ll
一下,我们会发现,laradock已经帮我们放了好多列举的文件进来app.conf.example default.conf laravel.conf.example symfony.conf.example
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_name
和root
这两个参数,把这个里面的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/
推荐阅读:
5秒内克隆你的声音,并生成任何内容,这个工具细思极恐...还特么的开源~
互联网初中高级大厂面试题(9个G) 内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅