Skip to content

Commit 1bcecf1

Browse files
committed
доп. задание по ДЗ-16 (docker)
1 parent b5b64bb commit 1bcecf1

File tree

13 files changed

+157
-13
lines changed

13 files changed

+157
-13
lines changed

homework/16_docker/README.md

+45-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,28 @@
1-
# Заметки к ДЗ-16
1+
# Заметки к ДЗ-16 (Docker)
22

3-
В [Vagrantfile](Vagrantfile) обычная ВМ без каких-либо специфических настроек, но с дополнительной внешней сетью на физическом интерфейсе хоста. Это совершенно необязательно, но сделано для удобства тестирования контейнера с nginx с хоста. Файлы для сборки docker-образа находятся в каталоге [docker](docker).
3+
## Задача:
4+
5+
> Основное задание:
6+
> Создайте свой кастомный образ nginx на базе alpine. После запуска nginx должен
7+
> отдавать кастомную страницу (достаточно изменить дефолтную страницу nginx)
8+
> Определите разницу между контейнером и образом
9+
> Вывод опишите в домашнем задании.
10+
> Ответьте на вопрос: Можно ли в контейнере собрать ядро?
11+
> Собранный образ необходимо запушить в docker hub и дать ссылку на ваш
12+
> репозиторий.
13+
>
14+
> Дополнительное задание:
15+
> Создайте кастомные образы nginx и php, объедините их в docker-compose.
16+
> После запуска nginx должен показывать php info.
17+
> Все собранные образы должны быть в docker hub
18+
19+
## Решение:
20+
21+
## Основное задание
22+
23+
Все файлы по основному заданию расположены в каталоге [basic](basic).
24+
25+
В [Vagrantfile](basic/Vagrantfile) обычная ВМ без каких-либо специфических настроек, но с дополнительной внешней сетью на физическом интерфейсе хоста. Это совершенно необязательно, но сделано для удобства тестирования контейнера с nginx с хоста. Файлы для сборки docker-образа находятся в каталоге [docker](basic/docker).
426

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

@@ -20,40 +42,50 @@ https://www.olimex.com/forum/index.php?topic=4498.0
2042

2143
## Последовательность действий при сборке docker-образа:
2244

23-
Из простецкого [Dockerfile](docker/Dockerfile) собираем образ с именем otus-nginx
45+
Из простецкого [Dockerfile](basic/docker/Dockerfile) собираем образ с именем otus-nginx
2446

25-
```
47+
```bash
2648
docker build -t otus-nginx .
2749
```
2850

2951
Запускаем контейнер на основе образа otus-nginx
3052

31-
```
53+
```bash
3254
docker run --rm -d -p 80:80 otus-nginx
3355
```
3456

3557
Подключиться к этому контейнеру можно так
3658

37-
```
59+
```bash
3860
docker exec -it id_контейнера_или_его_имя bash
3961
```
4062

41-
Логинимся на https://hub.docker.com
63+
Логинимся на [https://hub.docker.com](https://hub.docker.com)
4264

43-
```
65+
```bash
4466
docker login
4567
```
4668

4769
Задаем тэг нашему образу
4870

49-
```
50-
docker tag otus-nginx:latest timlok/otus:otus01
71+
```bash
72+
docker tag 2b205e6d45d3 timlok/otus-nginx:latest
5173
```
5274

5375
Пушим образ
5476

77+
```bash
78+
docker push timlok/otus-nginx:latest
5579
```
56-
docker push timlok/otus:otus01
57-
```
5880

