👾
Node.js
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Основи Node.js
      • Вступ
      • Модулі Node.js
      • Запуск скриптів модулів в Node.js
      • Структура проєкту, експорт-імпорт, index.js як хаб
      • Модулі CommonJS
      • Модулі MJS
      • Модулі ECMAScript
      • Модулі NPM + базові модулі
      • Глобальні змінні
      • Робота з файлами
    • 2️⃣Консольні додатки
      • Створення консольних додатків
    • 3️⃣Фреймворк Express
      • Про Express
      • Nodemon і запуски скриптів
      • Postman
      • Проміжне ПЗ middleware
      • Передача даних на сервер
      • Роутінг
      • CRUD
      • Налаштування лінтера
    • 4️⃣REST API
      • Змінні оточення
      • Логування
      • REST
      • Методи HTTP
      • CORS
      • Формування URL для REST API
      • Контроллери відсутнього роуту і непередбачуваної помилки
      • Валідація даних Joi
      • Рефакторинг додатку за MVC архітектурою
      • Express автогенератор додатку
    • 5️⃣База даних Mongo.DB
      • Основи MongoDB
      • Налаштування Mongo Atlas
      • Встановлення локальної MongoDB і основні команди
    • 6️⃣ODM Mongoose
      • Mongoose
      • Порядок планування бекенд додатку
      • чорнетка
    • 7️⃣Автентифякація WJT
      • чорнетка
      • чорнетка 2
    • 8️⃣Файли
      • чернетка
    • 9️⃣тестування
      • чернетка
    • 🔟Page 14
      • імейли
    • чорнетка докер
    • чорнетка сокети
    • додаткові матеріали
    • 👷Практика
      • 1️⃣Page 4
      • 2️⃣Page 5
      • 3️⃣Page 6
      • 4️⃣Page 7
      • 5️⃣Page 8
      • 6️⃣Page 9
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія

чорнетка докер

PreviousімейлиNextчорнетка сокети

Last updated 1 year ago

спочатку потрібно встановити докер на комп і залогінитись:

---

Офіційні образи докерхаб із нодою. різних версій

Краще всього встановлювати версії alpine

папку нод модулів навіть не обовʼязково встановлювати. можна видалити папку

зайемо в папек frontend і ініціаліщуємо проект

npm init -y

встановимо лайв сервер

npm i live-server

і пропишемо в пекедж джсон наш скрипт

"start": "live-server index.html"

тепер видалимо папку нод модулів. і створимо файл Dockerfile

Тепер підйом цього проєкту будемо робити в цьому файлі

Dockerfile
FROM node:18-alpine

COPY ./ ./
RUN npm install

CMD ["npm", "start"]

У першому рядку ми вказуємо яка версія образа докера буде вантажитися з серврера докера

копі вказує що і куди копібємо через пробіл. тобто все з папки нашого проекту в образ докера

далі вказується, зо потрібно проінсталювати пакети

і запустити скрипт з командного рядка

Розберемо команди докера.

image - це шаблон. а вже з нього ми можемо запускати контейнери

Команди докера:

# Docker

### Main docker commands list
- _maybe required_ `sudo` _on linux or macos systems_
- _depending on the way of installation_ `docker compose` _also may be replaced with_ `docker-compose`

##### Docker version
`docker -v` - docker version  
`docker compose version` - docker-compose version  

##### List images and containers
`docker images` - list of the images  
`docker rmi <image ID>` - remove image by id  
`docker ps` - list of all running containers  
`docker ps -a` - list of all running and stopped containers  
`docker rm <container ID>` - remove container by id  
`docker system prune` - remove all stopped containers  
`docker logs <container ID>` - logging container  
##### Build image using Dockerfile
- _run it in directory with_ **Dockerfile**

`docker build .` - create image of your project according to the steps provided in Dockerfile  
`docker build -t <image name> .` - create image with tag  

