最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker容器化Node.js應(yīng)用操作教程

 更新時(shí)間:2025年12月12日 09:22:48   作者:宋冠巡  
本文介紹了如何使用Docker容器化一個(gè)簡(jiǎn)單的Node.js應(yīng)用,從編寫(xiě)代碼到運(yùn)行容器,詳細(xì)講解了Docker的核心操作,包括構(gòu)建鏡像和運(yùn)行容器,感興趣的朋友跟隨小編一起看看吧

從零開(kāi)始:用Docker容器化你的第一個(gè)Node.js應(yīng)用

1. 引言

在現(xiàn)代軟件開(kāi)發(fā)中,Docker已成為不可或缺的工具。它通過(guò)容器化技術(shù),將應(yīng)用及其依賴(lài)環(huán)境打包在一起,實(shí)現(xiàn)了“一次構(gòu)建,處處運(yùn)行”的夢(mèng)想。今天,我將帶大家完成一個(gè)完整的Docker實(shí)踐:容器化一個(gè)簡(jiǎn)單的Node.js應(yīng)用,從編寫(xiě)代碼到運(yùn)行容器,一步步掌握Docker的核心操作。

2. 項(xiàng)目準(zhǔn)備

首先,我們創(chuàng)建一個(gè)簡(jiǎn)單的Node.js項(xiàng)目,僅包含兩個(gè)文件:

2.1. 應(yīng)用代碼 (index.js)

console.log("你好,世界!")

這是一個(gè)最簡(jiǎn)單的Node.js程序,輸出一句問(wèn)候語(yǔ)。

2.2. Docker鏡像定義文件 (Dockerfile)

讓我們解析一下這個(gè)Dockerfile:

  • FROM node:14-alpine:指定基礎(chǔ)鏡像為Node.js 14的Alpine Linux版本,這是一個(gè)輕量級(jí)的Linux發(fā)行版
  • COPY index.js /index.js:將本地的index.js文件復(fù)制到容器內(nèi)的根目錄
  • CMD node /index.js:設(shè)置容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令

3. 構(gòu)建Docker鏡像

有了Dockerfile,我們就可以創(chuàng)建自定義的Docker鏡像了。

3.1. 構(gòu)建命令

docker build -t hello-docker .

這個(gè)命令的含義是:

  • docker build:?jiǎn)?dòng)鏡像構(gòu)建過(guò)程
  • -t hello-docker:為鏡像打上標(biāo)簽(名稱(chēng)),便于后續(xù)引用
  • .:使用當(dāng)前目錄作為構(gòu)建上下文,Docker會(huì)查找當(dāng)前目錄下的Dockerfile

3.2. 構(gòu)建日志

PS E:\hello-world\hello-docker> docker build -t hello-docker .
[+] Building 369.5s (7/7) FINISHED                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                          0.1s
 => => transferring dockerfile: 103B                                                                                          0.0s
 => [internal] load metadata for docker.io/library/node:14-alpine                                                           263.8s
 => [internal] load .dockerignore                                                                                             0.0s
 => => transferring context: 2B                                                                                               0.0s
 => [internal] load build context                                                                                             0.1s
 => => transferring context: 29B                                                                                              0.0s
 => [1/2] FROM docker.io/library/node:14-alpine@sha256:434215b487a329c9e867202ff89e704d3a75e554822e07f3e0c0f9e606121b33     103.1s
 => => resolve docker.io/library/node:14-alpine@sha256:434215b487a329c9e867202ff89e704d3a75e554822e07f3e0c0f9e606121b33       0.1s
 => => sha256:434215b487a329c9e867202ff89e704d3a75e554822e07f3e0c0f9e606121b33 1.43kB / 1.43kB                                0.0s
 => => sha256:4e84c956cd276af9ed14a8b2939a734364c2b0042485e90e1b97175e73dfd548 1.16kB / 1.16kB                                0.0s
 => => sha256:0dac3dc27b1ad570e6c3a7f7cd29e88e7130ff0cad31b2ec5a0f222fbe971bdb 6.44kB / 6.44kB                                0.0s 
 => => sha256:0dac3dc27b1ad570e6c3a7f7cd29e88e7130ff0cad31b2ec5a0f222fbe971bdb 6.44kB / 6.44kB                                0.0s 
 => => sha256:f56be85fc22e46face30e2c3de3f7fe7c15f8fd7c4e5add29d7f64b87abdaa09 3.37MB / 3.37MB                               63.4s 
 => => sha256:8f665685b215c7daf9164545f1bbdd74d800af77d0d267db31fe0345c0c8fb8b 37.17MB / 37.17MB                             90.6s 
 => => sha256:e5fca6c395a62ec277102af9e5283f6edb43b3e4f20f798e3ce7e425be226ba6 2.37MB / 2.37MB                               52.7s 
 => => sha256:561cb69653d56a9725be56e02128e4e96fb434a8b4b4decf2bdeb479a225feaf 448B / 448B                                   95.7s 
 => => extracting sha256:f56be85fc22e46face30e2c3de3f7fe7c15f8fd7c4e5add29d7f64b87abdaa09                                     0.6s 
 => => extracting sha256:8f665685b215c7daf9164545f1bbdd74d800af77d0d267db31fe0345c0c8fb8b                                    11.2s 
 => => extracting sha256:e5fca6c395a62ec277102af9e5283f6edb43b3e4f20f798e3ce7e425be226ba6                                     0.3s 
 => => extracting sha256:561cb69653d56a9725be56e02128e4e96fb434a8b4b4decf2bdeb479a225feaf                                     0.0s 
 => [2/2] COPY index.js /index.js                                                                                             2.0s 
 => exporting to image                                                                                                        0.2s 
 => => exporting layers                                                                                                       0.1s 
 => => writing image sha256:be987f77136525684c13002b3a8d43cc6cd4d62986f7997128b51946aad6d03c                                  0.0s 
 => => naming to docker.io/library/hello-docker                                                                               0.0s 
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/pnwg2u6n5xocvatlj87a6v6fj
 1 warning found (use docker --debug to expand):
 - JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals (line 3)

