2026-01-24 19:59:11 +03:00
2026-01-24 19:59:11 +03:00

Домашнее задание 19

Docker

Базовые принципы работы с Docker Цель: запустить свой кастомный образ nginx на базе alpine

Подготовка

Созадем новый Dockerfile с помощью vi

Подготовим свой файл index.html со следующим содержимом

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Моя страница</title>
</head>
<body>

    <h1>Hello world!</h1>
    <p>Моя страница HTML в контейнере my-nginx-docker</p>

</body>
</html>

Создадим докер файл со следующим содержимом

#Исходный образ
FROM nginx:alpine

#Копируем наш html
COPY index.html /usr/share/nginx/html/index.html

#ОТкрываем 80 порт
EXPOSE 80

#Запускаем nginx
CMD ["nginx", "-g", "daemon off;"]

Сборка

Сборка нашего контейнера

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

Посмотрим список образов

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

root@ubuntu-pc:/home/alex/docker# docker run -d -p 8080:80 --name my-nginx my-nginx-docker:latest
ff6a1dca2f2fa58922fdb768e3200026184dd73e98603577e3d17b0a9d6ad7be

Проверяем статус запушенного контейнера.

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

Разница между контейнером и образом

  1. Образ это заготовленное приложение. В нем содержаться неизменемые данные.
  2. Контейнер, это запущенный образ! При запуске контейнера из образа, мы ужем можем создать volume, в котором будем храниться все наши данные.

Можно ли в контейнере собрать ядро

Нет нельзя, так контейнеры работают с ядром хоста на котором запускаютcя/

Description
Docker
Readme 54 KiB