From a6fec10363578f51b9bdee4232c6e9844530248b Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 24 Jan 2026 19:59:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..26cc90b --- /dev/null +++ b/README.md @@ -0,0 +1,130 @@ +# Домашнее задание 19 + +## Docker + +Базовые принципы работы с Docker +Цель: запустить свой кастомный образ nginx на базе alpine + +### Подготовка + +Созадем новый Dockerfile с помощью vi + +Подготовим свой файл index.html со следующим содержимом + +```bash + + + + + + Моя страница + + + +

Hello world!

+

Моя страница HTML в контейнере my-nginx-docker

+ + + + +``` + + + +Создадим докер файл со следующим содержимом + +```bash +#Исходный образ +FROM nginx:alpine + +#Копируем наш html +COPY index.html /usr/share/nginx/html/index.html + +#ОТкрываем 80 порт +EXPOSE 80 + +#Запускаем nginx +CMD ["nginx", "-g", "daemon off;"] +``` + +### Сборка + + + +Сборка нашего контейнера +```bash +root@ubuntu-pc:/home/alex/docker# docker build -t my-nginx-docker . +[+] Building 6.5s (7/7) FINISHED docker:default + => [internal] load build definition from Dockerfile 0.0s + => => transferring dockerfile: 152B 0.0s + => [internal] load metadata for docker.io/library/nginx:alpine 2.3s + => [internal] load .dockerignore 0.0s + => => transferring context: 2B 0.0s + => [internal] load build context 0.0s + => => transferring context: 270B 0.0s + => [1/2] FROM docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 3.6s + => => resolve docker.io/library/nginx:alpine@sha256:b0f7830b6bfaa1258f45d94c240ab668ced1b3651c8a222aefe6683447c7bf55 0.0s + => => sha256:e096540205d5d1ab2c2647d716491020d81e3f167a33606665b193d75540857f 20.18MB / 20.18MB 2.5s + => => sha256:0abf9e5672665202e79f26f23ef5dbd12558e2ea51ac32807922ab76fdb24ab0 1.40kB / 1.40kB 0.7s + => => sha256:085c5e5aaa8eb4b957ecf253c74f16a6a5551231de3fb7c3ac74814a6bf17e06 1.21kB / 0.9s + => => sha256:33f95a0f3229b49e777082e801b882b13fcc5b4e389410ce8eb066f4d58c71b9 403B / 403B 0.9s + => => sha256:da7c973d8b92a1555060972c8849a332c93bfe2608c11faeee2098c4cfbe8c3d 953B / 953B 0.4s + => => sha256:567f84da6fbd4287d40a5837485469435c40a81f9a94e98395b6385d3600643a 626B / 626B 0.4s + => => sha256:25f453064fd3e8a9754b6e51b86c637e13203cbfc748fcf73f3c8b2d10816ae3 1.86MB / 1.86MB 0.9s + => => sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 3.86MB / 3.86MB 1.7s + => => extracting sha256:1074353eec0db2c1d81d5af2671e56e00cf5738486f5762609ea33d606f88612 0.1s + => => extracting sha256:25f453064fd3e8a9754b6e51b86c637e13203cbfc748fcf73f3c8b2d10816ae3 0.1s + => => extracting sha256:567f84da6fbd4287d40a5837485469435c40a81f9a94e98395b6385d3600643a 0.0s + => => extracting sha256:da7c973d8b92a1555060972c8849a332c93bfe2608c11faeee2098c4cfbe8c3d 0.0s + => => extracting sha256:33f95a0f3229b49e777082e801b882b13fcc5b4e389410ce8eb066f4d58c71b9 0.0s + => => extracting sha256:085c5e5aaa8eb4b957ecf253c74f16a6a5551231de3fb7c3ac74814a6bf17e06 0.0s + => => extracting sha256:0abf9e5672665202e79f26f23ef5dbd12558e2ea51ac32807922ab76fdb24ab0 0.0s + => => extracting sha256:e096540205d5d1ab2c2647d716491020d81e3f167a33606665b193d75540857f 0.3s + => [2/2] COPY index.html /usr/share/nginx/html/index.html 0.2s + => exporting to image 0.2s + => => exporting layers 0.1s + => => exporting manifest sha256:4d9863fdcda2ef90c8297d712bb7862837b76ef06145a14a7a3a1cd2ac11122d 0.0s + => => exporting config sha256:5f50c708b1e0567e0f93e58342cbfed61f35acf7c486378fa7ffad0e279428b1 0.0s + => => exporting attestation manifest sha256:5b9f4517b95b7095805607d5c3f3c2f47e28b3945ae8fd7c5a96cdaca372fa4c 0.0s + => => exporting manifest list sha256:68717d2616d33e674e56626c1c0e35994f3a2cb21b769dea4addd8e4eca3b65c 0.0s + => => naming to docker.io/library/my-nginx-docker:latest 0.0s + => => unpacking to docker.io/library/my-nginx-docker:latest 0.0s + +``` +Посмотрим список образов +```bash +root@ubuntu-pc:/home/alex/docker# docker image ls +IMAGE ID DISK USAGE CONTENT SIZE EXTRA +my-nginx-docker:latest d2424de4df8e 92.2MB 25.9MB U +```` + +Запускает контейнер из нашего образа. Будем пробрасывать порт 8080 +```bash +root@ubuntu-pc:/home/alex/docker# docker run -d -p 8080:80 --name my-nginx my-nginx-docker:latest +ff6a1dca2f2fa58922fdb768e3200026184dd73e98603577e3d17b0a9d6ad7be +``` + +Проверяем статус запушенного контейнера. + +```bash +root@ubuntu-pc:/home/alex/docker# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ff6a1dca2f2f my-nginx-docker:latest "/docker-entrypoint.…" 34 seconds ago Up 33 seconds 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp my-nginx +``` + +Контейнер запущен! Так же можем открыть в браузере нашу страницу http://127.0.0.1:8080 + +![19_1](images/19_1.png) + + +### Разница между контейнером и образом + +1. Образ это заготовленное приложение. В нем содержаться неизменемые данные. +2. Контейнер, это запущенный образ! При запуске контейнера из образа, мы ужем можем создать volume, в котором будем храниться все наши данные. + + +### Можно ли в контейнере собрать ядро + +Нет нельзя, так контейнеры работают с ядром хоста на котором запускаютcя/ + +