3.3. 構(gòu)建過(guò)程解析

  1. Docker首先下載基礎(chǔ)鏡像node:14-alpine(如果本地不存在)
  2. 然后執(zhí)行COPY指令,將index.js文件復(fù)制到鏡像中
  3. 最后設(shè)置默認(rèn)的啟動(dòng)命令
  4. 構(gòu)建完成后,生成了一個(gè)ID為be987f771365的新鏡像

這里Docker給出了一個(gè)有用的警告:建議使用JSON格式的CMD指令來(lái)避免信號(hào)處理問(wèn)題。雖然不影響當(dāng)前使用,但在生產(chǎn)環(huán)境中需要注意這一點(diǎn)。

4. 查看本地鏡像

構(gòu)建完成后,我們可以查看本地已有的Docker鏡像:

docker images

日志輸出:

PS E:\hello-world\hello-docker> docker images
REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE  
hello-docker                     latest    be987f771365   8 minutes ago   119MB 
hello-world                      latest    74cc54e27dc4   10 months ago   10.1kB
hub.oepkgs.net/openeuler/nginx   <none>    1d992e662bfc   13 months ago   747MB

輸出顯示我們剛剛創(chuàng)建的hello-docker鏡像大小為119MB,相比基礎(chǔ)鏡像已經(jīng)很小了。同時(shí)可以看到系統(tǒng)中還有其他鏡像,比如經(jīng)典的hello-world測(cè)試鏡像。

5. 運(yùn)行容器

鏡像只是靜態(tài)的模板,要運(yùn)行應(yīng)用需要從鏡像創(chuàng)建容器:

docker run hello-docker

日志輸出:

PS E:\hello-world\hello-docker> docker run hello-docker
你好,世界!

執(zhí)行后,終端立即輸出了"你好,世界!"。這意味著:

  1. Docker從hello-docker鏡像創(chuàng)建了一個(gè)新容器
  2. 容器內(nèi)執(zhí)行了node /index.js命令
  3. Node.js解釋器執(zhí)行了我們的代碼,輸出結(jié)果到終端
  4. 程序執(zhí)行完畢,容器自動(dòng)停止

6. 查看容器

PS E:\hello-world\hello-docker> docker ps   
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS E:\hello-world\hello-docker> 
PS E:\hello-world\hello-docker> docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
9fadd3ad3798   hello-docker   "docker-entrypoint.s…"   54 seconds ago   Exited (0) 52 seconds ago             affectionate_burnell

運(yùn)行docker ps查看當(dāng)前正在運(yùn)行的容器,發(fā)現(xiàn)沒(méi)有結(jié)果。這是因?yàn)槲覀兊膽?yīng)用執(zhí)行完就退出了,容器也隨之停止。

但使用docker ps -a查看所有容器(包括已停止的),可以看到剛剛運(yùn)行的容器:

  • 狀態(tài)為"Exited (0)",表示正常退出
  • 54秒前創(chuàng)建,52秒前退出
  • 有一個(gè)隨機(jī)生成的名字"affectionate_burnell"

這就是容器與虛擬機(jī)的關(guān)鍵區(qū)別之一:容器是為了運(yùn)行特定進(jìn)程而存在的,當(dāng)進(jìn)程結(jié)束,容器的使命也就完成了。

7. 實(shí)踐總結(jié)

通過(guò)這個(gè)簡(jiǎn)單的實(shí)踐,我們完成了Docker的核心工作流:

  1. 編寫(xiě)應(yīng)用代碼 → 2. 定義Dockerfile → 3. 構(gòu)建鏡像 → 4. 運(yùn)行容器

在這個(gè)過(guò)程中,我們學(xué)到了幾個(gè)關(guān)鍵點(diǎn):

  • 鏡像與容器的關(guān)系:鏡像是靜態(tài)的模板,容器是鏡像的運(yùn)行實(shí)例
  • 分層構(gòu)建:Docker鏡像采用分層結(jié)構(gòu),每一條指令都會(huì)創(chuàng)建一個(gè)新的層
  • 輕量級(jí)特性:容器隨內(nèi)部進(jìn)程的結(jié)束而停止,資源占用更高效
  • 環(huán)境一致性:無(wú)論在哪里運(yùn)行,容器內(nèi)部環(huán)境都完全相同

