最近经常使用的Docker配置备忘录(NodeJS+Redis+MySQL)
首先
最近我开始经常使用Docker,我会一直制作并丢弃开发环境,并在试验中尝试各种不同的配置。我个人认为这些配置非常有用,所以我将其以备忘的形式记录在这篇文章中。
建筑设计
我将使用NodeJS + Redis + MySQL进行配置。
主要组成如下所示。
利用目的NodeJSwebアプリケーションMySQLユーザー等の主なデータRedisセッション,キャッシュ
我现在使用Redis来管理会话和缓存,但我认为有分离的解决方案。
例如,将缓存存储在DynamoDB中,而将会话管理保存在Redis中,就像这样。
在我自己搭建的环境中,并没有感受到需要这么分离的必要性,所以一切都由Redis来管理。
目录结构
本文将在稍后提供docker-compose.yml的内容,本次操作基于以下目录结构进行。
├── data
│ ├── mysql
│ └── redis
├── docker-compose.yml
├── mysql
│ └── Dockerfile
├── app
│ ├── Dockerfile
│ ├── app.js
│ ├── bin
│ │ └── www
│ ├── node_modules
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── images
│ │ ├── javascripts
│ │ └── stylesheets
│ │ └── style.css
│ ├── routes
│ │ ├── index.js
│ │ └── users.js
│ └── views
│ ├── error.jade
│ ├── index.jade
│ └── layout.jade
└── redis
└── Dockerfile
docker-compose.yml 文件
这次我们将使用Docker-Compose来分别启动NodeJS、MySQL和Redis的容器。
docker-compose的内容如下所示。
version: '3'
services:
app:
build:
context: .
dockerfile: ./app/Dockerfile
depends_on:
- mysql
- redis
ports:
- '3000:3000'
tty: true
container_name: node_app
mysql:
build:
context: .
dockerfile: ./mysql/Dockerfile
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: user
MYSQL_PASSWORD: hogehoge
MYSQL_DATABASE: testdb
volumes:
- ./data/mysql:/var/lib/mysql
container_name: mysql
redis:
build:
context: .
dockerfile: ./redis/Dockerfile
restart: always
volumes:
- ./data/redis:/data
container_name: redis
以下是对services进行配置的内容,包括web应用程序和其他中间件的Docker镜像。
在app部分,有depends_on,它表示与其他的镜像之间的依赖关系。只有解决了依赖关系,app的内容才会运行。
在每个build部分,可以设置使用哪个Dockerfile来构建Docker镜像,所以让我们也把Dockerfile加上。
./app/Dockerfile = ./应用程序/Dockerfile
FROM node:latest
WORKDIR /home/app
COPY ./app/package*.json ./
RUN npm install
COPY ./app ./
EXPOSE 3000
./mysql/Dockerfile 的含义
FROM mysql:5.7
# ADD ./mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
EXPOSE 3306
/redis/Dockerfile的准备文件
FROM redis
# COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
执行
在包含docker-compose.yml文件的目录中执行。
建设
$ docker-compose build
开始
$ docker-compose up -d
执行
# nodeのコンテナ
$ docker-compose exec app bash
# redisのコンテナ
$ docker-compose exec redis bash
# mysqlのコンテナ
$ docker-compose exec mysql bash
以下是未在此处提及的命令,请参考这篇文章。 Docker Compose 命令汇总
最后
我记录了个人可能经常使用的环境,并附上了一些备忘录,如果有错误或更好的方法,请一定告诉我。