🚒 БъздаванС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ: Основи Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Dockerfile ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ

🚒 БъздаванС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ: Основи Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Dockerfile ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ

Π’ послСднитС Π³ΠΎΠ΄ΠΈΠ½ΠΈ Docker ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅, тСствамС ΠΈ пускамС софтуСр. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° контСйнСризацията ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС прилоТСния Π·Π° сСкунди, нСзависимо ΠΎΡ‚ срСдата.

Ако всС ΠΎΡ‰Π΅ Π½Π΅ си ΠΏΠΎΡ‚ΠΎΠΏΠΈΠ» Ρ€ΡŠΡ†Π΅ Π² свСта Π½Π° Docker, Ρ‚Π°Π·ΠΈ статия Π΅ ΠΈΠ΄Π΅Π°Π»Π½Π°Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅:

  • ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Docker ΠΈ Π·Π°Ρ‰ΠΎ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠΎΡ‰Π΅Π½,
  • ΠΊΠ°ΠΊ Π΄Π° създадСш собствСн Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‡Ρ€Π΅Π· Dockerfile,
  • ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΡƒΠΏΡ€Π°Π²Π»ΡΠ²Π°Ρˆ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ с ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

Π“ΠΎΡ‚ΠΎΠ² Π»ΠΈ си? Π”Π° Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅! πŸ› οΈ


Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅

πŸ” Какво Π΅ Docker?

На ΠΊΡ€Π°Ρ‚ΠΊΠΎ: Docker Π΅ инструмСнт Π·Π° създаванС, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΈ стартиранС Π½Π° прилоТСния Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈ си ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠ°, самостоятСлна систСма. Π’ нСя сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ всички зависимости Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅, самият ΠΊΠΎΠ΄. Всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ хост ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°.

πŸ†š ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ vs Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини

Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠ°ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (Docker)Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини
Π Π°Π·ΠΌΠ΅Ρ€Π›Π΅ΠΊΠΈ (MB)Π’Π΅ΠΆΠΊΠΈ (GB)
Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ΠœΠΈΠ»ΠΈΡΠ΅ΠΊΡƒΠ½Π΄ΠΈΠœΠΈΠ½ΡƒΡ‚(ΠΈ)
БподСлянС Π½Π° OS ядроДаНС
Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡΠ’ΠΈΡΠΎΠΊΠ°, Π½ΠΎ Π½Π΅ пълнаПълна

βš™οΈ Как Ρ€Π°Π±ΠΎΡ‚ΠΈ Docker?

Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°:

  • Docker ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – Ρ‚ΠΎΠ²Π° Π΅ командният интСрфСйс (CLI), с ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ.
  • Docker Π΄Π΅ΠΌΠΎΠ½ (docker daemon) – ΡΠ»ΡƒΡˆΠ° Π·Π° заявки ΠΈ управлява ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΌΡ€Π΅ΠΆΠΈ.
  • Docker Hub – ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ‚Π΅Π³Π»ΠΈΠΌ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‡Π²Π°ΠΌΠ΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ.

🧱 Какво С Dockerfile?

Dockerfile Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ тСкстов Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° инструкции Π·Π° създаванС Π½Π° Docker ΠΎΠ±Ρ€Π°Π·.

Ако ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π΅ Ρ‚ΠΎΡ€Ρ‚Π°Ρ‚Π°, Dockerfile Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ‚Π°. Π’ Π½Π΅Π³ΠΎ описвамС:

  • коя Π±Π°Π·ΠΎΠ²Π° ОБ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°,
  • ΠΊΠ°ΠΊΠ²ΠΈ зависимости Π΄Π° сС инсталират,
  • какъв Ρ„Π°ΠΉΠ» Π΄Π° сС ΠΊΠΎΠΏΠΈΡ€Π°,
  • ΠΊΠ°ΠΊΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π° сС изпълни ΠΏΡ€ΠΈ стартиранС.

πŸ“¦ БъздаванС Π½Π° прост Dockerfile

НСка създадСм прост Node.js ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ сСрвира β€žHello, Docker!β€œ Π½Π° ΠΏΠΎΡ€Ρ‚ 3000.

1. Бъздай Ρ„Π°ΠΉΠ» app.js:

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello, Docker!');
});

server.listen(3000);
console.log('Server running on http://localhost:3000');

