Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 受權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,併成立推進開放容器聯盟(OCI)。html
Docker 使用 Google 公司的 Go 語言 開發實現,基於 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬於操做系統層面的虛擬化技術。因爲隔離的進程獨立於宿主和其它隔離的進程,所以稱其爲容器。最初實現是基於 LXC,從 0.7 版本後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,進一步演進使用 runC 和 containerd。前端
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的建立和維護。使得 Docker 技術比虛擬機技術更爲輕便、快捷。vue
前端應用使用docker能夠帶來哪些優點呢?node
好比前端應用須要部署在多臺虛擬機上,那麼配置多臺虛擬機就須要人爲操做,增長修改配置,好比node版本升級,都須要一臺一臺進行,十分浪費時間,並且容易出錯。可是使用docker技術,只須要配置一份鏡像就能夠,十分方便。nginx
Docker 確保了運行環境的一致性,使得應用的遷移更加容易。能夠很輕易將在一個平臺上運行的應用,遷移到另外一個平臺上,而不用擔憂運行環境的變化致使應用沒法正常運行。好比接到任務說下週要加一個分區,或者客戶要求部署私有云,能夠很放心的說鏡像拿走,而不用擔憂環境問題。git
得益於 Docker 使用的分層存儲和鏡像技術,使得擴展鏡像變得很是簡單。能夠預先把程序須要的依賴,靜態資源等在構建過程當中添加到鏡像,在須要的時候啓動該容器實現快速部署、回滾、止血。好比當出現線上事故須要回滾時,傳統作法是觸發某些自動化工具去拉代碼裝依賴打包最後部署,一旦某個環節出了問題,譬如網絡被牆了致使依賴拉不下來,構建失敗等等,將會致使更驗證的問題。docker
macOS
瀏覽器
brew cask install docker
bash
安裝好以後,會出如今mac的應用中,打開docker應用,遇到下載慢的問題能夠把homebrew包地址修改成國內鏡像(中科大鏡像等)網絡
其餘系統安裝 yeasy.gitbooks.io/docker_prac…
####打包前端出dist
vue小項目舉例,使用官方cli3快速生成項目
vue create docker-vue
這裏使用yarn打包和啓動項目,
cd docker-vue
yarn run build
打包出dist文件夾,方便一會打包進docker鏡像
使用docker官方的nginx鏡像
docker pull nginx:1.14
查看已安裝鏡像
docker image ls
在當前目錄(docker-vue)下建立nginx配置文件 nginx.conf
配置文件代碼以下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80 default_server;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html ;
try_files $uri $uri/ /index.html;
}
}
}
複製代碼
在當前目錄(docker-vue)下,建立Dockerfile文件,Dockerfile 是一個文本文件,其內包含了一條條的 指令(Instruction),每一條指令構建一層,所以每一條指令的內容,就是描述該層應當如何構建。
FROM nginx:1.14
LABEL maintainer "dale_na@163.com"
ADD ./dist/ /usr/share/nginx/html
ADD nginx.conf /etc/nginx/
EXPOSE 80
複製代碼
docker build -t dale_docker .
--tag, -t: 鏡像的名字及標籤
docker run -d -p 8080:80 dale_docker
-d: 後臺運行容器,並返回容器ID
-p: 指定端口映射,格式爲:主機(宿主)端口:容器端口
若是以上配置都操做正確的話,此時打開本地瀏覽器,輸入 http://localhost:8080/ 就會看到剛剛本身新建的vue項目!
docker ps -a
docker logs -f 容器id
docker container rm 容器id