看不懂打我系列------圖文並茂基於CentOS Linux release 7.8.2003 Core安裝並Docker化你的Node.js應用


@圖文並茂基於CentOS Linux release 7.8.2003 Core安裝並Docker化你的Node.js應用

簡體中文 | English

說明

  • 本文介紹如何在CentOS Linux release 7.8.2003部署並使用Docker。
  • 旨在使用最簡單快速的辦法,解決使用docker部署nodejs需求。

前提

你要有一個服務器喲~~
購買后打開就像這個下面這個樣子

在這里插入圖片描述

備注

  • 因為本來用的是阿里雲服務器進行安裝,Aliyun Linux 2.1903 LTS 64位操作系統的ECS實例,后期遇到一些問題,查詢很多資料按照資料操作,但是問題暫時還未解決,所以用了同事的服務器進行再次安裝
  • 具體配置情況如下
  • 查看Linux 內核
uname -a
cat /proc/version

在這里插入圖片描述

  • 查看當前系統版本的詳細信息
1.cat /etc/redhat-release(此方法只適合Redhat 系的Linux)
2.lsb_release -a (此命令適用於所有的Linux 發行版本)

在這里插入圖片描述

步驟一:鏈接服務器

  1. 鏈接成功后如下圖所示,如果不知道如何鏈接,可以參考(這個地址)
    在這里插入圖片描述
  2. 依次運行以下命令添加yum源。
yum update
yum install epel-release -y
yum clean all
yum list

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  1. 安裝並運行Docker。
yum install docker-io -y
systemctl start docker

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  1. 解決報錯,查看錯誤信息:(備註,如果你用的CentOS Linux可以直接跳過這一步,一般沒有下面問題)
    在這里插入圖片描述
[root@iZ2ze67ifeuz62igol9apzZ ~]# docker -v
Docker version 1.13.1, build 4ef4b30/1.13.1
[root@iZ2ze67ifeuz62igol9apzZ ~]#  systemctl status docker.service -l
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2020-06-28 15:31:55 CST; 6min ago
     Docs: http://docs.docker.com
  Process: 24481 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 24481 (code=exited, status=1/FAILURE)

6月 28 15:31:54 iZ2ze67ifeuz62igol9apzZ systemd[1]: Starting Docker Application Container Engine...
6月 28 15:31:54 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:54.799852050+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
6月 28 15:31:54 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:54.800671443+08:00" level=info msg="libcontainerd: new containerd process, pid: 24490"
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:55.813485177+08:00" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:55.814654057+08:00" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: Error starting daemon: error initializing graphdriver: devicemapper: Error running deviceCreate (CreatePool) dm_task_run failed
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: Failed to start Docker Application Container Engine.
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: Unit docker.service entered failed state.
6月 28 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: docker.service failed.

解決方案如下
卸載老版本的 docker 及其相關依賴

# 1、先查詢所有安裝的包

yum list installed | grep docker*
# 或者
rpm -qa docker*
# 2、刪除查詢出來的包

# 一般情況會有一個
yum remove -y docker-ce
# 18.09新增了cli工具
yum remove -y docker-ce-cli
# 3、刪除鏡像文件

rm -rf /var/lib/docker
rm -rf /var/lib/docker*

升級linux內核,重新安裝docker:

#查看已經安裝的和未安裝的軟件包組,來判斷我們是否安裝了相應的開發環境和開發庫;
yum grouplist
#一般是安裝這兩個軟件包組,這樣做會確定你擁有編譯時所需的一切工具
yum groupinstall "Development Tools"
#你必須這樣才能讓 make *config 這個指令正確地執行
yum install ncurses-devel
#如果你沒有 X 環境,這一條可以不用
yum install qt-devel
#創建 CentOS-6 內核時需要它們
yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel 
  • 不好意思,上面的報錯一直沒有解決,找了許多方法去處理,但是始終是沒有結果,於是我換了同事的服務器按照以上步驟安裝。
  • 下面的內容均基於CentOS Linux release 7.8.2003 (Core)
  1. 查看安裝版本,啟動 docker
docker version
systemctl start docker

在這里插入圖片描述
在這里插入圖片描述
6. 驗證是否安裝成功

docker info

在這里插入圖片描述
7. 設置開機啟動

 chkconfig docker on

在這里插入圖片描述

配置Docker

  1. 切換國內鏡像源, 加速訪問 Docker Hub
echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
systemctl daemon-reload
service docker restart

在這里插入圖片描述
2. 安裝配置node環境

docker search node
docker pull docker.io/node:7.8.0

在這里插入圖片描述
在這里插入圖片描述

  1. 在自己喜歡的目錄里創建Dockerfile文件
