//docker-compose.yml
version: '3'
services:
egg_test:
container_name: server
build:
context: .
dockerfile: Dockerfile
depends_on:
- redis
- mongo
ports:
- "7003:7001"
networks:
- my-server
mongo:
container_name: mongo
image: mongo
volumes:
- /home/DockerCompose/lottery/mongo/db:/data/db # /data/db是container中存放数据位置
restart: always
networks:
- my-server
mongo-express:
links:
- mongo:mongo
image: mongo-express
restart: always
depends_on:
- mongo
networks:
- my-server
ports:
- 8081:8081
environment:
ME_CONFIG_OPTIONS_EDITORTHEME: 3024-night
ME_CONFIG_BASICAUTH_USERNAME: junmoxiao11
ME_CONFIG_BASICAUTH_PASSWORD: junmoxiao11
ME_CONFIG_MONGODB_ADMINUSERNAME: junmoxiao
ME_CONFIG_MONGODB_ADMINPASSWORD: junmoxiao
redis:
container_name: redis
image: redis
restart: on-failure
volumes:
- /home/DockerCompose/lottery/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /home/DockerCompose/lottery/redis/db/:/data/
networks:
- my-server
networks:
my-server:
//DockerFile.yml
# 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:10.13.0
# 配置环境变量
ENV NODE_ENV development
# 这个是容器中的文件目录
RUN mkdir -p /usr/src/app
# 设置工作目录
WORKDIR /usr/src/app
# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /usr/src/app/package.json
# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --production --registry=https://registry.npm.taobao.org
# 拷贝所有源代码到工作目
COPY . /usr/src/app
# 暴露容器端口
EXPOSE 7001
CMD npm run deploy
刚用起 docker 来进行项目的配置和初始化,特留下此配置笔记;
配置过程中的问题:
- 容器之间需要设置统一的 networks 否则无法访问;
- egg 内连接 redis 和 mongodb 时 host 为容器名;
- 启动 egg 服务指令应去掉 --deamon ,否则会访问不到;