59-
[Ссылка на репозиторий с образом на docker hub.](https://hub.docker.com/r/timlok/otus)
81+
[Ссылка на репозиторий с образом на docker hub.](https://hub.docker.com/r/timlok/otus-nginx)
82+
83+
## Дополнительное задание
84+
85+
Все файлы по дополнительному заданию расположены в каталоге [advanced(*)](advanced(*)). Файлы для сборки docker-образов находятся в каталогах [otus-nginx2](advanced(*)/compose/otus-nginx2) и [otus-php-fpm](advanced(*)/compose/otus-php-fpm).
86+
87+
Для проверки домашнего задания необходимо скачать файл [docker-compose.yml](advanced(*)/compose/docker-compose.yml) и выполнить ```docker-compose up```. После этого нужно отрыть [http://ip_хоста_с_docker-compose](http://ip_хоста_с_docker-compose) или [http://localhost](http://localhost) и можно будет увидеть страницу с информацией о версии php в образе otus-php-fpm.
88+
89+
При этом, в конфиге nginx настроено, что любые символы после [http://ip_хоста_с_docker-compose](http://ip_хоста_с_docker-compose) или [http://localhost](http://localhost) будут открывать страницу с информацией о версии php. Это поведение можно изменить и включить раздельную обработку html и php, отредактировав [конфиг-файл nginx](advanced(*)/otus-nginx2/default-php-fpm.conf). В каждом образе установлен bash.
90+
91+
Ссылки на соответствующие репозитории с образами [timlok/otus-nginx2](https://hub.docker.com/r/timlok/otus-nginx2) и [timlok/otus-php-fpm](https://hub.docker.com/r/timlok/otus-php-fpm).
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
version: '3.3'
2+
services:
3+
nginx:
4+
image: timlok/otus-nginx2:latest
5+
container_name: compose-otus-nginx2
6+
ports:
7+
- "80:80"
8+
networks:
9+
- nginx-phpfpm
10+
11+
php-fpm:
12+
image: timlok/otus-php-fpm:latest
13+
container_name: compose-otus-php-fpm
14+
networks:
15+
- nginx-phpfpm
16+
17+
networks:
18+
nginx-phpfpm:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM docker.io/alpine
2+
RUN apk update \
3+
&& apk upgrade \
4+
&& apk add nginx bash
5+
RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
6+
&& mkdir -p /run/nginx && mkdir -p /var/www \
7+
&& chmod 755 /var/www
8+
COPY index.html /var/lib/nginx/html/index.html
9+
COPY index.php /var/www/index.php
10+
COPY default-php-fpm.conf /etc/nginx/conf.d/default.conf
11+
EXPOSE 80
12+
CMD ["nginx"]
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# This is a default site configuration which will simply return 404, preventing
2+
# chance access to any other virtualhost.
3+
4+
server {
5+
listen 80 default_server;
6+
listen [::]:80 default_server;
7+
8+
location / {
9+
10+
try_files $uri $uri/ /index.php?$query_string;
11+
12+
#for html support uncomment this block and comment string below
13+
# root /var/lib/nginx/html;
14+
# index index.html index.htm;
15+
16+
17+
#comment this for disable automatic open index.php
18+
root $uri/index.php;
19+
}
20+
21+
# PHP-FPM Configuration Nginx
22+
location ~ \.php$ {
23+
root /var/www;
24+
try_files $uri $uri/ =404;
25+
fastcgi_split_path_info ^(.+\.php)(/.+)$;
26+
fastcgi_pass php-fpm:9000;
27+
fastcgi_index index.php;
28+
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
29+
include fastcgi_params;
30+
}
31+
}
32+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
phpinfo();
3+
?>
4+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM docker.io/alpine
2+
COPY index.php /var/www/index.php
3+
RUN apk update \
4+
&& apk upgrade \
5+
&& apk add --no-cache php7 php7-fpm php7-amqp php7-cgi bash \
6+
&& sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php7/php-fpm.conf \
7+
&& sed -i -e "s/listen\s*=\s*127.0.0.1:9000/listen = 9000/g" /etc/php7/php-fpm.d/www.conf \
8+
&& sed -i "s/^listen.allowed_clients/;listen.allowed_clients/g" /etc/php7/php-fpm.d/www.conf \
9+
&& sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php7/php.ini \
10+
&& chmod 755 /var/www \
11+
&& chown root:root -R /var/www \
12+
&& chmod 644 /var/www/index.php
13+
EXPOSE 9000
14+
CMD ["php-fpm7", "--nodaemonize"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
phpinfo();
3+
?>
4+
File renamed without changes.
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Welcome to OTUS-NGINX docker-container!</title>
5+
<style>
6+
body {
7+
width: 35em;
8+
margin: 0 auto;
9+
font-family: Tahoma, Verdana, Arial, sans-serif;
10+
}
11+
</style>
12+
</head>
13+
<body>
14+
<h1>Welcome to OTUS-NGINX docker-container!</h1>
15+
<p>If you see this page, the nginx web server is successfully installed and
16+
working. Further configuration is required.</p>
17+
18+
<p>For online documentation and support please refer to
19+
<a href="http://nginx.org/">nginx.org</a>.<br/>
20+
Commercial support is available at
21+
<a href="http://nginx.com/">nginx.com</a>.</p>
22+
23+
<p><em>Thank you for using nginx.</em></p>
24+
</body>
25+
</html>
26+
27+
File renamed without changes.

0 commit comments

Comments
 (0)