Добавить README.md
This commit is contained in:
130
README.md
Normal file
130
README.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# Домашнее задание 19
|
||||
|
||||
## Docker
|
||||
|
||||
Базовые принципы работы с Docker
|
||||
Цель: запустить свой кастомный образ nginx на базе alpine
|
||||
|
||||
### Подготовка
|
||||
|
||||
Созадем новый Dockerfile с помощью vi
|
||||
|
||||
Подготовим свой файл index.html со следующим содержимом
|
||||
|
||||
```bash
|
||||
<!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>
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
Создадим докер файл со следующим содержимом
|
||||
|
||||
```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
|
||||
|
||||

|
||||
|
||||
|
||||
### Разница между контейнером и образом
|
||||
|
||||
1. Образ это заготовленное приложение. В нем содержаться неизменемые данные.
|
||||
2. Контейнер, это запущенный образ! При запуске контейнера из образа, мы ужем можем создать volume, в котором будем храниться все наши данные.
|
||||
|
||||
|
||||
### Можно ли в контейнере собрать ядро
|
||||
|
||||
Нет нельзя, так контейнеры работают с ядром хоста на котором запускаютcя/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user