docker 入門 及VUE項目部署

一、常用指令

docker images     

 ####查看當前鏡像列表;

docker rmi  鏡像ID或鏡像名  [-f]           

####刪除指定鏡像,-f表示強制刪除;

docker pull 鏡像名[:版本號]               

####從公共庫里拉取鏡像,不指定版本號則默認最新版本latset;

docker build -t 鏡像名 .                   

####注意最後有一個句號,表示依據當前目錄下的dockerfile創建鏡像,這一步容易報錯,可以執行下npm cache clean --force

####多試幾次,另外dockerfile的編寫下面再說

docker run -p 本機端口號:docker端口號  --name 容器名  -v  當前項目路徑:docker工作目錄    所在鏡像名

 ####在鏡像裏創建容器,指定端口映射,需要注意的是在window下"%cd%"表示當前目錄,$PWD無效

docker ps [-a]

####查詢啓動的容器列表,-a表示所有的容器列表

docker rm [-f]  容器ID或容器名稱

####刪除容器,-f表示強制刪除

docker stop/start/restart 容器ID或容器名稱

####停止/啓動/重啓  容器

docker exec -it 容器ID bash

####進入指定容器內部

        apt-get update

        ####更新容器   ctrl+d 或exit 即可退出

        install vim

        ####安裝vim編輯器,注意在此之前最好先執行一遍apt-get update

二、dockerfile

最好放在一個單獨的文件夾內,不然與其他文件混在一塊,在build時會把其他文件一併傳給docker引擎打包

####第一部分:基礎鏡像信息
#基於centos鏡像
FROM centos

####第二部分:維護人信息(新版本好像已經取消了)
#維護人的信息
MAINTAINER The CentOS Project <[email protected]>

####第三部分:鏡像操作命令隊列
#安裝httpd軟件包
RUN yum -y update
RUN yum -y install httpd

#開啓80端口
EXPOSE 80

#複製網站首頁文件至鏡像中web站點下
ADD index.html /var/www/html/index.html

#複製該腳本至鏡像中,並修改其權限
ADD run.sh /run.sh
RUN chmod 775 /run.sh

####容器啓動時執行的命令隊列
#當啓動容器時執行的腳本文件 如果有多個CMD,最後一個會把前面的覆蓋掉
CMD ["/run.sh"]

常用指令:

from  基礎鏡像名[:版本號]

####指定依賴的基礎鏡像名

MAINTAINER  維護人信息

####備註維護人信息,更推薦使用  LABEL maintainer="維護人"

RUN ["yum", "install", "httpd"]    ----exec模式

RUN yum install httpd    ----shell模式

####構建鏡像時運行的Shell命令

CMD ["-C", "/start.sh"]

CMD ["/usr/sbin/sshd", "-D"]

CMD /usr/sbin/sshd -D

####啓動容器時運行的shell命令,如果有多個CMD,最後一個會把前面覆蓋掉

EXPOSE 端口號

####服務運行的docker端口,不一定是訪問時的,在啓動容器時可以再映射

ADD 當前項目路徑   docker路徑

COPY 當前項目路徑   docker路徑

####兩個都是拷貝文件或目錄到鏡像中,add會自動解壓,copy不會,這個路徑不必先創建,沒有會自動創建

WORKDIR  工作路徑

####指定docker工作目錄路徑,注意的是這個路徑必須是事先創建好的

三、VUE項目部署

分爲兩種方式吧。(注意下面部署跟上面這個dockerfile沒有關係哈)

        一是我們先用npm build項目,然後把dist文件夾部署到docker上,這樣好像項目開發完的最終部署。

       另一種是直接把項目部署到docker上,打包神馬的操作都在docker進行,其實是在docker裏進行了npm的操作。這樣部署完可以把鏡像push上去,然後team內pull,有利於統一環境的版本,但是問題也是有的,在本地代碼修改之後並不會立即響應到頁面,得手動啓用一下容器,有點卡蛋。