到此這篇關(guān)于Docker容器化Node.js應(yīng)用教程的文章就介紹到這了,更多相關(guān)docker容器化node.js內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker中run命令30個(gè)常用參數(shù)詳解和示例

    docker中run命令30個(gè)常用參數(shù)詳解和示例

    這篇文章主要給大家介紹了關(guān)于docker中run命令30個(gè)常用參數(shù)的相關(guān)資料,docker?run命令是Docker中最常用的命令之一,用于創(chuàng)建并啟動(dòng)一個(gè)新的容器實(shí)例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • docker容器時(shí)區(qū)錯(cuò)誤問(wèn)題

    docker容器時(shí)區(qū)錯(cuò)誤問(wèn)題

    常出現(xiàn)docker中運(yùn)行的容器獲取到的時(shí)間與北京時(shí)間相差8小時(shí)的問(wèn)題,其實(shí)是因?yàn)槿萜鬟\(yùn)行的時(shí)區(qū)不正確。本文主要介紹了docker容器時(shí)區(qū)錯(cuò)誤問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • docker部署code-server的方法

    docker部署code-server的方法

    這篇文章主要介紹了docker部署code-server的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Google和Facebook不使用Docker的原理解析

    Google和Facebook不使用Docker的原理解析

    這篇文章主要介紹了Google和Facebook不使用Docker的原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 優(yōu)化Docker鏡像安全性的12個(gè)技巧總結(jié)

    優(yōu)化Docker鏡像安全性的12個(gè)技巧總結(jié)

    docker是虛擬化容器技術(shù),有三個(gè)主要概念,鏡像(類(lèi))、容器(對(duì)象)、倉(cāng)庫(kù),docker就是類(lèi)似VM虛擬機(jī)一樣的虛擬技術(shù),體積小,運(yùn)行速度快,下面這篇文章主要給大家介紹了關(guān)于優(yōu)化Docker鏡像安全性的12個(gè)技巧,需要的朋友可以參考下
    2022-03-03
  • Docker容器網(wǎng)絡(luò)基礎(chǔ)概述

    Docker容器網(wǎng)絡(luò)基礎(chǔ)概述

    這篇文章主要介紹了Docker容器網(wǎng)絡(luò)基礎(chǔ)概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 遠(yuǎn)程連接Docker上的Mysql失敗的分析與解決方案

    遠(yuǎn)程連接Docker上的Mysql失敗的分析與解決方案

    這篇文章主要介紹了遠(yuǎn)程連接Docker上的Mysql失敗的分析與解決方案的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Docker容器間通信之BIP使用及配置方式

    Docker容器間通信之BIP使用及配置方式

    Docker使用橋接網(wǎng)絡(luò)(BridgeNetwork)和BIP(BridgeIP)來(lái)管理容器之間的網(wǎng)絡(luò)通信,默認(rèn)情況下,Docker會(huì)自動(dòng)創(chuàng)建一個(gè)名為bridge的虛擬網(wǎng)絡(luò)接口,并為每個(gè)容器分配一個(gè)獨(dú)立的IP地址,在/etc/docker/daemon.json文件中可以進(jìn)行自定義配置
    2025-01-01
  • Docker輕松自建RustDesk服務(wù)器的實(shí)現(xiàn)步驟

    Docker輕松自建RustDesk服務(wù)器的實(shí)現(xiàn)步驟

    本文介紹通過(guò)Docker和自動(dòng)化腳本在Linux服務(wù)器部署RustDesk的hbbs和hbbr組件,實(shí)現(xiàn)自建私有服務(wù)器以提升隱私、安全與靈活性,并提供客戶端配置及注意事項(xiàng),感興趣的可以了解一下
    2025-09-09
  • docker compose up 命令默認(rèn)配置文件自動(dòng)查找規(guī)則詳解

    docker compose up 命令默認(rèn)配置文件自動(dòng)查找規(guī)則詳解

    DockerCompose在沒(méi)有指定配置文件時(shí),會(huì)按照優(yōu)先級(jí)順序查找compose.yaml、compose.ymldocker-compose.yml等文件,官方推薦使用compose.yaml,本文給大家介紹docker compose up 命令默認(rèn)配置文件自動(dòng)查找規(guī)則詳解,感興趣的朋友跟隨小編一起看看吧
    2026-01-01

最新評(píng)論

娱乐| 金昌市| 巫山县| 宁波市| 桐梓县| 申扎县| 綦江县| 遂平县| 上栗县| 荃湾区| 蓬安县| 沂水县| 拜泉县| 观塘区| 高州市| 万宁市| 泽州县| 石渠县| 太和县| 洱源县| 建湖县| 阳西县| 永嘉县| 大关县| 河曲县| 夏津县| 安岳县| 尼勒克县| 论坛| 夹江县| 灵武市| 高阳县| 汾西县| 满洲里市| 当阳市| 昂仁县| 张北县| 都昌县| 托里县| 宁德市| 兰考县|