В последнее время, в качестве продвижения к эффективной непрерывной интеграции и непрерывной разработке (CI/CD), я докеризировал все свои приложения и запускал эти приложения внутри контейнеров с помощью Docker
. NodeJS оказался крепким орешком… но, увы, он наконец-то расколот. Вот как мне удалось наконец-то докеризировать и запустить приложение NodeJS RESTFUL.
-
Перейдите к выбранной файловой системе и создайте каталог, а затем перейдите в созданный каталог.
-
Создайте новое приложение nodejs с помощью
npm
илиyarn
, запустив его: -
Добавьте зависимости вашего приложения, такие как Express:
-
Теперь у вас должен быть файл
package.json
, папкиnode_modules
и, возможно, несколько файлов блокировки. Создайте главный файл этой командой в окне терминала / оболочки вашего каталога приложений, выполнив:$ touch <filename>.js
.
5.Отредактируйте файлpackage.json
. Добавьте его, если он не существует, в раздел определения скриптов и сохраните файл.
"scripts": {
"start": "node <mainfile>"
}
- Для докеризации приложения добавьте следующие файлы из терминала в файловую систему каталога app.
$ touch Dockerfile
$ touch docker-compose.yml
. - Откройте и отредактируйте Dockerfile со следующим содержимым.
# obtain the node image
FROM node
# change to the working directory
WORKDIR <directory_name>
#move the package file to the current working directory
COPY package*.json ./
# install the depedencies
RUN npm install
COPY . .
# run the app
CMD [ "node", <mainfile> ]
- Создайте новый каталог в папке app для конфигурации nginx, перейдите в него и создайте новый файл nginx conf.
mkdir nginx && cd nginx && touch default.conf
. - Отредактируйте файл default conf с таким содержимым;
имя окружения
ипорт
должны быть получены и определены в файлеdocker-compose.yml
.
http {
upstream backend {
server <environment_name: port>
}
server {
location / {
proxy_pass http://backend;
}
}
}
- Отредактируйте файл
docker-compose.yml
с таким содержимым.
versions: '3',
services:
nginx_server:
image: nginx #image of the nginx
volumes:
- './nginx/default.conf:/etc/nginx/nginx.conf'
ports:
- '8000:80'
#define the node app container
app:
container_name: <container name>
build:
context: .
dockerfile: Dockerfile #name of the dockerfile we created
ports:
- '3000:80' #docker container port = 3000, host port= 80
environment:
- APPID=3000