我试图创建了一个Node.js的容器
首先
在使用容器创建Node.js后端服务器时,我选择了Node.js(node:10)作为基本映像,并创建了一个Dockerfile。然而,我无法附加到容器,并且不知道如何直接查看其中的配置等信息。
由于遇到麻烦时我想要能够查看Node.js的设置等内容,所以我尝试了在基于Ubuntu的映像上安装Node.js,并创建了一个Dockerfile。
(文章中提供了试运行的相关内容。)
执行环境(前提条件)
【Docker环境设置】
– 使用Ubuntu 20.04 LTS(在GCP上)
– 安装docker 19.03.13版本
我所做的这次的备忘录
为了这次工作创建一个测试文件夹,并将其移动到那里。
$ sudo mkdir ./test_container
$ cd ./test_container
创建Dockerfile
$ sudo nano ./Dockerfile
# ベースイメージ
FROM ubuntu:20.04
# 必要パッケージのインストール
RUN apt update
RUN apt install -y tzdata
RUN apt install -y \
nodejs \
npm
# Nodejs関連のパッケージインストール
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY ./package.json ./
RUN npm install
# index.jsファイルの設置
COPY ./index.js ./
# ポート開放
EXPOSE 8080
CMD ["node", "index.js"]
创建 package.json 文件用于安装 Node.js 模块。
在 npm install 的时候,根据 package.json 的信息进行安装。
$ sudo nano ./package.json
{
"name": "test",
"description": "test",
"version": "0.0.1",
"main": "index.js",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "10"
},
"dependencies": {
"express": "^4.17.1",
"moment-timezone": "^0.5.31",
"body-parser": "^1.19.0"
}
}
创建一个index.js文件
$ sudo nano ./index.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8080;
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/get_test1', function(req, res) {
res.send('GET1パラメータ取得: ' + req.query.get1)
});
app.get('/get_test2', function(req, res) {
res.send('GET2パラメータ取得: ' + req.query.get2)
});
app.post('/post_test1', function(req, res) {
res.send('POST-URLへの送信です。')
});
app.post('/post_test2', function(req, res) {
res.send('POSTパラメータ取得: ' + req.body.data1)
});
app.listen(port)
执行构建
$ docker image build -t test_container:v1 ./
创建并启动容器
$ docker container run -it -d -p 80:8080 --name con1 test_container:v1
确认动作
确认GET请求的动作。连接以下链接并返回已设置的响应即可。
外部IP/get_test1?get1=10
外部IP/get_test2?get2=20
外部IP/get_test1?get1=10
外部IP/get_test2?get2=20
确认 POST 的动作
在本地环境(个人电脑)上创建一个适当的 html 文件,并在浏览器中打开并访问它。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>POSTテスト用</title>
</head>
<body>
<form action="http://[外部IP]/post_tset" method="post">
<input type="hidden" name="data1" value="aiueo">
<input type="submit" value="送信">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>POSTテスト用</title>
</head>
<body>
<form action="http://[外部IP]/post_tset2" method="post">
<input type="hidden" name="data1" value="aiueo">
<input type="submit" value="送信">
</form>
</body>
</html>
附赠
在最初的背景部分中,提到了「无法附加到容器,并且不知道如何直接查看容器内的配置」,但实际上只是在创建容器时,没有成功地用/bin/bash命令覆盖了[CMD]命令。