1.先說第一種方式,因爲部署的是打包好的(先npm run build),所以不需要依賴node了,直接配置個nginx鏡像就行了。

   a.先獲取nginx鏡像

docker pull nginx

   b.創建nginx config配置文件

      在項目根目錄下創建nginx文件夾,該文件夾下新建文件default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

這個文件可以看到首頁的指向爲 /usr/share/nginx/html/index.html, 所以我們可以一會把構建出來的index.html文件和相關的靜態資源放到/usr/share/nginx/html目錄下。
還將上面node服務代理出去了。容器內部 ip 通過查看docker inspect containerID

   c.啓動容器

docker run \
-p 8000:80 \
-d --name vuenginx \
--mount type=bind,source="%cd%"/vueclidemo/nginx,target=/etc/nginx/conf.d \
--mount type=bind,source="%cd%"/vueclidemo/dist,target=/usr/share/nginx/html \
nginx

  命令太長可以用\換行。

  -p 8000:80  是指把本地的8000端口映射到docker的80端口上;

  -d 後臺運行

  --name vuenginx 指定容器的名稱

  --mount type=bind 沒明白乾啥的,後面的source表示當前項目的目錄,target表示docker的目錄

  最後要跟上依賴容器的名稱。

  到此第一種部署結束了,在本地瀏覽器中用8000端口訪問。

2.第二種方式,相對麻煩一些

   a.先依賴於node鏡像創建一個鏡像,在項目根目錄下創建一個dockerfile

#基於 node:latest 鏡像而構建的
FROM node
#指定工作目錄
WORKDIR /usr/src/app
#COPY 指令將從構建上下文目錄中 <源路徑> 的文件/目錄複製到新的一層的鏡像內的 <目標路徑> 位置。
COPY package*.json ./
#安裝依賴
RUN npm install
#將所有文件copy到工作目錄
COPY . .
#聲明運行時容器提供服務端口
EXPOSE 8080
#指定默認的容器主進程的啓動命令
CMD [ "npm", "start" ]

  b.build鏡像

    在Dockerfile目錄運行下面的build命令, -t參數指定了創建好的鏡像的名稱:

docker build -t dockerdemo .

   build成功後可以通過下面命令查詢你的鏡像列表:

docker images

    c.啓動容器

docker run -v "%cd%":/usr/src/app -p 8088:8080 --name container-test dockerdemo

   -v "%cd%":/usr/src/app    綁定掛載目錄

   -p 8088:8080      把本地端口8088映射到docker的8080

   --name container-test    指定容器的名字爲container-test

   最後爲所在鏡像的名稱。

  在本地瀏覽器訪問8088端口。

  不想每次啓動這麼麻煩可以在根目錄下創建一個makefile.bat文件,內容如下:

echo off
set b=%cd%
if "%1"=="dev" docker run -v "%b%":/usr/src/app -p 8088:8080 --name container-test dockerdemo

 然後每次啓動只需要輸入:

makefile.bat dev

   我這裏只配置了dev,其他模式還可以仿着配。

 

最後說幾個自己遇到坑:

1.命令過長可以\換行

2.在瀏覽器訪問時儘量不要用localhost:8088,最好換成自己的ip

3.在win系統下"%cd%"表示當前目錄,網上資料裏的$PWD無效

4.第二種部署方式裏,vue項目的config/index.js配置文件中的port和dockerfile裏EXPOSE端口號要保持一致,不然即便是映射以    後瀏覽器也訪問到(不知道爲啥,知道的大牛麻煩留言解釋下,謝謝)

5.第二種部署方式裏,vue項目的config/index.js配置文件中的host最好爲"0.0.0.0",不用"localhost",不然即便是映射以後瀏覽器也有可能訪問到(不知道爲啥,知道的大牛麻煩留言解釋下,謝謝)

6.還有給忘了,想起來再補吧。

 

上述的所有,是我自己初步瞭解docker遇到的,不對的地方歡迎指正,docker菜雞一隻。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章