2. Бъздай Dockerfile:

# ИзползвамС официалния Node ΠΎΠ±Ρ€Π°Π·
FROM node:18-alpine

# Π—Π°Π΄Π°Π²Π°ΠΌΠ΅ дирСкторията Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°
WORKDIR /app

# ΠšΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅
COPY app.js .

# ИзлагамС ΠΏΠΎΡ€Ρ‚ 3000
EXPOSE 3000

# Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°
CMD ["node", "app.js"]

3. Бъздай Docker ΠΎΠ±Ρ€Π°Π·:

docker build -t hello-docker .

4. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

docker run -p 3000:3000 hello-docker

πŸŽ‰ ΠŸΠΎΡΠ΅Ρ‚ΠΈ http://localhost:3000 ΠΈ Ρ‰Π΅ видиш "Hello, Docker!"

🧭 ПолСзни Docker команди

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ някои основни, Π½ΠΎ супСр Π²Π°ΠΆΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

πŸ“„ Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±Ρ€Π°Π·ΠΈ

КомандаОписаниС
docker build -t ΠΈΠΌΠ΅ .Бъздава Docker ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ Dockerfile
docker imagesБписък с Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ
docker rmi ΠΈΠΌΠ΅/IDΠ˜Π·Ρ‚Ρ€ΠΈΠ²Π° ΠΎΠ±Ρ€Π°Π·

🧳 Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

КомандаОписаниС
docker run ΠΈΠΌΠ΅Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
docker run -d -p 80:80 ΠΈΠΌΠ΅Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° Π·Π°Π΄Π΅Π½ ΠΏΠ»Π°Π½
docker psПоказва Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
docker ps -aПоказва всички (Π²ΠΊΠ». спрСни)
docker stop IDΠ‘ΠΏΠΈΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
docker rm IDΠ˜Π·Ρ‚Ρ€ΠΈΠ²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

πŸ› οΈ Π‘ΡŠΠ²Π΅Ρ‚ΠΈ ΠΏΡ€ΠΈ създаванС Π½Π° Dockerfile

  1. Минимални Π±Π°Π·ΠΎΠ²ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ alpine вСрсии. По-ΠΌΠ°Π»ΠΊΠΈ = ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ.
  2. Използвай .dockerignore Ρ„Π°ΠΉΠ» – ΠΊΠ°ΠΊΡ‚ΠΎ .gitignore, Π·Π° Π΄Π° Π½Π΅ ΠΊΠΎΠΏΠΈΡ€Π°Ρˆ излишни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
  3. ΠšΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° слоСвС – ΠΊΠΎΠΏΠΈΡ€Π°ΠΉ package.json ΠΈ инсталирай зависимости ΠΏΡ€Π΅Π΄ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° цСлия ΠΊΠΎΠ΄.
  4. Най-накрая CMD – Ρ‚ΠΎΠ²Π° Π΅ послСдната ΡΡ‚ΡŠΠΏΠΊΠ° Π² ΠΎΠ±Ρ€Π°Π·Π°.

πŸ“‚ ΠŸΡ€ΠΈΠΌΠ΅Ρ€: docker-compose Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

Ако искаш Π΄Π° ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρˆ няколко ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€. Node.js + MongoDB), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ docker-compose.yml.

version: '3.9'
services:
  app:
    build: .
    ports:
      - "3000:3000"
  mongo:
    image: mongo
    ports:
      - "27017:27017"

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉ с:

docker-compose up

πŸ“Š Как Π΄Π° слСдиш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅

Π’ΠΈΠΆ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅:

docker logs container_name

Π’Π»Π΅Π· Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

docker exec -it container_name sh

ИдСално, Π°ΠΊΠΎ искаш Π΄Π° дСбъгваш ΠΈΠ»ΠΈ просто Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡˆ ΠΊΠ°ΠΊΠ²ΠΎ става Π²ΡŠΡ‚Ρ€Π΅.

πŸ’‘ Малки Ρ…ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ правят голяма Ρ€Π°Π·Π»ΠΈΠΊΠ°

  • Назовавай ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ с --name, Π·Π° ΠΏΠΎ-лСсно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.
  • Използвай --rm, Π°ΠΊΠΎ искаш Π²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° слСд спиранС.
  • Използвай volumes Π·Π° сподСлянС Π½Π° ΠΊΠΎΠ΄ с хоста:
    docker run -v $(pwd):/app myimage

