Docker打包nodejs项目和数据库

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

内容简介:看这篇文章,必须知道基础的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
  • 舒服了

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

查看所有标签

猜你喜欢:

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

Chinese Authoritarianism in the Information Age

Chinese Authoritarianism in the Information Age

Routledge / 2018-2-13 / GBP 115.00

This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具