From 7288c157879900fe608e46f17945ca4a78402c3b Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 07:45:41 +0000 Subject: [PATCH 01/14] my1 --- compose.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 compose.yaml diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 000000000..72943a16f --- /dev/null +++ b/compose.yaml @@ -0,0 +1 @@ +aaa From a7bfec37b388e78a725fd3b1a87b153270ad3256 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 07:49:17 +0000 Subject: [PATCH 02/14] my2 --- compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose.yaml b/compose.yaml index 72943a16f..5db6fe96a 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1 +1 @@ -aaa +version: "3" From 61b17db553a798049c74c2f9eb4f9db47f76f2f9 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 08:39:11 +0000 Subject: [PATCH 03/14] with my changes --- Dockerfile.python | 6 ++++++ compose.yaml | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 Dockerfile.python diff --git a/Dockerfile.python b/Dockerfile.python new file mode 100644 index 000000000..9abfc5554 --- /dev/null +++ b/Dockerfile.python @@ -0,0 +1,6 @@ +FROM python:3.9-slim +WORKDIR /app +COPY requirements.txt . +RUN pip install -r requirements.txt +COPY main.py . +CMD ["python", "main.py"] diff --git a/compose.yaml b/compose.yaml index 5db6fe96a..c108b6f70 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1 +1,36 @@ version: "3" +include: + - proxy.yaml +services: + + db: + image: mysql:8 + env_file: + - .env + ports: + - 3306:3306 + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-very_strong} + restart: always + networks: + backend: + ipv4_address: 172.20.0.10 + + web: +# image: mypython:1.0.0 + build: + context: . + dockerfile: Dockerfile.python + env_file: + - .env + environment: + - DB_HOST=172.20.0.10 + - DB_USER=${MYSQL_USER:-app} + - DB_PASSWORD=${MYSQL_PASSWORD:-very_strong} + - DB_NAME=${MYSQL_DATABASE:-example} + - DB_TABLE_NAME=${MYSQL_TABLE_NAME:-example} + restart: always + networks: + backend: + ipv4_address: 172.20.0.5 + From cd15fa666014c2fd0b5e547932aeeb8bfead2fcf Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 08:45:43 +0000 Subject: [PATCH 04/14] ignore files --- .dockerignore | 1 + .gitignore | 1 + compose.yaml | 1 - 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 .gitignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..4c49bd78f --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.env diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4c49bd78f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/compose.yaml b/compose.yaml index c108b6f70..ddd173656 100644 --- a/compose.yaml +++ b/compose.yaml @@ -17,7 +17,6 @@ services: ipv4_address: 172.20.0.10 web: -# image: mypython:1.0.0 build: context: . dockerfile: Dockerfile.python From 483eaaa2a29c9bee19570cc5e4b50f3dd616a350 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 13:46:36 +0500 Subject: [PATCH 05/14] Delete .env --- .env | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 0406ce614..000000000 --- a/.env +++ /dev/null @@ -1,5 +0,0 @@ -MYSQL_ROOT_PASSWORD="YtReWq4321" - -MYSQL_DATABASE="virtd" -MYSQL_USER="app" -MYSQL_PASSWORD="QwErTy1234" From 32c150338bb82bc505f43994fb6f4b549c73327e Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 09:02:11 +0000 Subject: [PATCH 06/14] homework --- README.md | 28 ++-------------------------- README_old.md | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 README_old.md diff --git a/README.md b/README.md index 10f9118c8..75ad6daf8 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,6 @@ # shvirtd-example-python +Домашнее задание к занятию 5. «Практическое применение Docker» -Example Flask-application for docker compose training. -## Installation -First, you need to clone this repository: -```bash -git clone https://github.com/netology-code/shvirtd-example-python.git -``` +== Задача 0 == -Now, we will need to create a virtual environment and install all the dependencies: - -```bash -python3 -m venv venv # on Windows, use "python -m venv venv" instead -. venv/bin/activate # on Windows, use "venv\Scripts\activate" instead -pip install -r requirements.txt -python main.py -``` -You need to run Mysql database and provide following ENV-variables for connection: -- DB_HOST (default: '127.0.0.1') -- DB_USER (default: 'app') -- DB_PASSWORD (default: 'very_strong') -- DB_NAME (default: 'example') - -The applications will always running on http://localhost:5000. -To exit venv just type ```deactivate``` - -## License - -This project is licensed under the MIT License (see the `LICENSE` file for details). diff --git a/README_old.md b/README_old.md new file mode 100644 index 000000000..10f9118c8 --- /dev/null +++ b/README_old.md @@ -0,0 +1,30 @@ +# shvirtd-example-python + +Example Flask-application for docker compose training. +## Installation +First, you need to clone this repository: + +```bash +git clone https://github.com/netology-code/shvirtd-example-python.git +``` + +Now, we will need to create a virtual environment and install all the dependencies: + +```bash +python3 -m venv venv # on Windows, use "python -m venv venv" instead +. venv/bin/activate # on Windows, use "venv\Scripts\activate" instead +pip install -r requirements.txt +python main.py +``` +You need to run Mysql database and provide following ENV-variables for connection: +- DB_HOST (default: '127.0.0.1') +- DB_USER (default: 'app') +- DB_PASSWORD (default: 'very_strong') +- DB_NAME (default: 'example') + +The applications will always running on http://localhost:5000. +To exit venv just type ```deactivate``` + +## License + +This project is licensed under the MIT License (see the `LICENSE` file for details). From 041e14736a944c9321b74e38e1841f73a4ec12db Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 09:28:34 +0000 Subject: [PATCH 07/14] change .dockerignore --- .dockerignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.dockerignore b/.dockerignore index 4c49bd78f..a8b62b092 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,11 @@ +compose.yaml .env +.git +.gitignore +haproxy +LICENSE +nginx +proxy.yaml +README.md +README_old.md +schema.pdf From e9d9e0af31624ec6dbe4d200f540737e679cd7e5 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 14:48:40 +0500 Subject: [PATCH 08/14] Update README.md --- README.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 75ad6daf8..53b0966c0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,20 @@ -# shvirtd-example-python -Домашнее задание к занятию 5. «Практическое применение Docker» +# Домашнее задание к занятию 5. «Практическое применение Docker» +## Задача 0 ## -== Задача 0 == +Установлены соответствующие версии пакетов: +``` +damir@dz5:~$ docker --version +Docker version 27.0.3, build 7d4bcd8 +damir@dz5:~$ docker compose version +Docker Compose version v2.28.1 +``` +## Задача 1 ## + +Форк репозитария создан, создан dockerfile (Dockerfile.python), образ собирается, при этом файл requirements.txt копируется в образ для дальнейшей настройки окружения. +В .dockerignore указаны все файлы, не имеющие отношения к сборке образа. + +## Задача 2 (*) ## + +Отчет о сканировании тут From d84d6a064693a1514587846da4221ce61bd2bcc9 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 14:49:06 +0500 Subject: [PATCH 09/14] Add files via upload --- vulnerabilities.csv | 105 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 vulnerabilities.csv diff --git a/vulnerabilities.csv b/vulnerabilities.csv new file mode 100644 index 000000000..3f48760e9 --- /dev/null +++ b/vulnerabilities.csv @@ -0,0 +1,105 @@ +name,link,severity,package,version,fixedBy +CVE-2023-45853,https://avd.aquasec.com/nvd/cve-2023-45853,CRITICAL,zlib1g,1:1.2.13.dfsg-1, +CVE-2023-52425,https://avd.aquasec.com/nvd/cve-2023-52425,HIGH,libexpat1,2.5.0-1, +CVE-2024-26462,https://avd.aquasec.com/nvd/cve-2024-26462,HIGH,libgssapi-krb5-2,1.20.1-2+deb12u2, +CVE-2024-26462,https://avd.aquasec.com/nvd/cve-2024-26462,HIGH,libk5crypto3,1.20.1-2+deb12u2, +CVE-2024-26462,https://avd.aquasec.com/nvd/cve-2024-26462,HIGH,libkrb5-3,1.20.1-2+deb12u2, +CVE-2024-26462,https://avd.aquasec.com/nvd/cve-2024-26462,HIGH,libkrb5support0,1.20.1-2+deb12u2, +CVE-2023-7104,https://avd.aquasec.com/nvd/cve-2023-7104,HIGH,libsqlite3-0,3.40.1-2, +CVE-2023-31484,https://avd.aquasec.com/nvd/cve-2023-31484,HIGH,perl-base,5.36.0-7+deb12u1, +CVE-2023-4039,https://avd.aquasec.com/nvd/cve-2023-4039,MEDIUM,gcc-12-base,12.2.0-14, +CVE-2023-4039,https://avd.aquasec.com/nvd/cve-2023-4039,MEDIUM,libgcc-s1,12.2.0-14, +CVE-2024-2236,https://avd.aquasec.com/nvd/cve-2024-2236,MEDIUM,libgcrypt20,1.10.1-3, +CVE-2024-26458,https://avd.aquasec.com/nvd/cve-2024-26458,MEDIUM,libgssapi-krb5-2,1.20.1-2+deb12u2, +CVE-2024-26461,https://avd.aquasec.com/nvd/cve-2024-26461,MEDIUM,libgssapi-krb5-2,1.20.1-2+deb12u2, +CVE-2024-26458,https://avd.aquasec.com/nvd/cve-2024-26458,MEDIUM,libk5crypto3,1.20.1-2+deb12u2, +CVE-2024-26461,https://avd.aquasec.com/nvd/cve-2024-26461,MEDIUM,libk5crypto3,1.20.1-2+deb12u2, +CVE-2024-26458,https://avd.aquasec.com/nvd/cve-2024-26458,MEDIUM,libkrb5-3,1.20.1-2+deb12u2, +CVE-2024-26461,https://avd.aquasec.com/nvd/cve-2024-26461,MEDIUM,libkrb5-3,1.20.1-2+deb12u2, +CVE-2024-26458,https://avd.aquasec.com/nvd/cve-2024-26458,MEDIUM,libkrb5support0,1.20.1-2+deb12u2, +CVE-2024-26461,https://avd.aquasec.com/nvd/cve-2024-26461,MEDIUM,libkrb5support0,1.20.1-2+deb12u2, +CVE-2023-50495,https://avd.aquasec.com/nvd/cve-2023-50495,MEDIUM,libncursesw6,6.4-4, +CVE-2024-22365,https://avd.aquasec.com/nvd/cve-2024-22365,MEDIUM,libpam-modules,1.5.2-6+deb12u1, +CVE-2024-22365,https://avd.aquasec.com/nvd/cve-2024-22365,MEDIUM,libpam-modules-bin,1.5.2-6+deb12u1, +CVE-2024-22365,https://avd.aquasec.com/nvd/cve-2024-22365,MEDIUM,libpam-runtime,1.5.2-6+deb12u1, +CVE-2024-22365,https://avd.aquasec.com/nvd/cve-2024-22365,MEDIUM,libpam0g,1.5.2-6+deb12u1, +CVE-2024-0232,https://avd.aquasec.com/nvd/cve-2024-0232,MEDIUM,libsqlite3-0,3.40.1-2, +CVE-2024-4603,https://avd.aquasec.com/nvd/cve-2024-4603,MEDIUM,libssl3,3.0.13-1~deb12u1, +CVE-2024-4741,https://avd.aquasec.com/nvd/cve-2024-4741,MEDIUM,libssl3,3.0.13-1~deb12u1, +CVE-2024-5535,https://avd.aquasec.com/nvd/cve-2024-5535,MEDIUM,libssl3,3.0.13-1~deb12u1, +CVE-2023-4039,https://avd.aquasec.com/nvd/cve-2023-4039,MEDIUM,libstdc++6,12.2.0-14, +CVE-2023-50495,https://avd.aquasec.com/nvd/cve-2023-50495,MEDIUM,libtinfo6,6.4-4, +CVE-2023-4641,https://avd.aquasec.com/nvd/cve-2023-4641,MEDIUM,login,1:4.13+dfsg1-1+b1, +CVE-2023-50495,https://avd.aquasec.com/nvd/cve-2023-50495,MEDIUM,ncurses-base,6.4-4, +CVE-2023-50495,https://avd.aquasec.com/nvd/cve-2023-50495,MEDIUM,ncurses-bin,6.4-4, +CVE-2024-4603,https://avd.aquasec.com/nvd/cve-2024-4603,MEDIUM,openssl,3.0.13-1~deb12u1, +CVE-2024-4741,https://avd.aquasec.com/nvd/cve-2024-4741,MEDIUM,openssl,3.0.13-1~deb12u1, +CVE-2024-5535,https://avd.aquasec.com/nvd/cve-2024-5535,MEDIUM,openssl,3.0.13-1~deb12u1, +CVE-2023-4641,https://avd.aquasec.com/nvd/cve-2023-4641,MEDIUM,passwd,1:4.13+dfsg1-1+b1, +CVE-2011-3374,https://avd.aquasec.com/nvd/cve-2011-3374,LOW,apt,2.6.1, +TEMP-0841856-B18BAF,https://security-tracker.debian.org/tracker/TEMP-0841856-B18BAF,LOW,bash,5.2.15-2+b7, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,bsdutils,1:2.38.1-5+deb12u1, +CVE-2016-2781,https://avd.aquasec.com/nvd/cve-2016-2781,LOW,coreutils,9.1-1, +CVE-2017-18018,https://avd.aquasec.com/nvd/cve-2017-18018,LOW,coreutils,9.1-1, +CVE-2022-27943,https://avd.aquasec.com/nvd/cve-2022-27943,LOW,gcc-12-base,12.2.0-14, +CVE-2022-3219,https://avd.aquasec.com/nvd/cve-2022-3219,LOW,gpgv,2.2.40-1.1, +CVE-2011-3374,https://avd.aquasec.com/nvd/cve-2011-3374,LOW,libapt-pkg6.0,2.6.1, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,libblkid1,2.38.1-5+deb12u1, +CVE-2010-4756,https://avd.aquasec.com/nvd/cve-2010-4756,LOW,libc-bin,2.36-9+deb12u7, +CVE-2018-20796,https://avd.aquasec.com/nvd/cve-2018-20796,LOW,libc-bin,2.36-9+deb12u7, +CVE-2019-1010022,https://avd.aquasec.com/nvd/cve-2019-1010022,LOW,libc-bin,2.36-9+deb12u7, +CVE-2019-1010023,https://avd.aquasec.com/nvd/cve-2019-1010023,LOW,libc-bin,2.36-9+deb12u7, +CVE-2019-1010024,https://avd.aquasec.com/nvd/cve-2019-1010024,LOW,libc-bin,2.36-9+deb12u7, +CVE-2019-1010025,https://avd.aquasec.com/nvd/cve-2019-1010025,LOW,libc-bin,2.36-9+deb12u7, +CVE-2019-9192,https://avd.aquasec.com/nvd/cve-2019-9192,LOW,libc-bin,2.36-9+deb12u7, +CVE-2010-4756,https://avd.aquasec.com/nvd/cve-2010-4756,LOW,libc6,2.36-9+deb12u7, +CVE-2018-20796,https://avd.aquasec.com/nvd/cve-2018-20796,LOW,libc6,2.36-9+deb12u7, +CVE-2019-1010022,https://avd.aquasec.com/nvd/cve-2019-1010022,LOW,libc6,2.36-9+deb12u7, +CVE-2019-1010023,https://avd.aquasec.com/nvd/cve-2019-1010023,LOW,libc6,2.36-9+deb12u7, +CVE-2019-1010024,https://avd.aquasec.com/nvd/cve-2019-1010024,LOW,libc6,2.36-9+deb12u7, +CVE-2019-1010025,https://avd.aquasec.com/nvd/cve-2019-1010025,LOW,libc6,2.36-9+deb12u7, +CVE-2019-9192,https://avd.aquasec.com/nvd/cve-2019-9192,LOW,libc6,2.36-9+deb12u7, +CVE-2023-52426,https://avd.aquasec.com/nvd/cve-2023-52426,LOW,libexpat1,2.5.0-1, +CVE-2024-28757,https://avd.aquasec.com/nvd/cve-2024-28757,LOW,libexpat1,2.5.0-1, +CVE-2022-27943,https://avd.aquasec.com/nvd/cve-2022-27943,LOW,libgcc-s1,12.2.0-14, +CVE-2018-6829,https://avd.aquasec.com/nvd/cve-2018-6829,LOW,libgcrypt20,1.10.1-3, +CVE-2011-3389,https://avd.aquasec.com/nvd/cve-2011-3389,LOW,libgnutls30,3.7.9-2+deb12u3, +CVE-2018-5709,https://avd.aquasec.com/nvd/cve-2018-5709,LOW,libgssapi-krb5-2,1.20.1-2+deb12u2, +CVE-2018-5709,https://avd.aquasec.com/nvd/cve-2018-5709,LOW,libk5crypto3,1.20.1-2+deb12u2, +CVE-2018-5709,https://avd.aquasec.com/nvd/cve-2018-5709,LOW,libkrb5-3,1.20.1-2+deb12u2, +CVE-2018-5709,https://avd.aquasec.com/nvd/cve-2018-5709,LOW,libkrb5support0,1.20.1-2+deb12u2, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,libmount1,2.38.1-5+deb12u1, +CVE-2023-45918,https://avd.aquasec.com/nvd/cve-2023-45918,LOW,libncursesw6,6.4-4, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,libsmartcols1,2.38.1-5+deb12u1, +CVE-2021-45346,https://avd.aquasec.com/nvd/cve-2021-45346,LOW,libsqlite3-0,3.40.1-2, +CVE-2024-2511,https://avd.aquasec.com/nvd/cve-2024-2511,LOW,libssl3,3.0.13-1~deb12u1, +CVE-2022-27943,https://avd.aquasec.com/nvd/cve-2022-27943,LOW,libstdc++6,12.2.0-14, +CVE-2013-4392,https://avd.aquasec.com/nvd/cve-2013-4392,LOW,libsystemd0,252.26-1~deb12u2, +CVE-2023-31437,https://avd.aquasec.com/nvd/cve-2023-31437,LOW,libsystemd0,252.26-1~deb12u2, +CVE-2023-31438,https://avd.aquasec.com/nvd/cve-2023-31438,LOW,libsystemd0,252.26-1~deb12u2, +CVE-2023-31439,https://avd.aquasec.com/nvd/cve-2023-31439,LOW,libsystemd0,252.26-1~deb12u2, +CVE-2023-45918,https://avd.aquasec.com/nvd/cve-2023-45918,LOW,libtinfo6,6.4-4, +CVE-2013-4392,https://avd.aquasec.com/nvd/cve-2013-4392,LOW,libudev1,252.26-1~deb12u2, +CVE-2023-31437,https://avd.aquasec.com/nvd/cve-2023-31437,LOW,libudev1,252.26-1~deb12u2, +CVE-2023-31438,https://avd.aquasec.com/nvd/cve-2023-31438,LOW,libudev1,252.26-1~deb12u2, +CVE-2023-31439,https://avd.aquasec.com/nvd/cve-2023-31439,LOW,libudev1,252.26-1~deb12u2, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,libuuid1,2.38.1-5+deb12u1, +CVE-2007-5686,https://avd.aquasec.com/nvd/cve-2007-5686,LOW,login,1:4.13+dfsg1-1+b1, +CVE-2019-19882,https://avd.aquasec.com/nvd/cve-2019-19882,LOW,login,1:4.13+dfsg1-1+b1, +CVE-2023-29383,https://avd.aquasec.com/nvd/cve-2023-29383,LOW,login,1:4.13+dfsg1-1+b1, +TEMP-0628843-DBAD28,https://security-tracker.debian.org/tracker/TEMP-0628843-DBAD28,LOW,login,1:4.13+dfsg1-1+b1, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,mount,2.38.1-5+deb12u1, +CVE-2023-45918,https://avd.aquasec.com/nvd/cve-2023-45918,LOW,ncurses-base,6.4-4, +CVE-2023-45918,https://avd.aquasec.com/nvd/cve-2023-45918,LOW,ncurses-bin,6.4-4, +CVE-2024-2511,https://avd.aquasec.com/nvd/cve-2024-2511,LOW,openssl,3.0.13-1~deb12u1, +CVE-2007-5686,https://avd.aquasec.com/nvd/cve-2007-5686,LOW,passwd,1:4.13+dfsg1-1+b1, +CVE-2019-19882,https://avd.aquasec.com/nvd/cve-2019-19882,LOW,passwd,1:4.13+dfsg1-1+b1, +CVE-2023-29383,https://avd.aquasec.com/nvd/cve-2023-29383,LOW,passwd,1:4.13+dfsg1-1+b1, +TEMP-0628843-DBAD28,https://security-tracker.debian.org/tracker/TEMP-0628843-DBAD28,LOW,passwd,1:4.13+dfsg1-1+b1, +CVE-2011-4116,https://avd.aquasec.com/nvd/cve-2011-4116,LOW,perl-base,5.36.0-7+deb12u1, +CVE-2023-31486,https://avd.aquasec.com/nvd/cve-2023-31486,LOW,perl-base,5.36.0-7+deb12u1, +TEMP-0517018-A83CE6,https://security-tracker.debian.org/tracker/TEMP-0517018-A83CE6,LOW,sysvinit-utils,3.06-4, +CVE-2005-2541,https://avd.aquasec.com/nvd/cve-2005-2541,LOW,tar,1.34+dfsg-1.2+deb12u1, +TEMP-0290435-0B57B5,https://security-tracker.debian.org/tracker/TEMP-0290435-0B57B5,LOW,tar,1.34+dfsg-1.2+deb12u1, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,util-linux,2.38.1-5+deb12u1, +CVE-2022-0563,https://avd.aquasec.com/nvd/cve-2022-0563,LOW,util-linux-extra,2.38.1-5+deb12u1, \ No newline at end of file From 329ac475ee1d584a29e24c17eb03e7e7ca64957e Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 14:49:41 +0500 Subject: [PATCH 10/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53b0966c0..ec96f7977 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ Docker Compose version v2.28.1 ## Задача 2 (*) ## -Отчет о сканировании тут +Отчет о сканировании тут (тут)![https://github.com/Granit16/shvirtd-example-python/blob/next/vulnerabilities.csv] From d28a6c5125dfcfcc609038779617168b40d774b9 Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 14:49:56 +0500 Subject: [PATCH 11/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec96f7977..aa9d726f2 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,4 @@ Docker Compose version v2.28.1 ## Задача 2 (*) ## -Отчет о сканировании тут (тут)![https://github.com/Granit16/shvirtd-example-python/blob/next/vulnerabilities.csv] +Отчет о сканировании тут: https://github.com/Granit16/shvirtd-example-python/blob/next/vulnerabilities.csv From df3cba2ab6de8f713d9f7a05f28fc18db48818cb Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 14:59:43 +0500 Subject: [PATCH 12/14] Update README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index aa9d726f2..9699f183b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Домашнее задание к занятию 5. «Практическое применение Docker» + ## Задача 0 ## Установлены соответствующие версии пакетов: @@ -10,11 +11,30 @@ damir@dz5:~$ docker compose version Docker Compose version v2.28.1 ``` + ## Задача 1 ## Форк репозитария создан, создан dockerfile (Dockerfile.python), образ собирается, при этом файл requirements.txt копируется в образ для дальнейшей настройки окружения. В .dockerignore указаны все файлы, не имеющие отношения к сборке образа. + ## Задача 2 (*) ## Отчет о сканировании тут: https://github.com/Granit16/shvirtd-example-python/blob/next/vulnerabilities.csv + + +## Задача 3 ## + +Файл compose.yaml создан, файл "proxy.yaml" продключен к нему с помощью директивы "include". +Образ приложения web собирается из файла Dockerfile.python, все остальные параметры соответствуют заданию. +Переменные в приложение передаются через файл .env и/или через переменные окружения в разделе environment. + +Приложение db создается в соответсвии с заданными параметрами, переменные для создания пароля root, БД и данных пользователя передаются через файл .env. + +После запуска приложений команда curl выдает ожидаемый результат: +``` +damir@dz5:~/rrr/shvirtd-example-python$ curl -L http://127.0.0.1:8090 +TIME: 2024-07-23 09:55:59, IP: 127.0.0.1damir@dz5:~/rrr/shvirtd-example-python$ +``` + + From b0d7115e684396d1ab0c759aa96e399305d986db Mon Sep 17 00:00:00 2001 From: Granit16 Date: Tue, 23 Jul 2024 15:00:03 +0500 Subject: [PATCH 13/14] Add files via upload --- SQL.png | Bin 0 -> 40592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 SQL.png diff --git a/SQL.png b/SQL.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8a92b93210ee9fd6418cde59d0cf5e251367fd GIT binary patch literal 40592 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 Date: Tue, 23 Jul 2024 15:01:38 +0500 Subject: [PATCH 14/14] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 9699f183b..84453f96a 100644 --- a/README.md +++ b/README.md @@ -37,4 +37,7 @@ damir@dz5:~/rrr/shvirtd-example-python$ curl -L http://127.0.0.1:8090 TIME: 2024-07-23 09:55:59, IP: 127.0.0.1damir@dz5:~/rrr/shvirtd-example-python$ ``` +Результат подключения к контейнур с БД и выполенения запроса представлен на скриншоте: +![alt text](https://github.com/Granit16/shvirtd-example-python/blob/next/SQL.png?raw=true) +