🧼 Как Π΄Π° ΠΏΠΎΡ‡ΠΈΡΡ‚ΠΈΡˆ систСмата

Π‘ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Docker ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΅ΠΌΠ° доста място. Π•Ρ‚ΠΎ няколко ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° почистванС:

docker system prune          # Π˜Π·Ρ‚Ρ€ΠΈΠ²Π° Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ
docker volume prune          # Π˜Π·Ρ‚Ρ€ΠΈΠ²Π° Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ volumes
docker image prune           # Π˜Π·Ρ‚Ρ€ΠΈΠ²Π° Π½Π΅Π½ΡƒΠΆΠ½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ

Използвай Π³ΠΈ с Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! πŸ˜…


πŸ›‘οΈ Бигурност ΠΈ Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

  1. Никога Π½Π΅ Π²Π³Ρ€Π°ΠΆΠ΄Π°ΠΉ сСкрСти (API ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅) Π² Dockerfile!
  2. НС стартирай прилоТСнията ΠΊΠ°Ρ‚ΠΎ root – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ ΠΏΡ€Π°Π²Π°.
  3. Π‘ΠΊΠ΅Π½Π΅Ρ€ΠΈ ΠΊΠ°Ρ‚ΠΎ Trivy – ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚ уязвимости Π² ΠΎΠ±Ρ€Π°Π·ΠΈ.

πŸ”— ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

project/
β”œβ”€β”€ app.js
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ .dockerignore
└── docker-compose.yml

Всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠ°Ρ‡Π΅Π½ΠΎ Π² GitHub ΠΈ сподСлСно с Π΅ΠΊΠΈΠΏΠ° Ρ‚ΠΈ. Docker ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ΠΎ.


🎯 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Docker Π½Π΅ Π΅ просто ΠΌΠΎΠ΄Π΅Ρ€Π½Π° тСхнология – Ρ‚ΠΎΠ²Π° Π΅ Π½Π°Ρ‡ΠΈΠ½ Π½Π° мислСнС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°. Позволява Ρ‚ΠΈ:

  • Π΄Π° създаваш стабилни срСди,
  • Π΄Π° намалиш ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ,
  • ΠΈ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρˆ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΈ сигурно.

НСзависимо Π΄Π°Π»ΠΈ си DevOps, backend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ просто Снтусиаст, Docker Ρ‰Π΅ Ρ‚ΠΈ спСсти Π²Ρ€Π΅ΠΌΠ΅, усилия ΠΈ главоболия.


πŸ” Π‘ΠΏΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡ€ΠΎΠ±Π²Π°ΠΉ ΠΈ участвай Π² общността!

Ако Ρ‚Π°Π·ΠΈ статия Ρ‚ΠΈ бСшС ΠΏΠΎΠ»Π΅Π·Π½Π° – сподСли я с ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΈ приятСли. Подобна Π±Π°Π·Π° ΠΎΡ‚ знания Π΅ Π±Π΅Π·Ρ†Π΅Π½Π½Π°. πŸ™Œ

Docker общността растС ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ сС Π½Π°ΠΌΠΈΡ€Π° ΠΊΠΎΠΉ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅. ΠŸΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΠΈ сС Π² Reddit, Stack Overflow, Discord ΠΈΠ»ΠΈ просто Π² любимия си Ρ„ΠΎΡ€ΡƒΠΌ.

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π²

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π²

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π² e собствСник Π½Π° уСбсайта urocibg.eu. Π’ΠΎΠΉ Π½Π°ΠΌΠΈΡ€Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠ²Π° Π΄Π° ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ ΠΈ Π½Π°ΠΉ-слоТнитС тСхничСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π‘Π΅Π³Π°ΡˆΠ½Π°Ρ‚Π° ΠΌΡƒ Ρ†Π΅Π» Π΅ Π΄Π° пишС лСсни Π·Π° слСдванС статии, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° Π½Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π²ΠΈ Π·Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅Ρ‚ΠΎ Π½Π° статията! Ако Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…Ρ‚Π΅ информацията Π·Π° ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π°Ρ€ΠΈΡ‚Π΅ посрСдством Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ: