You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 导入`dotenv` 用于设置`process.env`,用于设置端口require("dotenv").config();constexpress=require("express");constcors=require("cors");constapp=express();varcorsOptions={origin: "http://localhost:8081"};app.use(cors(corsOptions));// parse requests of content-type - application/jsonapp.use(express.json());// parse requests of content-type - application/x-www-form-urlencodedapp.use(express.urlencoded({extended: true}));constdb=require("./app/models");db.sequelize.sync();// // drop the table if it already exists// db.sequelize.sync({ force: true }).then(() => {// console.log("Drop and re-sync db.");// });// simple routeapp.get("/",(req,res)=>{res.json({message: "Welcome to jayfate application."});});require("./app/routes/turorial.routes")(app);// set port, listen for requestsconstPORT=process.env.NODE_DOCKER_PORT||8080;app.listen(PORT,()=>{console.log(`Server is running on port ${PORT}.`);});
docker-compose up
# 或者以后台方式运行
docker-compose up -d
运行时日志如下:
$ docker-compose up -d
Creating network "node-mysql_default" with the default driver
Creating volume "node-mysql_db" with default driver
Pulling mysqldb (mysql:5.7)...
5.7: Pulling from library/mysql
...
...
`docker-compose build` or `docker-compose up --build`.
Creating node-mysql_mysqldb_1 ... done
Creating node-mysql_app_1 ... done
可以使用 docker ps 查看当前运行中的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8b12819d371 node-mysql_app "docker-entrypoint.s…" 2 minutes ago Up About a minute 0.0.0.0:6868->8080/tcp, :::6868->8080/tcp node-mysql_app_1
b0d665c00073 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp node-mysql_mysqldb_1
docker images 查看 Docker 镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-mysql_app latest 9d0109ff706c 5 minutes ago 965MB
node 14 e0ab58ea4a4f 6 minutes ago 944MB
mysql 5.7 8cf625070931 6 minutes ago 448MB
Docker提供轻量级容器来运行我们的服务,以便于快速开发/交付软件。在本文我们将探讨如何使用Docker Compose来集成 Nodejs Express 和 MySQL 应用。
Node.js 和 MySQL 与 Docker 概述
我们可以使用 docker compose 在容器中同时提供 nodejs API 服务和 mysql 数据库,具体的步骤为:
目录结构:
docker-nodejs-mysql (main) $ tree . ├── README.md ├── docker-compose.yml └── jayfate-app ├── Dockerfile ├── README.md ├── app │ ├── config │ │ └── db.config.js │ ├── controllers │ │ └── tutorial.controller.js │ ├── models │ │ ├── index.js │ │ └── tutorial.model.js │ └── routes │ └── turorial.routes.js ├── package.json └── server.js
创建 Nodejs 应用程序
在
jayfate-app
运行npm init -y
,并修改package.json
的内容为:jayfate-app/package.json
然后编写
jayfate-app/server.js
然后编写 mysql 数据库的配置
app/config/db.config.js
app/models/index.js
编写
jayfate-app/.env.sample
来设置环境变量jayfate-app/.env.sample
编写 Dockerfile
编写我们的 nodejs 应用的 Dockerfile
jayfate-app/Dockerfile
其中:
FROM
:指定 Node.js的镜像WORKDIR
:工作目录COPY
:COPY package.json .
将 package.json 文件复制到容器中,COPY . .
复制项目中的所有文件。RUN
:在容器内执行命令npm install
安装package.json中的依赖项。CMD
: 镜像构建后运行npm start
编写 Docker Compose 配置
在项目目录的根目录中创建
docker-compose.yml
docker-compose.yml
让我们来实现细节。
docker-compose.yml
version
:将使用 Docker Compose 文件格式版本services
:指定隔离容器中的单独服务,我们有两个服务:app
(Nodejs)和mysqldb
(MySQL 数据库)volumes
:命名卷在重新启动后使我们的数据保持活动状态mysqldb
image
:指定 Docker 镜像restart
:配置重启策略env_file
:指定 .env 的路径environment
:指定环境变量ports
:指定端口volumes
:映射卷文件夹app
depends_on
:指定 app 服务依赖 mysqldb 服务先启动build
:在构建时应用的配置选项,我们在 Dockerfile 中使用相对路径定义environment
:指定Node 应用程序的环境变量stdin_open
及tty
:构建容器后保持终端开启请注意,主机端口 (
LOCAL_PORT
) 和容器端口 (DOCKER_PORT
) 是不同的。docker compose 内部各服务之间通信使用容器端口,我们外部访问使用主机端口。定义 MySQL 的环境变量
使用
.env
定义MySQL的环境变量:.env
运行 Docker Compose 应用
可以通过一下命令来运行 Docker Compose 应用
docker-compose up # 或者以后台方式运行 docker-compose up -d
运行时日志如下:
可以使用
docker ps
查看当前运行中的容器:docker images
查看 Docker 镜像:停止应用程序
通过一下命令停止
docker-compose
服务或者停止
docker-compose
服务并删除所有容器和镜像结论
今天我们已经成功为 MySQL 和 Nodejs 应用程序创建了 Docker Compose 文件。现在我们可以通过非常简单的方式使用 Docker 部署 Nodejs Express 和 MySQL:docker-compose.yml。
源码
可以在Github上查看本文对应的源码
https://www.bezkoder.com/docker-compose-nodejs-mysql/
The text was updated successfully, but these errors were encountered: