Краткое практическое руководство
В этом проекте будет показано, как создать собственный образ NGINX Docker через AWS Cloud9 с использованием файла Dockerfile и файла docker-compose.yml. Мы отправим этот образ в реестр AWS Elastic Container Registry (ECR). Мы также отправим образ в GitLab и, наконец, настроим конвейер CI/CD в GitLab.
Предпосылки:
- Учетная запись AWS с разрешениями IAM
- AWS Cloud9 IDE с установленным AWS CLI
- Аккаунт GitLab
Сначала войдите в свою консоль AWS и перейдите в сервис Cloud9. Создайте новую среду. Я назову свой Docker NGINX. В качестве платформы выберите сервер Ubuntu. Остальные настройки оставьте по умолчанию. Создайте среду.
Найдите в Интернете свой IP-адрес и скопируйте его. Вернитесь в консоль AWS и найдите сервис EC2. Выберите запущенный экземпляр Cloud9, а затем щелкните свои группы безопасности.
Далее мы собираемся отредактировать входящие правила. Добавьте весь трафик и вставьте свой IP-адрес. Выберите блок cidr с 32-битным адресом. Сохраните правила.
Вернувшись в среду Cloud9, мы настроим нашу файловую систему. Начнем с Dockerfile. Щелкните правой кнопкой мыши первую папку среды и создайте новую папку с именем Docker. В этой папке создайте новый файл. Файл должен называться Dockerfile. Теперь вы должны увидеть маленького кита Docker рядом с файлом.
Давайте продолжим создавать файлы, добавив файл index.html, где мы настроим наш образ, чтобы сообщить нам дату и время развертывания нашего контейнера. Наконец, добавьте файл docker-compose.yml
, чтобы мы могли легко создать образ NGINX.
Перейдите в папку Docker. Docker, платформа контейнеризации с открытым исходным кодом, устанавливается в AWS Cloud9. Чтобы увидеть версию, введите:
docker --version
Далее мы установим docker-compose. Для этого введите:
sudo apt install docker-compose
После установки перейдите к файлу docker-compose. Мы напишем следующее, чтобы создать образ NGINX в контейнере Docker:
Давайте посмотрим, сможем ли мы создать и запустить контейнер. Мы будем использовать «-d» для запуска контейнера в автономном режиме:
docker-compose up -d
Чтобы ваш контейнер заработал, потребуется меньше минуты. Чтобы убедиться, что контейнер запущен:
docker ps
Ваш экран должен выглядеть примерно так:
Теперь давайте свернем локальный хост:
curl localhost:8080
Вы должны увидеть что-то подобное в ответ. Мы собираемся использовать html-контент и изменить его для создания пользовательского веб-сервера NGINX:
Откройте файл index.html. Я введу следующее, особо отметив дату и время создания контейнера, которые будут отображаться:
Теперь перейдем к Dockerfile. Мы добавим следующее:
- Nginx ищет в каталоге
/usr/share/nginx/html
внутри контейнера файлы для обслуживания. По этой причине мы скопируем файлindex.html
в/usr/share/nginx/html
.
Мы будем работать:
docker-compose down
Это удалит контейнер NGINX. Мы отредактируем несколько файлов, прежде чем снова запустить его. Cloud9 поставляется с предустановленными репозиториями. Если вы наберете:
docker images
Вы увидите, что у нас есть несколько ненужных изображений для этого проекта.
Давайте удалим все образы, чтобы начать заново для нашего пользовательского образа NGINX. Следующая команда удалит их все:
docker rmi -f $(docker images -q)
У нас чистый лист. Давайте снова запустим docker-compose, но перед этим отредактируем файл docker-compose, чтобы он выглядел следующим образом:
Раздел «изображения» теперь заменен на «сборка». это будет действовать как наша команда сборки докера, которая получит доступ к файлу Dockerfile. Убедитесь, что вы находитесь в том же каталоге, где находятся все ваши файлы, прежде чем мы запустим docker-compose.
Выполните следующую команду, чтобы создать и запустить новый образ докера:
docker-compose up --build -d
Я могу взглянуть на запущенные контейнеры и изображения:
Теперь вместо команды curl localhost давайте посетим контейнер, используя наш IP-адрес Cloud9. Для этого найдите кнопку «Поделиться» в Cloud9 и скопируйте IP-адрес:
В новой вкладке введите в адресную строку следующее:
http://<Cloud9_IP_Address>:8080
Это должно привести вас к вашему контейнеру:
Давайте отправим наш новый образ в AWS ECR. Найдите сервис Elastic Container Registry в AWS. Создайте репозиторий. Мы оставим настройки видимости как частные. Назовите репозиторий:
Остальные настройки оставьте как есть. Создать это. Ваш репозиторий должен быть создан. Нажмите «Просмотреть push-команды».
Вернувшись в Cloud9, если у вас еще не установлен интерфейс командной строки AWS, введите следующее:
pip3 install awscli
Вам также может понадобиться настроить интерфейс командной строки AWS с помощью:
aws configure
Затем введите следующее со страницы push-команд, команда № 1:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
Вы должны получить следующее:
Далее мы введем команду №3. Мы можем пропустить № 2, так как мы уже построили наш образ:
docker tag docker_nginx:latest xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/docker_nginx:latest
Наконец, мы отправим образ в AWS ECR:
docker push xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/docker_nginx:latest
Ваш экран должен выглядеть так:
Если мы вернемся к AWS ECR, нажмите на свой репозиторий, и вы должны увидеть свое изображение:
GitLab
Теперь, когда наш контейнер зарегистрирован в AWS, почему бы не отправить его в GitLab, где мы можем запустить образ Docker в конвейере.
Войдите в свою учетную запись Gitlab или создайте ее и войдите. Нажмите «Новый проект». Возможно, вам придется создать группу, прежде чем вы сможете создать проект. Моя группа называется michael_docker
. Назовите свой проект и снимите флажок «Инициализировать репозиторий с помощью README».
Прежде чем делать что-либо еще, мы собираемся создать ключи SSH для нашего профиля GitLab. Для этого в Cloud9 введите следующие команды:
ssh-keygen -t rsa -b 2048 -C "<comment>"
Примите предложенное имя файла и каталог после вывода. Далее вам будет предложено ввести парольную фразу.
Чтобы просмотреть открытые SSH-ключи, введите:
cat /home/ubuntu/.ssh/id_rsa.pub
Чтобы просмотреть закрытые SSH-ключи:
cat /home/ubuntu/.ssh/id_rsa
Вернитесь в GitLab, найдите значок своего имени пользователя в правом верхнем углу страницы и нажмите «Редактировать профиль». Затем нажмите «Ключ SSH» в левом столбце. Добавьте открытый SSH-ключ, который вы сгенерировали, в свою учетную запись GitLab и сохраните закрытый SSH-ключ в безопасном месте. Добавьте ключ.
Затем нажмите на свой новый проект и перейдите в левый столбец. Наведите указатель мыши на
«Пакеты и реестры» и нажмите «Реестр контейнеров».
Вы можете увидеть некоторые команды для входа в реестр. Сначала подключим SSH к нашей учетной записи GitLab из Cloud9:
ssh -T [email protected]
Введите парольную фразу, которую вы создали с помощью ключей SSH. Ваш экран должен выглядеть так:
Совет по устранению неполадок:
- Возможно, вам придется ввести следующую команду, чтобы создать папку хранения паролей для ваших открытых ключей SSH, чтобы иметь доступ к вашему реестру GitLab:
sudo apt install pass pass init "<SSH_PUBLIC_KEY>
Теперь введем первую команду на странице реестра контейнеров:
docker login registry.gitlab.com
Введите свое имя пользователя, как оно отображается в GitLab, а затем пароль GitLab.
Я был в каталоге среды, но теперь обязательно переключитесь обратно в папку Docker, если вы еще не там, и введите вторую команду в реестре:
docker build -t registry.gitlab.com/michael_docker/docker_nginx .
Если мы запустим образы докеров, мы увидим все образы, которые мы создали до сих пор:
Наконец, мы отправим образ в наш реестр GitLab:
docker push registry.gitlab.com/michael_docker/docker_nginx
Если мы вернемся в GitLab и обновим реестр контейнеров, мы увидим, что наш образ там:
Поскольку мы зашли так далеко, давайте просто покончим с этим и настроим конвейер CI/CD в GitLab.
Согласно GitLab:
GitLab CI/CD — это инструмент для разработки программного обеспечения с использованием непрерывных методологий.
Конвейеры — это компонент верхнего уровня непрерывной интеграции, доставки и развертывания.
Вот файл .gitlab-ci.yml
, необходимый для создания конвейера CI/CD:
Вернувшись в Cloud9, создайте новый файл в папке Docker с именем .gitlab-ci.yml
. Вставьте приведенный выше код в файл Cloud9:
Далее введите глобальные пользовательские команды из GitLab:
Далее введите команды ниже.
Если мы обновим наш репозиторий GitLab, мы должны увидеть, что конвейер создается, а затем в конечном итоге проходит!
Если мы откроем конвейер, вы увидите, как он строится, пока не добьется успеха.
Вы можете удалить свои контейнеры и образы из Cloud9. Для этого используйте следующие команды:
docker rm -f $(docker ps -a -q) docker rmi -f $(docker images -q)
Поздравляем. Вы создали собственный образ Docker и отправили его в AWS ECR и GitLab. Вы также построили конвейер CI/CD в GitLab.