чорнетка докер
спочатку потрібно встановити докер на комп і залогінитись:
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
Тепер підйом цього проєкту будемо робити в цьому файлі
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
Last updated