Домашнее задание 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
Разница между контейнером и образом
- Образ это заготовленное приложение. В нем содержаться неизменемые данные.
- Контейнер, это запущенный образ! При запуске контейнера из образа, мы ужем можем создать volume, в котором будем храниться все наши данные.
Можно ли в контейнере собрать ядро
Нет нельзя, так контейнеры работают с ядром хоста на котором запускаютcя/
Description
