Docker打包nodejs項目和數據庫

看這篇文章,必須知道基礎的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
  • 舒服了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章