前端analysis | What,Why,Who,When,Where,How

《Docker》-koa web应用升级为docker

2020-03-17

mysql

mysql ip获取

1
docker inspect mysqldb

koa

修改db 配置

DockerFile

1
2
3
4
5
6
7
8
9
10
FROM node:10-alpine
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
USER node
RUN yarn
COPY --chown=node:node . .
EXPOSE 3009

CMD [ "npm", "start" ]
  • 需要注意点的是,这里不能使用pm2,后台管理,
1
2
3
4
5
"scripts": {
"start": "./node_modules/.bin/nodemon bin/www",
"dev": "./node_modules/.bin/nodemon bin/www",
"prd": "pm2 start bin/www",
},

.dockerignore

1
2
3
4
5
6
7
node_modules
npm-debug.log
Dockerfile
.dockerignore
yarn-error.log
package-lock.json
yarn.lock

构建镜像

1
docker build -t cheonghu/demo .

启动镜像

1
docker run -d -p 3009:3009 --name demo cheonghu/demo

dns坑

使用dns

  • 修改db

    1
    2
    3
    4
    5
    6
    7
    8
    # 尤其要注意镜像是否支持shell
    database: {
    DATABASE: 'demo',
    USERNAME: 'root',
    PASSWORD: '123456',
    PORT: '3306',
    HOST: 'mysqldb'
    },
  • 修改启动容器的dns查询

    1
    2
      # --dns = IP_ADDRESS:添加DNS服务器到容器的/etc/resolv.conf中,让容器使用该服务器来解析所有不在/etc/hosts中的主机名。
    docker run -d -p 3009:3009 --add-host=mysqldb:172.17.0.2 --name demo cheonghu/demo
  • 容器启动时候指定host

    1
    2
    # -h HOSTNAME或--hostname = HOSTNAME:设置容器的主机名,它会被写到容器内部的/ etc / hostname和/ etc / hosts。
    docker run -it -p 3306:3306 --name mysqldb -h=mysqldb mysql
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