hello-world.bash.docker ps, docker images, docker rm, docker rmi, docker logs.Выполняем обновление репозиториев перед установкой Docker
apt-get update && apt-get upgrade -y
Перед установкой Docker важно убедиться, что система и менеджер пакетов находятся в актуальном состоянии, чтобы избежать конфликтов зависимостей.
apt install -y docker.io
Эта команда устанавливает сам Docker Engine и связанные утилиты (демон dockerd, клиент docker, зависимости и службы).
sudo usermod -aG docker $USER
или
usermod -aG docker $USER (если вы под пользователем root)
По умолчанию для выполнения команд Docker требуется sudo, потому что демон dockerd работает с повышенными привилегиями.Добавление пользователя в группу docker позволяет запускать команды docker без sudo.
newgrp docker
После добавления пользователя в группу docker, чтобы изменения вступили в силу, обычно нужно выйти и войти снова.
Командаnewgrp dockerпозволяет обновить группу немедленно, не выходя из сессии.
Далее выполняем проверку установки
docker version
Позволяет убедиться, что Docker установлен корректно, служба запущена и команда docker доступна без ошибок (и без sudo, если шаг с группой выполнен правильно).
Запускаем наш первый контейнер
docker run hello-world
Обычно docker запускает образ, который уже загружен, либо загружает его сам перед запуском!
Ожидаемый вывод в консоли (он может быть меньше):
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:1408fec50309afee38f3535383f5b09419a0aa62c14e9ec1d6eb390a3cb6c70f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image.
4. The Docker daemon executed a command in the container that printed this message.
5. The container exited.
To try something more ambitious, run:
$ docker run -it ubuntu bash
Проверим, что у нас есть из контейнеров
docker ps -a
Ожидаемый вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago festive_galileo
Список команд для Docker:
docker ps -a # Показать все контейнеры
docker images # Показать образы
docker logs <container_id> # Вывести логи
docker rm "id" # Удалить контейнер
docker rmi hello-world # Удалить образ
Проверьте какие контейнеры и образы у вас есть и удалите их.
Контрольные вопросы:
-it в docker run?ID запущенного контейнера?/etc/hosts для локальных доменов.curl.Подготовим файлы для выполнения работы
mkdir -p ~/web-lab/{apache,nginx}
Создаём родительские каталоги ~/web-lab/apache и ~/web-lab/nginx
cd ~/web-lab
Переходим в каталог ~/web-lab
Создаём файлы index.html для каждого сервиса (Apache и Nginx) и наполняем их фразой: Привет с {ServiceName} в одну команду:
echo '<h1 style="color: orange; text-align: center;">Привет с Apache!</h1>' > apache/index.html
echo '<h1 style="color: green; text-align: center;">Привет с Nginx!</h1>' > nginx/index.html
Запускаем контейнеры:
docker run -d --name apache-site -p 8081:80 \
-v $(pwd)/apache:/usr/local/apache2/htdocs \
httpd:alpine
docker run -d --name nginx-site -p 8082:80 \
-v $(pwd)/nginx:/usr/share/nginx/html \
nginx:alpine
Это полные команды, их прописываем полностью.
Настроим локальные домены
Открываем файл /etc/hosts
И добавляем 2 записи
127.0.0.1 apache.local
127.0.0.1 nginx.local
Проверка в браузере:
Откройте: http://nkestudy.local:8081 → появится оранжевая надпись
Откройте: http://nkestudy.local:8082 → появится зелёная надпись
Проверка в CLI:
apt-get install curl -y # установим утилиту для проверки
curl http://apache.local:8081 | grep Apache
curl http://nginx.local:8082 | grep Nginx
Команды для проверки логов и управления контейнерами:
docker logs my-apache # → логи Apache
docker stop my-nginx # → остановить
docker start my-nginx # → запустить
docker rm -f my-apache my-nginx # → удалить
Контрольные вопросы:
-v?-p?Установим пакеты docker (если ранее не устанавливались)
apt-get install curl -y
curl -fsSL https://get.docker.com | sh
После установки добавим службу в автозагрузку:
systemctl enable --now docker
Скачать образ можно по ссылке
Далее нужно загрузить ISO образ на Proxmox и подключить к ВМ.



