Node项目容器化部署

Node项目容器化部署

  • 一:Dockerfile
  • 二:构建镜像
  • 三:启动容器
  • 四:进入alpine容器

一:Dockerfile

FROM node:8.11.1-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && \
    apk add --no-cache python2 make gcc g++ linux-headers && \
    rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache
WORKDIR /app
ADD exo-browser.tar.gz /app/
RUN npm install
EXPOSE 8112
CMD ["npm","run","start"]

说明:

1:apk安装的为该node项目所需依赖
2:exo-browser.tar.gz为node项目文件
3:CMD后面为启动项目的命令,各个项目的启动命令可能不一样,具体看项目的package.json文件

二:构建镜像

# 在Dockerfile目录下执行
docker build -t browser .		# 后面有个点

三:启动容器

docker run -d \
--name browser \
--restart always \
-p 8112:8112 \
--link redis:redishost \
--link mysql:dbhost \
browser

说明:

1--link redis:redishost  # redis为启动的redis容器名,redishost是个别名,web程序访问mysq数据可以通过其访问
2--link mysql:dbhost	   # mysql为启动的mysql容器名,dbhost是个别名,web程序访问mysq数据可以通过其访问

node项目配置文件中链接数据库为:

$ cat config.js 
exports.redis = {
    host: 'redishost',
    port: '6379',		# redis容器映射到宿主机的端口为10008,而reids容器内的端口为6379。这里直接写redis容器里的端口
    password: 'xxxxxx',
    db:0
};

exports.mysql_master = {
    host: 'dbhost',
    port: '3306',
    user: 'xxxxx',
    password: 'xxxxxx',
    database:'xxxxxx',
};

四:进入alpine容器

docker run -it --rm browser ash

alpine的交互式 Shell是ash不是bash,使用bash会提示not found。

你可能感兴趣的:(Linux运维)