##### Containers
`docker create <image TAG or ID>` - create container from built image (returns ID of new container)  
`docker start <container ID>` - run container  
`docker start -a <container ID>` - run container and watch output  
`docker run <image TAG or ID>` - create container from image and start it (shortcut for docker create + docker start)  
`docker run -p 3000:3000 <image TAG or ID>` - set port to expose  
`docker exec -it <container ID> sh` - run command inside container, for example **sh**  
`docker stop <container ID>` - stop container  
`docker kill <container ID>` - kill container immediately  

##### Docker compose
- _run in directory with_ **docker-compose.yml** _file_

`docker compose up` - build images and run all services  
`docker compose up -d` - same as above, but starts the containers in the background and leaves them running  
`docker compose down` - stop services  

переглянути образи, які є в системі:

docker images

видалити образ

docker rmi <image_id>

Щоб створити контейнер, то пишемо таку команду в терміналі у папці проекту

docker build .

Якщо вказати ключ і назву то надастся назва репозиторію frontend

docker build -t frontend .

Тобто таким чином ми створили шаблон. а тепер можна створити контейнер

docker create frontend

після цього в консолі повернеться айдішник:

03f29eaf5bd08705ea009442f758307e79231239ad8f919c954cb94863c73cd3

Щоб перевірити які контейнери запущені

docker ps

а щоб побачити навіть незапущені контейнери треба додати клоюч

docker ps -a

або

docker ps --all

Запустити контейнер можна командою (де 03f - початок айдішники нашого контейнера)

docker start 03f

тепер запуск команди docker ps вкаже, що контейнер запущено

Щоб зупинити роботу конейнера є дві команди (stop - охайно зупиняє процес, kill - просто рубить процес)

docker stop 03f
docker kill 03f

видалити контейнер можна за допомогою команди rm

docker rm <container_id>

команда run одразу і створює контейнер і його запускає і в цій команді також можна прописати порти на яких проект буде спілкуватися з зовнішнім світом (перший порт той, до якого будемо звертатися, а другий порт - той що всередині контейнера)

docker run -p 4000:8080 frontend

або

docker run -p 4000:8080 e59

І тепер якщо в браузері відкрити це посилання, то нам відкриється фронтенд

а якшо в терміналі ввести docker ps, т покажеться розширена інформація про контейнер (він запущений) його можна kill.

І щнову запустити docker start 52a і перевілити docker ps

також можна зайти в середину нашого контейнера І запустити якусь команду з термінала. Наприклад можемо зайти в командний рядок такою командою. Де it - значить інтерактинве, exec - екзекютів а sh - запуск командного рядка

docker exec -it 52a sh

після цього ми потрапимо в уніксівський термінал і наприклад командою ls можемо передивитися вміст кореневого каталогу проекту (контейнера). Але зазвичай проект ставлять не в корінь, а в папку home наприклад, щоб не будо конфліктів з назвами.

Як цього уникнути розглянемо у побудові докера для бекенду

ПРОПИШЕМО ДОКЕР ФАЙЛИ ДЛЯ БЕКЕНДУ

Створимо Dockerfile

Видаляємо папку node_modules

Щоб вказати конкретну роботу папку вкажемо параметр WORKDIR ітепер при вказанні копіювання буде копіюватися саме в неї. після установки пакетів знову копіюємо всі файли в робочу директорію і запускаємо скрипт.

FROM node:18-alpine

WORKDIR /home

COPY ./package*.json ./

RUN npm install

COPY ./ ./

CMD ["npm", "run", "dev"]

Примітка файди .env також мають бути присутні у проекті тому зо вони теж скопіюються.

Після цього збирають проєкт такими ж командами як і для фронтенду

Бужуємо образ

docker build -t backend .

тепер після встановлення образа ноди створимо і запустимо контейнер

docker run -p 3000:3000 backend

📚
https://www.docker.com/products/docker-desktop/
https://hub.docker.com/_/node/
http://127.0.0.1:4000/