Docker发布node-hexo镜像

简介: 使用 Dockerfile 基于 alpine 系统,构建 nodejs 环境和 hexo 基础依赖以及 git 环境。

参考文献

DockerHub:https://hub.docker.com/r/jefferyjob/node-hexo

GithubDockerfile:https://github.com/jefferyjob/node-hexo

Docker-composer管理hexo:https://github.com/jefferyjob/docker-compose-hexo

使用 Dockerfile 基于 alpine 系统,构建 nodejs 环境和 hexo 基础依赖以及 git 环境。

Dockerfile构建

编写镜像包

第1种方法

# base image
FROM node:alpine
# MAINTAINER
MAINTAINER lbinjob@163.com
# work dir
WORKDIR /app
# run install
RUN npm config set registry https://registry.npm.taobao.org \
    && npm install -g hexo
# port
EXPOSE 4000

第2种方法:未来更好的扩展性,此处采用 alpine 从0到1开始构建。

# base image
FROM alpine:3.10
# MAINTAINER
MAINTAINER lbinjob@163.com
# work dir
WORKDIR /app
# run install
RUN apk add --no-cache nodejs \
    && apk add --no-cache git \
    && apk add --no-cache npm \
    && npm config set registry https://registry.npm.taobao.org \
    && npm install -g hexo
# port
EXPOSE 4000

镜像发布

镜像生成:
docker build -t node-hexo:1.0 .
  • --tag 或 -t:镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签
  • -f:指定要使用的Dockerfile路径
镜像测试:
# 查看镜像构建历史
docker history node-hexo:1.0

# run 一个测试容器
docker run -itd --name node-hexo-test node-hexo:1.0

# 进入容器
docker exec -it node-hexo-test /bin/sh
# 进行软件测试
$ node -v
v10.24.0
$ npm -v
6.14.11
$ git --version
git version 2.22.5
$ hexo -version
hexo-cli: 4.2.0
发布到DockerHub:

1、注册 Dockerhub 的仓库

注册地址:https://hub.docker.com/repository/create

名称要和你要发布的镜像名称保持一致哦

此处我创建的为 public 权限的 node-hexo 仓库

image-20220708131714100

2、重命名

命名规范为:docker_username/repository_name

docker tag node-hexo:1.0 jefferyjob/node-hexo:1.0

3、登录docker

docker login -u jefferyjob

4、发布

docker push jefferyjob/node-hexo:1.0

注意,此版本发布后,把版本号改为 latest 然后再发布一次,让dockerhub中的latest保持最新。

5、高级技巧

你也可以将此仓库绑定到你的 github 仓库,每次修改 github 仓库的 dockerfile 的时候,实施 webhook 通知你的docker repository 实现自动更新 docker 镜像。

也可以在 dockerfile 中使用 ENTRYPOINT ["docker-entrypoint.sh"] 管理入口,提供更加便捷化的操作。

问题

开始我使用Nodejs官方的源码包安装Nodejs。也就是将官网下载的tar格式的包解压后,再链接二进制文件的方式。

但是发生了一个问题:我将源码包里边的node可执行文件链接到/usr/sbin/node后,执行node -v,提示command not found

原因

几经查找,发现原来是因为Nodejs官网提供的源码包是使用glibc库打包的,而Alpine使用的是musl

解决方案

  1. 使用Alpine自带的apk进行安装: apk add nodejs npm
  2. 使用非官方构建源里边的包,里边有musl版本的:https://unofficial-builds.nodejs.org/download/release/ 。虽说是非官方构建源,也是官网上提供的链接。

反思

之前也看到过Alpine关于编译库的坑,但是没想到这么快就让我遇上了,而且的确容易被command not found这个提示误导,这使我一度怀疑dash$PATHln

相关文章
|
14天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
100 28
|
2月前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
231 70
|
1天前
|
存储 运维 应用服务中间件
Docker Image即Docker镜像
Docker 镜像是 Docker 容器的基础,包含了运行应用程序所需的一切。通过 Dockerfile 可以方便地创建自定义镜像,并且利用 Docker 提供的命令可以轻松管理和使用这些镜像。掌握 Docker 镜像的创建、管理和使用,是进行容器化应用开发和部署的基础技能。希望本文能帮助读者更好地理解 Docker 镜像的概念和操作,提高开发和运维效率。
16 6
|
1天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
31 1
|
27天前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
124 26
|
2月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
94 27
|
2月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
187 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
81 22
|
2月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
136 29
|
3月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像