这个花了点时间,可以正式跑起来了。

加了常用的工具及中文时区,非root帐号。

除了pm2,其它的module放到应用程序本身的node_modules目录下来实现的。

一,3rd_part/node/node:8.16.2-alpine

  1. FROM alpine:3.9
  2.  
  3. ENV NODE_VERSION 8.16.2
  4.  
  5. RUN addgroup -g 1000 node \
  6. && adduser -u 1000 -G node -s /bin/sh -D node \
  7. && apk add --no-cache \
  8. libstdc++ \
  9. && apk add --no-cache --virtual .build-deps \
  10. binutils-gold \
  11. curl \
  12. g++ \
  13. gcc \
  14. gnupg \
  15. libgcc \
  16. linux-headers \
  17. make \
  18. python \
  19. # gpg keys listed at https://github.com/nodejs/node#release-keys
  20. && for key in \
  21. 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
  22. FD3A5288F042B6850C66B31F09FE44734EB7990E \
  23. 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
  24. DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
  25. C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
  26. B9AE9905FFD7803F25714661B63B535A4C206CA9 \
  27. 77984A986EBC2AA786BC0F66B01FBB92821C587A \
  28. 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
  29. 4ED778F539E3634C779C87C6D7062848A1AB005C \
  30. A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
  31. B9E2F5981AA6E0CD28160D9FF13993A75599653C \
  32. ; do \
  33. gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
  34. gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
  35. gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  36. done \
  37. && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \
  38. && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
  39. && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
  40. && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
  41. && tar -xf "node-v$NODE_VERSION.tar.xz" \
  42. && cd "node-v$NODE_VERSION" \
  43. && ./configure \
  44. && make -j$(getconf _NPROCESSORS_ONLN) V= \
  45. && make install \
  46. && apk del .build-deps \
  47. && cd .. \
  48. && rm -Rf "node-v$NODE_VERSION" \
  49. && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
  50.  
  51. ENV YARN_VERSION 1.19.1
  52.  
  53. RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \
  54. && for key in \
  55. 6A010C5166006599AA17F08146C2130DFD2497F5 \
  56. ; do \
  57. gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
  58. gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
  59. gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  60. done \
  61. && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
  62. && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
  63. && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
  64. && mkdir -p /opt \
  65. && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
  66. && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
  67. && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
  68. && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
  69. && apk del .build-deps-yarn
  70.  
  71. COPY docker-entrypoint.sh /usr/local/bin/
  72. ENTRYPOINT ["docker-entrypoint.sh"]
  73.  
  74. CMD [ "node" ]

二,3rd_part/node/p4k_node:8.16.2-alphine

  1. From 3rd_part/node/node:8.16.2-alpine
  2. MAINTAINER P4K
  3.  
  4. 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
  5.  
  6. ENV TIME_ZONE Asia/Shanghai
  7. ENV SIS_HOME=/xxx/appsystems
  8. ENV APP_HOME=${SIS_HOME}/webapps
  9. ENV CONFIG_HOME=${SIS_HOME}/webconfigs
  10. ENV LOG_HOME=${SIS_HOME}/weblogs
  11.  
  12. RUN source /etc/profile.1 \
  13. && npm --registry https://registry.npm.taobao.org install pm2@3.5.1 -g \
  14. && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories\
  15. && apk update \
  16. && apk add --no-cache busybox-extras tzdata \
  17. && echo "${TIME_ZONE}" > /etc/timezone \
  18. && ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
  19. && apk add --no-cache zip unzip curl wget vim bash \
  20. && alias ll='ls -lh' \
  21. && addgroup -g 000 -S docker \
  22. && adduser -u 000 -D -S docker -G docker \
  23. #&& npm --registry http://r.cnpmjs.org install pm2@3.5.1 -g \
  24. && mkdir -p /home/docker \
  25. && mkdir -p /p4k/temp/ \
  26. && mkdir -p ${CONFIG_HOME} \
  27. && mkdir -p ${APP_HOME} \
  28. && mkdir -p ${LOG_HOME} \
  29. && chown -R docker.docker /xxx/ /p4k/ /home/docker \
  30. && chmod 755 -R /xxx/ /p4k/ /home/docker \
  31. && echo "finished!!!!"
  32.  
  33. WORKDIR ${APP_HOME}
  34. USER docker

三,应用

  1. FROM 3rd_part/node/p4k_node:8.16.2-alphine
  2. MAINTAINER P4k
  3. COPY ${PACKAGE_NAME} /p4k/temp/${PACKAGE_NAME}
  4. COPY bootstart.sh /p4k/bootstart.sh
  5. CMD sh /p4k/bootstart.sh