[root@VM_0_5_centos ~]# cd /var/opt/test
[root@VM_0_5_centos test]# ll
總用量 0
[root@VM_0_5_centos test]# touch Dockerfile

在這里插入圖片描述
在這里插入圖片描述

  1. 假設Node.js應用的啟動命令為node server.js, 監聽端口為8090
# 可以指定依賴的node鏡像的版本 node:<version>,如果不指定,就會是最新的
FROM node
WORKDIR /app

# 把其他源文件復制到工作目錄
COPY ./app /app
# 把 package.json,package-lock.json(npm@5+) 或 yarn.lock 復制到工作目錄(相對路徑)
RUN npm install
# 只安裝dependencies依賴
# 替換成應用實際的端口號
EXPOSE 8090
# 這里根據實際起動命令做修改
CMD [ "node", "server.js" ]


在這里插入圖片描述
5. 補充.dockerignore

touch .dockerignore

.dockerignore內容如下

node_modules
npm-debug.log

在這里插入圖片描述
在這里插入圖片描述
6. 創建鏡像

docker build -t node78:v1 .

在 Docker 守護進程執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:(如果按照上面的Dockerfile配置文件,不會報這個錯,配置文件是后期修改過的,又重新截圖的哦~)

[root@VM_0_5_centos test]# docker build -t node78:v1 .
Sending build context to Docker daemon 3.584 kB
Error response from daemon: Unknown instruction: ​:
  1. 查看鏡像
docker images
​
# 示例輸出
REPOSITORY                      TAG        ID              CREATED
node                            8          1934b0b038d1    5 days ago
${your_name}/${image_name}    latest     d64d3505b0d2    1 minute ago

在這里插入圖片描述

  1. 嘗試一下docker run node不僅可以可以尋找鏡像,如果沒有它就幫助你下載最新的版本
    因為我下載的不是最新鏡像,它自動開始搞最新啦
docker run node

在這里插入圖片描述
9. 查看鏡像

你會看到我們有倆鏡像了,一個最新版,一個是初始下載的版本.要是不想要後期可以刪除哦~
圖片裡的docker run 命令先不要執行哦~

docker image ls

在這里插入圖片描述

  1. 准備一個簡單的nodejs文件
var http = require('http');

http.createServer(function (request, response) {


    response.writeHead(200, { 'Content-Type': 'text/plain' });


    response.end('Hello World\n');
}).listen(8090);

console.log('Server running at http://127.0.0.1:8090/');

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  1. 構建鏡像,不要忘了後面還有一個點點哦
docker build -t docker.io/node:latest .

在這里插入圖片描述

  • 啟動容器腳本
docker run -d -p 8090:8090  docker.io/node:latest 

在這里插入圖片描述
12. 測試,成功連接
在這里插入圖片描述

至此恭喜,部署成功!

常用命令

  • 另外附一些常用命令:
# 查看所有容器(包括已終止的)
docker ps -a
# 或使用新命令
docker container ls -a
# 查看運行中的容器
docker ps
# 或使用新命令
docker container ls
​
# 示例輸出
ID            IMAGE                                COMMAND    ...   PORTS
ecce33b30ebf  ${your_name}/${image_name}:latest  npm start  ...   49160->8080
# 查看某容器內日志
docker logs -f ${container_id}
# 進入某容器,並有shell執行環境
# 進入容器
# -i表示:交互式操作,-t表示:終端
docker exec -it ${container_id} bash
# 可通過輸入 exit 退出 
# 停止容器
docker container stop ${container_id}
# 啟動已終止的容器
docker container start ${container_id}
#刪除容器
docker container rm ${container_name || container_id}

#查看鏡像
docker images
# 或使用新命令
docker image ls

#刪除鏡像
docker image rm ${image_id}

#其他命令
doctor run -it -d --name springboot -p 8080:8080 springboot:latest
-d 后台運行容器,並返回容器ID
-i  以交互模式運行容器,通常與-t同時使用
-t  為容器新分配一個偽輸入終端,通常與i同時使用
-P  大寫,隨機端口映射,容器內部端口隨機
-p 小寫,指定端口映射,格式為: 主機端口:容器端口
--name 重命名
FROM 100.111.222.111/library/centos/jdk:1.8.0 -----OPEANJDK:8
從鏡像下載JDK
FROM 是指需要倉庫下載一個JDK的鏡像作為底層系統,然后在該JDK上執行后面那些操作。

結語

本教程旨在快速完成Node.js項目部署,其他配置項詳細情況問題沒有列舉出來哦...后期有空會增加配置文章喲~~
歡迎大家指出文章需要改正之處~
如果有更好的方法,歡迎大家提出來,共同進步喲~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM