在開發以前,首先你須要安裝各類開發工具和服務支持到你的開發環境當中,可能會出依賴問題,環境變量問題,端口衝突,經編譯庫問題等等。php
開發途中,可能你又須要依賴一些其餘的服務,你最好祈禱不會出問題,可能你又要重寫來配置你的環境,由於你的全部的依賴服務都在你的惟一的工做空間裏面。html
若是你的夥伴的操做系統不統一,可能你還會遇到一些不一樣元字符解析不一致的問題。mysql
而後上線以前,可能你在本地開發調試均可以完美運行,一但部署到服務器,就會出現各類問題。由於大多數狀況下,咱們的開發環境和生產環境並不相同。linux
可能你下次又有要用到一個新的開項目的開發環境。你又要重複面對上面這些問題.nginx
你不得不去審視,你要話費大量的時間用在搭建環境當中來。laravel
Docker
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux
機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。 對咱們而言,我以爲只須要把他理解成一個便攜的應用容器便可git
Docker
本地開發環境的好處對開發者而言,天天會催生出的各式各樣的新技術都須要嘗試,然而開發者卻不太可能爲他們一一搭建好環境並進行測試。時間很是寶貴,正是得益於 Docker
,讓咱們有可能在一條或者幾條命令內就搭建完環境,並且這個環境大到一個特定版本的操做系統,小到一個軟件。Docker 有一個傻瓜化的獲取軟件的方法,Docker
後臺會自動得到環境鏡像而且運行環境。github
對於通常的小公司來講,搭建一個公用的開發環境是一件不那麼划算的事情。那麼就能夠用Docker
來統一開發環境,由於無論你用的是Windows
、Mac
仍是 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
文件拷貝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完了以後自動後臺啓動了以下容器
那是由於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
的意思是後臺運行
一下是我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_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/
複製代碼
瀏覽器返回結果
enjoy !
轉載請註明出處juejin.im/post/5cbea7…