创建Web项目的Docker镜像实例需要以下步骤:
1. 创建Dockerfile
首先,在本地计算机的一个新目录中创建一个名为Dockerfile
的文件。该文件应包含以下内容:
FROM node:latest
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
这段代码表示该镜像将从最新的Node.js映像中构建。可更改以构建不同版本的Node.js。
接下来,设置所有下面启动的命令都在/app
目录下。然后,将本地计算机中的所有package*.json
文件复制到容器中,并安装所有依赖项。接下来,复制项目中的所有其他文件并开放端口3000。最后,启动该应用程序(在这种情况下,启动npm start脚本)。
2. 构建镜像
经过第1步后,需要使用以下命令在本地计算机中构建镜像:
docker build -t my-web-app .
该命令将读取Dockerfile
并将其中设置的指令一步一步执行。最终结果是将本地计算机的代码打包并打包到镜像中。因为我们指定了-t
参数,所以我们可以为该镜像指定名称。在此示例中,我们将该镜像命名为“my-web-app”。最后,在命令的末尾使用 .
表示当前目录中的Dockerfile。
3. 运行容器
接下来,可以使用以下命令将该镜像在容器中运行:
docker run -p 3000:3000 my-web-app
该命令将启动一个新容器并将其映射到主机的端口3000上。也就是说,我们正在将容器内部的端口3000映射到主机上的同一端口。最后,我们传递“my-web-app”作为参数以指定要启动的镜像名称。
示例1:创建Express.js应用程序的Docker镜像
现在,我们可以开始使用示例。让我们假设我们正在使用Express.js框架构建Web应用程序。首先,需要确保计算机上安装了Node.js和npm。然后,可以使用以下命令在本地计算机中从Express应用程序生成器中生成新的Express应用程序:
npx express-generator my-express-app
该命令将创建一个新的Express应用程序,并将其安装在名为“my-express-app”的目录中。
接下来,导航到该目录并根据第1步中的说明创建一个新的Dockerfile。这个Dockerfile可以看起来像这样:
FROM node:latest
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
接下来,使用以下命令在本地计算机中构建Docker镜像:
docker build -t my-express-app .
最后,使用以下命令在Docker容器中运行该镜像:
docker run -p 3000:3000 my-express-app
在容器运行之后,可以在Web浏览器中查看应用程序。如果一切正常,则应该能够在http://localhost:3000
中看到应用程序的默认欢迎页面。
示例2:使用MongoDB进行数据存储的Docker镜像
在本示例中,假设我们要创建一个使用MongoDB进行数据存储的Web应用程序。首先,需要创建一个具有所需文件的新目录。该目录应包含以下文件:
- app.js - Node.js应用程序
- package.json - 页面依赖项清单
- Dockerfile - Docker镜像构建文件
负责与MongoDB数据库进行交互的应用程序通常位于app.js
文件中,而package.json
文件中的依赖项则包括MongoDB和其他有用的包。此示例的package.json
文件可以看起来像这样:
{
"name": "my-mongodb-app",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"mongodb": "^4.1.3",
"express": "^4.17.2"
},
"devDependencies": {},
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC"
}
接下来,需要创建与第一步中所显示的相同的Dockerfile
。将该文件放到新目录中。
现在,需要将应用程序复制到该目录中。将app.js
文件和package.json
文件复制到该目录中。
下一步,需要更新app.js
文件以使用MongoDB数据库。以下是修改后的app.js
文件示例:
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();
const url = 'mongodb://mongodb:27017/myproject';
const client = new MongoClient(url, { useUnifiedTopology: true });
let db;
client.connect(err => {
if (err) {
console.log(err);
process.exit(1);
}
db = client.db('myproject');
app.listen(3000, () => console.log('Listening on port 3000...'));
});
app.get('/users', (req, res, next) => {
db.collection('users').find().toArray((err, users) => {
if (err) {
console.log(err);
return res.status(500).send(err);
}
res.send(users);
});
});
请注意,这个版本的app.js文件是使用express和MongoClient的功能更新的。将通过URL连接到名为“ mongodb”的MongoDB实例。最后,该应用程序启动Express服务器并在端口3000上进行监听。/users
路由处理程序将查询users
集合中的所有文档并将其返回到客户端。
最后,需要使用第二步中所显示的命令在Docker容器中构建和运行该Web应用程序。以下是运行此命令的示例:
docker build -t my-mongodb-app .
docker run -p 3000:3000 --link mongodb:mongodb my-mongodb-app
请注意,我们还添加了一个--link
选项以链接到已在Docker容器中运行的MongoDB容器。通过将mongodb
作为别名添加到MongoDB容器的链接命令中,我们可以将两个容器进行链接。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:创建Web项目的Docker镜像实例讲解 - Python技术站