一套从alpine基本镜像到node8.16.2的全套dockerfile
这个花了点时间,可以正式跑起来了。
加了常用的工具及中文时区,非root帐号。
除了pm2,其它的module放到应用程序本身的node_modules目录下来实现的。
一,3rd_part/node/node:8.16.2-alpine
- FROM alpine:3.9
- ENV NODE_VERSION 8.16.2
- RUN addgroup -g 1000 node \
- && adduser -u 1000 -G node -s /bin/sh -D node \
- && apk add --no-cache \
- libstdc++ \
- && apk add --no-cache --virtual .build-deps \
- binutils-gold \
- curl \
- g++ \
- gcc \
- gnupg \
- libgcc \
- linux-headers \
- make \
- python \
- # gpg keys listed at https://github.com/nodejs/node#release-keys
- && for key in \
- 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
- FD3A5288F042B6850C66B31F09FE44734EB7990E \
- 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
- DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
- C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
- B9AE9905FFD7803F25714661B63B535A4C206CA9 \
- 77984A986EBC2AA786BC0F66B01FBB92821C587A \
- 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
- 4ED778F539E3634C779C87C6D7062848A1AB005C \
- A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
- B9E2F5981AA6E0CD28160D9FF13993A75599653C \
- ; do \
- gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
- gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
- gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
- done \
- && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \
- && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
- && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
- && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
- && tar -xf "node-v$NODE_VERSION.tar.xz" \
- && cd "node-v$NODE_VERSION" \
- && ./configure \
- && make -j$(getconf _NPROCESSORS_ONLN) V= \
- && make install \
- && apk del .build-deps \
- && cd .. \
- && rm -Rf "node-v$NODE_VERSION" \
- && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
- ENV YARN_VERSION 1.19.1
- RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \
- && for key in \
- 6A010C5166006599AA17F08146C2130DFD2497F5 \
- ; do \
- gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
- gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
- gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
- done \
- && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
- && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
- && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
- && mkdir -p /opt \
- && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
- && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
- && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
- && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
- && apk del .build-deps-yarn
- COPY docker-entrypoint.sh /usr/local/bin/
- ENTRYPOINT ["docker-entrypoint.sh"]
- CMD [ "node" ]
二,3rd_part/node/p4k_node:8.16.2-alphine
- From 3rd_part/node/node:8.16.2-alpine
- MAINTAINER P4K
- RUN echo -e "export http_proxy=http://xxx.local:8080 \nexport https_proxy=http://xxx.local:8080 \nexport ftp_proxy=http://xxx.local:8080 " >>/etc/profile.1
- ENV TIME_ZONE Asia/Shanghai
- ENV SIS_HOME=/xxx/appsystems
- ENV APP_HOME=${SIS_HOME}/webapps
- ENV CONFIG_HOME=${SIS_HOME}/webconfigs
- ENV LOG_HOME=${SIS_HOME}/weblogs
- RUN source /etc/profile.1 \
- && npm --registry https://registry.npm.taobao.org install pm2@3.5.1 -g \
- && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories\
- && apk update \
- && apk add --no-cache busybox-extras tzdata \
- && echo "${TIME_ZONE}" > /etc/timezone \
- && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
- && apk add --no-cache zip unzip curl wget vim bash \
- && alias ll='ls -lh' \
- && addgroup -g 000 -S docker \
- && adduser -u 000 -D -S docker -G docker \
- #&& npm --registry http://r.cnpmjs.org install pm2@3.5.1 -g \
- && mkdir -p /home/docker \
- && mkdir -p /p4k/temp/ \
- && mkdir -p ${CONFIG_HOME} \
- && mkdir -p ${APP_HOME} \
- && mkdir -p ${LOG_HOME} \
- && chown -R docker.docker /xxx/ /p4k/ /home/docker \
- && chmod 755 -R /xxx/ /p4k/ /home/docker \
- && echo "finished!!!!"
- WORKDIR ${APP_HOME}
- USER docker
三,应用
- FROM 3rd_part/node/p4k_node:8.16.2-alphine
- MAINTAINER P4k
- COPY ${PACKAGE_NAME} /p4k/temp/${PACKAGE_NAME}
- COPY bootstart.sh /p4k/bootstart.sh
- CMD sh /p4k/bootstart.sh
四,bootstart.sh示例
- #!/bin/bash
- set -ex
- config_dir="/xxx/webconfigs"
- app_dir="/xxx/webapps"
- log_dir="/xxx/weblogs"
- war_dir="/p4k/temp/"
- mkdir -p "$war_dir/deploy_temp"
- war_file=`ls ${war_dir}/*.zip`
- unzip ${war_file} -d $war_dir/deploy_temp
- cp -ar $war_dir/deploy_temp/common/* ${app_dir}/
- if [ ${ENV_NAME}="fat" ] || [ ${ENV_NAME}="uat" ] || [ ${ENV_NAME}="prd" ];then
- echo "deploying the environment is:" ${ENV_NAME}
- cp_str="${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/* ${config_dir}/"
- echo ${cp_str}
- cp -ar ${cp_str}
- if [ -f ${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/k8s.properties ]; then
- cp -ar ${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/k8s.properties $log_dir
- fi
- else
- echo "please give ENV first using '-e' when docker run"
- fi
- rm -rf ${war_dir}
- cd $app_dir
- pm2 start websocket.js --no-daemon --max-memory-restart 1G
一套从alpine基本镜像到node8.16.2的全套dockerfile的更多相关文章
- Docker之Alpine制作镜像且上传至阿里云
目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...
- alpine docker 镜像 时区问题
1. 时区处理 RUN apk update && apk add curl bash tree tzdata \ && cp -r -f /usr/share/zon ...
- alpine基础镜像使用
关于Alpine的相关知识,可以参考下边的链接 https://yeasy.gitbooks.io/docker_practice/content/cases/os/alpine.html 一. al ...
- 使用alpine为基础镜像Q&A
作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...
- 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...
- [转] 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
原文地址:https://www.cnblogs.com/tianshifu/p/8127837.html 前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少 ...
- 做自己的docker镜像(基于ubuntu:16.04)
基于ubuntu:16.04 apt-get update -y apt-get install sudo -y 换源 sudo apt-get install vim sudo vim /etc/a ...
- docker镜像ubuntu封装jdk1.8.0【dockerfile】
github地址:https://github.com/laileman/Docker/Dockerfile/ubuntu-jdk1.8.0_172 1-目录结构 2- dockerfile内容 3- ...
- 基于alpine用dockerfile创建的tomcat镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
随机推荐
- 读书笔记_python网络编程3_(3)
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...
- MySQL 优化 (四)
参数优化 innodb_log_buffer_size 此参数确定些日志文件所用的内存大小,以M为单位.缓冲区更大能提高性能,对于较大的事务,可以增大缓存大小. innodb_log_buffer_s ...
- Day9 - Python基础9 socket基础、粘包
本节内容: 1.socket的介绍 2.基于tcp的socket 3.基于tcp的问题分析 4.基于udp的socket 5.基于udp的问题分析 6.基于udp的ntp服务 7.基于tcp的远程执行 ...
- HttpClient基本功能的使用 Get方式
一.GET 方法 使用 HttpClient 需要以下 6 个步骤: 1. 创建 HttpClient 的实例 2. 创建某种连接方法的实例,在这里是 GetMethod.在 ...
- Node.js使用Nodemailer发送邮件
除了Python,在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用.Nodemailer包就可以帮助我们快速实现发送邮件的功能. Nodemailer简介 Nodem ...
- 自己收集的好玩的JS特效(持续更新)
放到我自己的服务器上了. 网 scale.html 樱花 sakura.html
- 一道常被人轻视的web前端常见面试题(JS)
本文转载自站长之家,如有侵权问题,请联系我,马上删除. 面试题是招聘公司和开发者都非常关心的话题,公司希望通过它了解开发者的真实水平和细节处理能力,而开发者希望能够最大程度地展示自己的水平(甚至超常发 ...
- IT兄弟连 Java语法教程 流程控制语句 分支结构语句3
3 if-else if-else条件语句 if-else if-else的完整形式如下: if(判断条件A){ A语句块(判断条件A的值为true,执行) }else if(判断条件B){ B语句 ...
- IT兄弟连 Java语法教程 算符运算符
Java提供了丰富的运算符环境.可以将大部分Java运算符划分为4组:算术运算符.位运算符.关系运算符以及逻辑运算符.Java还定义了一些用于处理某些特定情况的附加运算符.本章将介绍除类型比较运算符i ...
- [08]ASP.NET Core 中 launchsettings.json 启动配置文件
ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...