构建Docker镜像

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 构建Docker镜像

提示

参考笔记:vscode工程配置添加 Docker 支持


思想(yarn方式)

Step1

先将项目打包出 dist 文件夹。


Step2

基础镜像选择 node:14.15.0-alpine ,( 注意: 版本应该来自于项目的 .nvmrc 文件!)

并设置一些辅助配置,例如:时区、node可用内存等。


Step3

dist 文件夹, package.json 文件, .env 文件, yarn.lock 文件通过 COPY 指令拷贝到容器中的工程目录。


Step4

运行 yarn install


Step5

.env 文件中的环境变量写到 Dockerfile 文件中(PS:这是可选操作),按需修改其中的环境。


Step6

使用 EXPOSE 指令暴露端口。


Step7

使用 CMD 指令运行 node dist/main.js

完成!


完整示例文件

FROM node:14.15.0-alpine
LABEL maintainer="Iric<iricbing@gmail.com>"
WORKDIR /app
# 设置时区
RUN echo "Asia/Shanghai" > /etc/timezone && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
# 设置NODE最大可用内存
ENV NODE_OPTIONS=--max-old-space-size=6144
# 此处可以这样写的原因是在Dockerfile文件相同目录下有.dockerignore文件(类似于git提交时的.gitignore文件)
COPY . .    
# 只安装生产依赖
RUN yarn install --frozen--lockfile --prod --ignore-scripts
EXPOSE 3000
ENV NODE_ENV=production
# 基础配置
ENV COMMON_JWT_EXPIRES_IN=7200000
ENV COMMON_PRINT_USER_ACTIVITY_LOG=false
ENV COMMON_PRINT_SYSTEM_LOG=false
ENV COMMON_ENABLE_SWAGGER=false
ENV COMMON_PASSWORD_SALT=AxJK4m+APM1QcU1eRzFdZ7
ENV COMMON_PORT=3000
# 微服务相关
ENV MICRO_GRPC_BIND=0.0.0.0
ENV MICRO_GRPC_PORT=3300
ENV MICRO_LOG_HOST=log    
ENV MICRO_LOG_PORT=3000
# 数据库相关
ENV DATABASE_TYPE=postgres
ENV DATABASE_HOST=postgresql
ENV DATABASE_PORT=5432
ENV DATABASE_USERNAME=postgres
ENV DATABASE_PASSWORD=123456
ENV DATABASE_DATABASE=demo
ENV DATABASE_SYNCHRONIZE=true
ENV DATABASE_LOGGING=false
# 用作token验证的redis数据库
ENV REDIS_TOKEN_NAME=token
ENV REDIS_TOKEN_DB=2
ENV REDIS_TOKEN_HOST=redis
ENV REDIS_TOKEN_PORT=6379
ENV REDIS_TOKEN_PASSWORD=
ENV REDIS_TOKEN_KEY_PREFIX=token-
ENV KAFKA_BROKER_LIST=[\"kafka:9092\"]
CMD ["node" ,"dist/main.js"]点击复制复制失败已复制


警告

其中的 MICRO_LOG_HOST 字段、 DATABASE_HOST 字段、 REDIS_TOKEN_HOST 字段等写的是Docker网络中的容器名称

KAFKA_BROKER_LIST 字段中的 " 需要使用 \ 来标识。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
19天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
23天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
865 29
|
19天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
24天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
109 2
|
26天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
62 1
|
27天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
18天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
19天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
55 0
|
Linux Docker Windows
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1375 0
|
1天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序