4. Настройка ресурсов контейнеров docker
Введение
Целью данной лабораторной работы является изучение взаимодействия контейнеров docker с операционной системой.
Создание общей папки для контейнера
Скачайте образ docker, содержащий средства разработки под linux:
sudo docker pull gcc
Запустите этот контейнер указав следующие ключи:
-it -v /home/osboxes/server:/home/osboxes
Ключ -v
создает общую папку, доступную на виртуальной машине по пути /home/osboxes/server
, а в контейнере по пути /home/osboxes
.
На физическом компьютере или виртуальной машине создайте файл hello.c
со следующим содержимым:
#include "stdio.h"
main () {
#if defined(_WIN32)
printf("hello, windows\n");
#elif defined(__linux__)
printf("hello, linux\n");
#elif defined(__APPLE__)
printf("hello, Apple\n");
#elif defined(BSD)
printf("hello, BSD\n");
#endif
}
Скомпилируйте и запустите эту программу на физическом компьютере и в контейнере. Для запуска в контейнере нужно перейти в его терминале в общую папку, запустить компилятор gcc
, и запустить результат компиляции командой ./a.out
.
Скопируйте любую лабораторную работу из 1-го семестра по программированию в расшаренную папку, скомпилируйте ее в контейнере и запустите.
Проброс портов
Скачайте образ gitbucket (сервер системы контроля версий):
sudo docker pull gitbucket/gitbucket
При запуске контейнера ключ -it
указывать не нужно, нужно указать ключи -v
и -p
.
Создайте на физической машине папку для хранения данных gitbucket и сделайте ее с помощью ключа -v
общей с папкой контейнера /gitbucket
(через общую папку на виртуальной машине).
Ключ -p
нужен для проброса портов. Он имеет формат:
-p 𝘩𝘰𝘴𝘵_𝘱𝘰𝘳𝘵:𝘤𝘰𝘯𝘵𝘢𝘪𝘯𝘦𝘳_𝘱𝘰𝘳𝘵
Сервер в контейнере запускается на порту 8080, этот порт следует указать в 𝘤𝘰𝘯𝘵𝘢𝘪𝘯𝘦𝘳_𝘱𝘰𝘳𝘵
. 𝘩𝘰𝘴𝘵_𝘱𝘰𝘳𝘵
– это порт, на котором будет доступен сервер на виртуальной машине (его нужно пробросить на физическую машину).
Дождитесь загрузки сервера (в терминале должен появиться текст Server:main: Started
). В браузере компьютера зайдите на сервер gitbucket, аутентифицируйтесь под логином root
с паролем root
. Создайте репозиторий системы контроля версий с настройками по-умолчанию.
Перегрузите виртуальную машину, перезапустите контейнер и убедитесь, что учетная запись и репозиторий на сервере сохранились.
Взаимодействие контейнеров
По-умолчанию, контейнеры docker подключаются к виртуальной компьютерной сети через которую и осуществляется их взаимодействие. Каждый контейнер в этой сети имеет свой адрес.
В этом пункте мы будем с контейнера со средствами разработки выкладывать результаты на сервер контроля версий. Для этого нужно узнать его адрес (порт сервера уже известен – 8080). Для этого:
- с помощью команды
sudo docker ps
определите имя контейнера с сервером. - с помощью команды
sudo docker network inspect bridge
посмотрите конфигурацию виртуальной сети. В этой конфигурации в разделеContainers
найдите контейнер с нужным именем. В параметрах этого контейнера будет примерно такая строчка"IPv4Address": "172.17.0.3/16"
, где172.17.0.3
– интересующий нас адрес контейнера сервера.
Далее создадим локальную копию репозитория и выложим ее на сервер. В терминале контейнера gcc
выполните следующие действия:
-
настройте пользователя системы контроля версий:
git config --global user.email "𝘺𝘰𝘶@𝘦𝘹𝘢𝘮𝘱𝘭𝘦.𝘤𝘰𝘮" git config --global user.name "𝘠𝘰𝘶𝘳 𝘕𝘢𝘮𝘦"
-
создайте и перейдите в каталог для локального репозитория:
mkdir repo cd repo
-
создайте репозиторий и привяжите его к репозиторию на сервере:
touch README.md git init git add README.md git commit -m "first commit" git remote add origin http://𝘴𝘦𝘳𝘷𝘦𝘳_𝘪𝘱:𝘴𝘦𝘳𝘷𝘦𝘳_𝘱𝘰𝘳𝘵/git/root/𝘳𝘦𝘱𝘰-𝘯𝘢𝘮𝘦.git git push -u origin master
Вместо 𝘳𝘦𝘱𝘰-𝘯𝘢𝘮𝘦
укажите имя созданного ранее репозитория. Выполнение последней команды потребует ввода имени пользователя и пароля на сервере системы контроля версий. Используйте тот же логин, что и ранее (root:root
).
Перейдите в браузере на страницу репозитория и убедитесь, что в нем появился файл README.md
.