四,bootstart.sh示例

  1. #!/bin/bash
  2. set -ex
  3. config_dir="/xxx/webconfigs"
  4. app_dir="/xxx/webapps"
  5. log_dir="/xxx/weblogs"
  6. war_dir="/p4k/temp/"
  7. mkdir -p "$war_dir/deploy_temp"
  8.  
  9. war_file=`ls ${war_dir}/*.zip`
  10.  
  11. unzip ${war_file} -d $war_dir/deploy_temp
  12. cp -ar $war_dir/deploy_temp/common/* ${app_dir}/
  13.  
  14. if [ ${ENV_NAME}="fat" ] || [ ${ENV_NAME}="uat" ] || [ ${ENV_NAME}="prd" ];then
  15. echo "deploying the environment is:" ${ENV_NAME}
  16. cp_str="${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/* ${config_dir}/"
  17. echo ${cp_str}
  18. cp -ar ${cp_str}
  19. if [ -f ${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/k8s.properties ]; then
  20. cp -ar ${war_dir}/deploy_temp/differ/${ENV_NAME}_k8s/config/k8s.properties $log_dir
  21. fi
  22. else
  23. echo "please give ENV first using '-e' when docker run"
  24. fi
  25.  
  26. rm -rf ${war_dir}
  27. cd $app_dir
  28. pm2 start websocket.js --no-daemon --max-memory-restart 1G

一套从alpine基本镜像到node8.16.2的全套dockerfile的更多相关文章

  1. Docker之Alpine制作镜像且上传至阿里云

    目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...

  2. alpine docker 镜像 时区问题

    1. 时区处理 RUN apk update && apk add curl bash tree tzdata \ && cp -r -f /usr/share/zon ...

  3. alpine基础镜像使用

    关于Alpine的相关知识,可以参考下边的链接 https://yeasy.gitbooks.io/docker_practice/content/cases/os/alpine.html 一. al ...

  4. 使用alpine为基础镜像Q&A

    作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...

  5. 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...

  6. [转] 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    原文地址:https://www.cnblogs.com/tianshifu/p/8127837.html 前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少 ...

  7. 做自己的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 ...

  8. docker镜像ubuntu封装jdk1.8.0【dockerfile】

    github地址:https://github.com/laileman/Docker/Dockerfile/ubuntu-jdk1.8.0_172 1-目录结构 2- dockerfile内容 3- ...

  9. 基于alpine用dockerfile创建的tomcat镜像

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...

随机推荐

  1. 读书笔记_python网络编程3_(3)

    3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将 ...

  2. MySQL 优化 (四)

    参数优化 innodb_log_buffer_size 此参数确定些日志文件所用的内存大小,以M为单位.缓冲区更大能提高性能,对于较大的事务,可以增大缓存大小. innodb_log_buffer_s ...

  3. Day9 - Python基础9 socket基础、粘包

    本节内容: 1.socket的介绍 2.基于tcp的socket 3.基于tcp的问题分析 4.基于udp的socket 5.基于udp的问题分析 6.基于udp的ntp服务 7.基于tcp的远程执行 ...

  4. HttpClient基本功能的使用 Get方式

    一.GET 方法     使用 HttpClient 需要以下 6 个步骤:     1. 创建 HttpClient 的实例     2. 创建某种连接方法的实例,在这里是 GetMethod.在 ...

  5. Node.js使用Nodemailer发送邮件

    除了Python,在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用.Nodemailer包就可以帮助我们快速实现发送邮件的功能. Nodemailer简介 Nodem ...

  6. 自己收集的好玩的JS特效(持续更新)

    放到我自己的服务器上了. 网 scale.html 樱花 sakura.html

  7. 一道常被人轻视的web前端常见面试题(JS)

    本文转载自站长之家,如有侵权问题,请联系我,马上删除. 面试题是招聘公司和开发者都非常关心的话题,公司希望通过它了解开发者的真实水平和细节处理能力,而开发者希望能够最大程度地展示自己的水平(甚至超常发 ...

  8. IT兄弟连 Java语法教程 流程控制语句 分支结构语句3

    3  if-else if-else条件语句 if-else if-else的完整形式如下: if(判断条件A){ A语句块(判断条件A的值为true,执行) }else if(判断条件B){ B语句 ...

  9. IT兄弟连 Java语法教程 算符运算符

    Java提供了丰富的运算符环境.可以将大部分Java运算符划分为4组:算术运算符.位运算符.关系运算符以及逻辑运算符.Java还定义了一些用于处理某些特定情况的附加运算符.本章将介绍除类型比较运算符i ...

  10. [08]ASP.NET Core 中 launchsettings.json 启动配置文件

    ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...