Останавливаем ВМ и запускаем снова.
Далее создадим директорию для монтирования /mnt/add_cd
mkdir /mnt/add_cd
Смонтируем подключенный образ (виртуальный привод /dev/sr0) в созданную директорию.
mount /dev/sr0 /mnt/add_cd
Посмотрим содержимое образа командой
ls -lah /mnt/add_cd
total 38K
dr-xr-xr-x 1 root root 256 Nov 22 2019 .
drwxr-xr-x 3 root root 4.0K Nov 1 10:59 ..
dr-xr-xr-x 1 root root 332 Nov 22 2019 docker
dr-xr-xr-x 1 root root 150 Nov 22 2019 playbook
-r-xr-xr-x 1 root root 32K Oct 12 17:22 Users.csv
dr-xr-xr-x 1 root root 220 Nov 22 2019 web
Для этого задания нужна дериктория Docker. Скопируем её в домашнюю директорию пользователя.
cp -r /mnt/add_cd/docker ~/docker/
Просмотрим содержимое скопированной директории командой
ls -lah docker/
total 930M
dr-xr-xr-x 2 root root 4.0K Nov 1 11:02 .
drwx------ 5 root root 4.0K Nov 1 11:02 ..
-r-xr-xr-x 1 root root 318M Nov 1 11:02 mariadb_latest.tar
-r-xr-xr-x 1 root root 269M Nov 1 11:02 postgresql_latest.tar
-r-xr-xr-x 1 root root 2.7K Nov 1 11:02 readme.txt
-r-xr-xr-x 1 root root 344M Nov 1 11:02 site_latest.tar
В файле readme.txt содержится описание веб-приложения, используемых портов и переменных окружения, которые нам понадобятся в дальнейшем, при написании Compose-файла.
Нам понадобится образ веб приложения site_latest.tar и образ СУБД mariadb_latest.tar
Чтобы работать с локальными образами нужно сначала импортировать их в Docker команами:
docker image load -i /root/docker/site_latest.tar
Следом импортируем образ СУБД:
docker image load -i /root/docker/mariadb_latest.tar
Проверяем импортированные образы командой:
docker images
У нас должно быть загшружено 2 наших образа:
REPOSITORY TAG IMAGE ID CREATED SIZE
site latest 015b4b821098 3 weeks ago 353MB
mariadb 10.11 bc52d24721da 2 months ago 327MB
Далее создадим директорию для хранения файлов веб-приложения
mkdir testapp
Переходим в неё:
cd testapp/
Любым текстовым редактором создаём файл docker-compose.yaml, описывающий стек контейнеров для его развертывания:
nano docker-compose.yaml
version: "3.9"
services:
db:
image: mariadb:10.11
container_name: db
restart: always
environment:
MARIADB_ROOT_PASSWORD: 123qweR%
MARIADB_DATABASE: testdb
MARIADB_USER: test
MARIADB_PASSWORD: P@ssw0rd
volumes:
- /root/testapp/db_data:/var/lib/mysql
testapp:
image: site:latest
container_name: testapp
restart: always
depends_on:
- db
ports:
- "8080:8000"
environment:
DB_TYPE: maria
DB_HOST: db
DB_NAME: testdb
DB_PORT: 3306
DB_USER: test
DB_PASS: P@ssw0rd
volumes:
db_data:
Сохраняем файл и выходим из редактора.
Теперь находясь в директории с файлом docker-compose.yaml, можно запустить стек контейнеров командой:
docker compose up -d
[+] Running 3/3
✔ Network testapp_default Created 0.0s
✔ Container db Started 0.3s
✔ Container testapp Started 0.5s
Провеярем запущенные контейнеры командой:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ce6fab69738 site:latest "sh -c 'python3 -m a…" 50 seconds ago Up 50 seconds 0.0.0.0:8080->8000/tcp, [::]:8080->8000/tcp testapp
92aee029ad0b mariadb:10.11 "docker-entrypoint.s…" 50 seconds ago Up 50 seconds 3306/tcp db
Видим, что наши контейнеры работают, идём на Windows в домене и проверяем работу на порту 8080
http://nkestudy.local:8080
Попадаем в веб-приложение testapp.

Для проверки работоспособности создайте несколько записей на сайте.
