本地開發之痛苦
在開發之前,首先你需要安裝各種開發工具和服務支持到你的開發環境當中,可能會出依賴問題
,環境變量問題
,端口沖突
,經編譯庫問題
等等。
開發途中,可能你又需要依賴一些其他的服務,你最好祈禱不會出問題,可能你又要重寫來配置你的環境,因為你的所有的依賴服務都在你的唯一的工作空間里面。
如果你的伙伴的操作系統不統一,可能你還會遇到一些不同元字符解析不一致的問題。
然后上線之前,可能你在本地開發調試都可以完美運行,一但部署到服務器,就會出現各種問題。因為大多數情況下,我們的開發環境和生產環境并不相同。
可能你下次又有要用到一個新的開項目的開發環境。你又要重復面對上面這些問題.
你不得不去審視,你要話費大量的時間用在搭建環境當中來。
什么是Docker
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:DockerEngine-Community
Version:18.09.0
APIversion:1.39
Goversion:go1.10.4
Gitcommit:4d60db4
Built:WedNov700432018
OS/Arch:darwin/amd64
Experimental:false
Server:DockerEngine-Community
Engine:
Version:18.09.0
APIversion:1.39(minimumversion1.12)
Goversion:go1.10.4
Gitcommit:4d60db4
Built:WedNov700002018
OS/Arch:linux/amd64
Experimental:true
安裝docker-compose
一般來說,mac安裝docker之后就會攜帶docker-compose。
其他平臺,附上下載鏈接:https://github.com/docker/compose/releases
安裝完成之后可以輸入命令檢測
?~docker-composeversion
docker-composeversion1.23.2,build1110ad01
docker-pyversion:3.6.0
CPythonversion:3.6.6
OpenSSLversion:OpenSSL1.1.0h27Mar2018
如果沒有出現版本相關信息,可以嘗試再次安裝
下載laradock
laradock的項目地址是https://github.com/laradock/laradock 我們找一個地方clone下來即可。
我這里是在我的用戶目錄下面新建了一個Docker目錄,然后clone了項目下來。
配置env文件
拷貝example成.env
cpenv-exampleenv
.env文件中APP_CODE_PATH_HOST
是本地路徑APP_CODE_PATH_CONTAINER
是遠程映射路徑,看需求修改,大多數情況下是不需要的
如果有調試代碼的需求,也可以將PHP_FPM_INSTALL_XDEBUG
和WORKSPACE_INSTALL_XDEBUG
兩個選項打開
如果還有其他的需求,可以在.env里面搜索,里面已經將大多數配置項都給獨立出來了
運行容器
進入到laradock的工作目錄下面,就是clone的項目的根目錄我的工作目錄就是~/Docker/laradock。
然后運行如下命令
docker-composeup-dnginxmysql
就會看到在自動執行build操作,并且build完了之后自動后臺啟動了如下容器
-
nginx
-
php-fpm
-
workspace
-
mysql
那是因為php-fpm和workspace還有docker-in-docker是隨nginx一并啟動的
所以實際上
docker-composeup-dnginxmysql
和
docker-composeup-dnginxworkspacephp-fpmmysql
這兩條命令的效果是一樣的,可以都帶上,也可以不寫。
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.1blog.test
然后保存,刷新下host。
配置nginx
進入到./laradock/nginx/sites文件夾,然后ll一下,我們會發現,laradock已經幫我們放了好多列舉的文件進來
app.conf.exampledefault.conflaravel.conf.examplesymfony.conf.example
根據需求拷貝一份,然后修改一下就可以了,都不是很難,由于我們本地是laravel開發的博客項目,所以我就直接拷貝laravel.conf.example,然后使用vim打開
cplaravel.conf.exampleblog.confvimblog.conf
打開后的內容...
server{
listen80;
listen[::]:80;
#Forhttps
#listen443ssl;
#listen[::]:443sslipv6only=on;
#ssl_certificate/etc/nginx/ssl/default.crt;
#ssl_certificate_key/etc/nginx/ssl/default.key;
server_namelaravel.test;
root/var/www/laravel/public;
indexindex.phpindex.htmlindex.htm;
location/{
try_files$uri$uri//index.php$is_args$args;
}
location~.php${
try_files$uri/index.php=404;
fastcgi_passphp-upstream;
fastcgi_indexindex.php;
fastcgi_buffers1616k;
fastcgi_buffer_size32k;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
#fixestimeouts
fastcgi_read_timeout600;
includefastcgi_params;****
我們會發現,如果沒有特殊需求的話,這個里面大多數地方我們并不需要修改。我們只需要關注server_name和root這兩個參數,把這個里面的laravel換成我們項目名就可以了,這里我們換成blog
下面是修改后的內容
server{
listen80;
listen[::]:80;
#Forhttps
#listen443ssl;
#listen[::]:443sslipv6only=on;
#ssl_certificate/etc/nginx/ssl/default.crt;
#ssl_certificate_key/etc/nginx/ssl/default.key;
server_nameblog.test;
root/var/www/blog/public;
indexindex.phpindex.htmlindex.htm;
location/{
try_files$uri$uri//index.php$is_args$args;
}
location~.php${
try_files$uri/index.php=404;
fastcgi_passphp-upstream;
fastcgi_indexindex.php;
fastcgi_buffers1616k;
fastcgi_buffer_size32k;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
#fixestimeouts
fastcgi_read_timeout600;
includefastcgi_params;
訪問
輸入 url http://blog.test/,瀏覽器返回結果:
-
Web
+關注
關注
2文章
1269瀏覽量
69730 -
容器
+關注
關注
0文章
499瀏覽量
22120 -
Docker
+關注
關注
0文章
492瀏覽量
11963
原文標題:使用 Docker 搭建本地開發環境!真心強啊
文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論