Docker打包nodejs项目和数据库

栏目: Node.js · 发布时间: 4年前

内容简介:看这篇文章,必须知道基础的docker, 本文只提供思路和部分代码, 不负责教所有的命令必须谨慎操作!三思而后行自动加载sql语句,实现初始化数据库

看这篇文章,必须知道基础的docker, 本文只提供思路和部分代码, 不负责教

所有的命令必须谨慎操作!三思而后行

命令

  • 停止所有运行的容器
docker stop $(docker ps -a -q)
  • 删除所有的容器
docker rm $(docker ps -a -q)
  • 使用docker-compose启动容器
docker-compose up -d
  • 使用docker-compose关闭容器
docker-compose down
  • 查看Log
docker logs ${容器id}

部署mysql

docker-compose

services:
    mysql:
        network_mode: "host"
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        restart: always // 连不上就一直重试
        // depends_on:   选择依赖于某个服务,依赖的服务会先加载
        //    - 'sss'
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3306:33060"

自动加载 sql 语句,实现初始化数据库

mysql的官方镜像中,会在加载时执行docker-entrypoint-initdb.d下面文件夹下的sql文件 利用这个实现初始化

如果 mysql 数据文件夹中有数据,则不会加载sql文件

EGG项目配合docker: 直接被中断

因为 egg-scripts 自己有一套守护进程,去掉 daemon 参数

"start": "egg-scripts start --title=egg-server-broken-chain",

部署NodeJs项目

  • 新建Dockerfile文件
FROM node:10.13-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install -g cnpm
RUN cnpm install --production --silent
COPY . .
EXPOSE 7001
CMD [ "npm", "start"]
  • 在docker-compose.yml中添加信息,用docker-compose管理多个镜像相当方便

最终的docker-compose.yml文件

version: '2'

services:
  broken-chain:
    image: broken-chain
    build: .
    environment:
      NODE_ENV: production
    ports:
      - 7001:7001
    depends_on:
      - "mysql"
    restart: always
  mysql:
    environment:
        MYSQL_ROOT_PASSWORD: "123"
    image: "docker.io/mysql:5.6" 
    volumes:
        - "./mysql/init:/docker-entrypoint-initdb.d/"
    ports:
        - "3306:3306"

发布镜像

  • 登录 Dockerhub
docker login
  • 给镜像打上标签
docker tag ${镜像id} ${用户名}/${镜像名}:${tag标签}
  • push推到dockerhub
docker push  ${用户名}/${镜像名}:${tag标签}

最后

最终,你要把你做的项目给别人用,开箱即用的那种。你需要

  • 新建目录结构
- init
   - xxx.sql //初始化的sql语句
- docker-compose.yml
  • docker-compose.yml如下
version: '2'

services:
  broken-chain:
    image: ${你的用户名}/${你的镜像} // 这回直接拉取你在dockerhub上的镜像
    // build: . 去掉构建步骤
    environment:
      NODE_ENV: production
    ports:
      - 7001:7001
    depends_on:
      - "mysql"
    restart: always
  mysql:
    environment:
        MYSQL_ROOT_PASSWORD: "123"
    image: "docker.io/mysql:5.6" 
    volumes:
        - "./mysql/init:/docker-entrypoint-initdb.d/"
    ports:
        - "3306:3306"
  • 压缩zip给别人

使用命令一键运行( 数据库 + 项目 )

docker-compose up -d
  • 舒服了

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

WebKit技术内幕

WebKit技术内幕

朱永盛 / 电子工业出版社 / 2014-6 / 79.00元

《WebKit技术内幕》从炙手可热的HTML5 的基础知识入手,重点阐述目前应用最广的渲染引擎项目——WebKit。不仅着眼于系统描述WebKit 内部渲染HTML 网页的原理,并基于Chromium 的实现,阐明渲染引擎如何高效地利用硬件和最新技术,而且试图通过对原理的剖析,向读者传授实现高性能Web 前端开发所需的宝贵经验。 《WebKit技术内幕》首先从总体上描述WebKit 架构和组......一起来看看 《WebKit技术内幕》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码