【问题标题】:Can I update node.js version in a dockerfile from another docker image?我可以从另一个 docker 镜像更新 dockerfile 中的 node.js 版本吗?
【发布时间】:2022-12-13 05:07:22
【问题描述】:

我想问一下如何从另一个 docker 图像中的 dockerfile 中的 node.js 版本。

我正在使用 puppeteer 的官方图片ghcr.io/puppeteer/puppeteer:latest,它使用的是 node.js 16.18.1。 https://pptr.dev/guides/docker/

但是,我想使用一个需要使用 node.js >= 18 的包。我可以在我的 dockerfile 中更新它吗?

我目前的 dockerfile 非常简单。我不知道如何更新它。

FROM ghcr.io/puppeteer/puppeteer:latest

WORKDIR /app

COPY package.json /app
COPY yarn.lock /app

RUN yarn install

COPY . /app

CMD ["yarn", "start"]

【问题讨论】:

    标签: node.js docker dockerfile puppeteer


    【解决方案1】:

    您可以基于节点 v18 构建自己的 puppeteer docker 镜像。

    这是开源和 docker 的好处之一。

    #1 克隆'puppeteer'来源

    完整的源代码到你的笔记本电脑(Ubuntu 或 Windows)

    https://github.com/puppeteer/puppeteer

    git clone https://github.com/puppeteer/puppeteer.git
    

    你可以在根目录下看到这些文件

    $ ls -ls
    total 668
      4 -rw-rw-r--   1 isb isb   1034 Dec 12 14:57 commitlint.config.js
      4 drwxrwxr-x   3 isb isb   4096 Dec 12 15:22 docker
      4 drwxrwxr-x   5 isb isb   4096 Dec 12 15:21 docs
      4 drwxrwxr-x   2 isb isb   4096 Dec 12 14:57 examples
     12 -rw-rw-r--   1 isb isb  11344 Dec 12 14:57 LICENSE
     24 drwxrwxr-x 450 isb isb  20480 Dec 12 15:21 node_modules
      4 -rw-rw-r--   1 isb isb   3908 Dec 12 14:57 package.json
    568 -rw-rw-r--   1 isb isb 580968 Dec 12 15:21 package-lock.json
      4 drwxrwxr-x   6 isb isb   4096 Dec 12 14:57 packages
     12 -rw-rw-r--   1 isb isb   8447 Dec 12 14:57 README.md
      4 -rw-rw-r--   1 isb isb    582 Dec 12 14:57 release-please-config.json
      4 drwxrwxr-x   8 isb isb   4096 Dec 12 14:57 test
      4 drwxrwxr-x   2 isb isb   4096 Dec 12 14:57 test-d
      4 drwxrwxr-x   4 isb isb   4096 Dec 12 14:57 tools
      4 -rw-rw-r--   1 isb isb    864 Dec 12 14:57 tsconfig.base.json
      4 -rw-rw-r--   1 isb isb   2207 Dec 12 14:57 versions.js
      4 drwxrwxr-x   6 isb isb   4096 Dec 12 14:57 website
    

    #2 将 Dockerfile 从节点 16 更改为 18

    Before

    FROM node:16
    

    After

    FROM node:18
    

    #3 创建两个tgz文件

    来自 #1 存储库的根目录。

    ./docker/pack.sh
    

    它将在 Docker 目录中创建两个文件

    puppeteer-core-latest.tgz
    puppeteer-latest.tgz
    
    $ ls -ls
    total 540
      4 -rw-rw-r-- 1 isb isb   1344 Dec 12 15:34 Dockerfile
      4 -rwxrwxr-x 1 isb isb    394 Dec 12 14:57 pack.sh
    456 -rw-rw-r-- 1 isb isb 466051 Dec 12 15:22 puppeteer-core-latest.tgz
     68 -rw-rw-r-- 1 isb isb  67823 Dec 12 15:22 puppeteer-latest.tgz
      4 -rw-rw-r-- 1 isb isb    893 Dec 12 14:57 README.md
      4 drwxrwxr-x 2 isb isb   4096 Dec 12 14:57 test
    

    #4 构建你自己的 puppeteer docker 镜像

    /puppeteer/docker$ docker build -t puppeteer-chrome-linux-node-v18 .
    

    检查新的 docker 镜像

    $ docker image ls
    REPOSITORY                                             TAG       IMAGE ID       CREATED          SIZE
    puppeteer-chrome-linux-node-v18                        latest    25df4f861b30   10 seconds ago   1.97GB
    puppeteer-chrome-linux                                 latest    9ddf63fe89c4   21 minutes ago   1.89GB
    

    您可以检查新图像哪个版本的节点

    $ docker image inspect puppeteer-chrome-linux-node-v18:latest
    

    结果在终端

                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "NODE_VERSION=18.12.1",
                    "YARN_VERSION=1.22.19"
                ],
    

    详细here

    #5 基于#4 新图像构建新的 scrapy docker 图像

    FROM puppeteer-chrome-linux-node-v18:latest
    
    WORKDIR /app
    
    COPY package.json /app
    COPY yarn.lock /app
    
    RUN yarn install
    
    COPY . /app
    
    CMD ["yarn", "start"]
    

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多