Docker部署NodeJs實踐(2、部署images和容器)

本NodeJs工程基於node-v8的docker鏡像版本。node

一、Dockerfile文件

首先,在node工程的根目錄建立Dockerfile文件,該文件是node工程中對docker的配置文件。linux

一、建立Dcokerfile文件web

vi Dockerfile複製代碼

二、編寫文件內容以下:docker

#node鏡像版本
FROM node:8-alpine
#聲明做者
MAINTAINER LIU
#在image中建立文件夾
RUN mkdir -p /home/Service
#將該文件夾做爲工做目錄
WORKDIR /home/Service

# 將node工程下全部文件拷貝到Image下的文件夾中
COPY . /home/Service

#使用RUN命令執行npm install安裝工程依賴庫
RUN npm install

#暴露給主機的端口號
EXPOSE 8888
#執行npm start命令,啓動Node工程
CMD [ "npm", "start" ]
複製代碼

二、構建image

執行命令docker build -t node-app:v1 . 須要注意v1後面還有一個.
其中 -t node-app:v1 爲構建的鏡像名稱及標籤npm

[root@localhost test1]# docker build -t node-app:v1 .
Sending build context to Docker daemon 4.096 kB
Step 1/8 : FROM node:8-alpine
 ---> dd574b216ad7
Step 2/8 : MAINTAINER LIU
 ---> Using cache
 ---> f3f22f068507
Step 3/8 : RUN mkdir -p /home/Service
 ---> Using cache
 ---> 2222ce103ae1
Step 4/8 : WORKDIR /home/Service
 ---> Using cache
 ---> e60fd914f709
Step 5/8 : COPY . /home/Service
 ---> Using cache
 ---> 58000275f835
Step 6/8 : RUN npm install
 ---> Using cache
 ---> e66dc16c44f4
Step 7/8 : EXPOSE 8888
 ---> Using cache
 ---> 2adff3739104
Step 8/8 : CMD npm start
 ---> Using cache
 ---> 190fba2814a6
Successfully built 190fba2814a6
複製代碼

查看生成的image: docker images命令json

[root@localhost test1]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
node-app                v1                  190fba2814a6        2 months ago        71 MB
複製代碼

三、運行container

執行命令 docker run -d -p 8888:8888 190f
其中, -d表示在容器後臺運行,-p表示端口映射,將本機的8888端口映射到container的8888端口,外網訪問本機的8888端口便可訪問container。190f爲生成的IMAGE的ID,只須要寫入對應ID的前幾位系統能辨識出對應的image便可。centos

[root@localhost test1]# docker run -d -p 8888:8888 190f
1b335de60ff4ad0f75aa6c4458d4e91cc3839f6e606c5b09ff926bcebd6c9770
複製代碼

執行命令docker ps查看container是否運行bash

[root@localhost test1]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
1b335de60ff4        190f                "npm start"         4 seconds ago       Up 3 seconds        0.0.0.0:8888->8888/tcp   epic_swartz
複製代碼

經過命令docker logs 1b335 還可查看container的日誌app

[root@localhost test1]# docker logs 1b335
> webtest@1.0.0 start /home/Service
> node server.js
Running on http://localhost:8888
複製代碼

說明服務已經啓動。tcp

四、進入容器

爲了方便查看容器內部文件和調試,能夠經過命令進入容器中。容器內部就像一個小型的linux系統同樣。命令爲docker exec -it 1b33 /bin/sh

[root@localhost test1]# docker exec -it 1b33 /bin/sh
/home/Service # ls
Dockerfile         node_modules       package-lock.json  package.json       server.js
複製代碼

五、日誌

  • docker鏡像中node工程會有打印日誌功能,由於docker容器一旦掛掉,容器中的文件也會訪問不了,因此日誌必需要放在docker鏡像外的文件路徑下。此時,必需要將centos系統中的日誌文件目錄掛在到docker容器中,在容器啓動時開啓數據卷,實現日誌採集。
  • 在啓動容器時,使用命令docker run -d -p 8888:8888 -v /home/logs:/data/logs 190f便可。/home/logs爲centos系統中日誌文件目錄,data/logs爲docker容器中node工程寫入日誌路徑。
  • 若是docker容器中工程須要寫入文件,則在啓動時要加上--privileged=true才能夠。

六、打包與解壓

若是沒有私有倉庫,則能夠經過save和load命令來打包和解壓。 save將docker鏡像壓縮爲tar文件,load爲將tar文件解壓生成鏡像。

[root@localhost docker]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
node-app                v1                  190fba2814a6        2 months ago        71 MB
[root@localhost docker]# docker save 190fba -o /home/docker/node-app-1.0.tar
[root@localhost docker]# ll
-rw-------. 1 root root 78526976 8月  26 19:38 node-app-1.0.tar
複製代碼

其中/home/docker文件路徑爲tar存放目錄,必須提早建好,docker不會自動建立。
而解壓命令爲:

[root@localhost docker]# docker load < /home/docker/node-app-1.0.tar
Loaded image ID: sha256:190fba2814a66291d06368a8afef499aa6f96f5d6def0b808d1fa5b76d862d53
複製代碼

此時容器將部署到環境中,可以使用docker images查看。

相關文章
相關標籤/搜索