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

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

https://www.docker.com/products/docker-desktop/

---

Офіційні образи докерхаб із нодою. різних версій https://hub.docker.com/_/node/

Краще всього встановлювати версії 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

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

http://127.0.0.1:4000/

а якшо в терміналі ввести 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

Last updated