AlexeyKondratyev microservices repository
- Установил docker
- Запустил контейнер
hello-world
командойdocker run hello world
- Посмотрел список запущенных контейнеров командой
docker ps
- Посмотрел список всех контейнеров командой
docker ps -a
- Посмотрел список образов командой
docker images
- Создал и запустил контейнер через
docker run -it ubuntu:16.04 /bin/bash
- Запустил bash в контейнере
docker exec -it <u_container_id> bash
- Создал новый образ из контейнера через
docker commit
- Сравнил чем отличается образ от контейнера
docker inspect <u_container_id>
docker inspect <u_image_id>
- Посмотрел занятое дисковое пространство через
docker system df
- Удалил все контейнеры командой
docker rm $(docker ps -a -q)
- Удалил все образы командой
docker rmi $(docker images -q)
- Создан новый проект в GCP
- Установлен SDK и сконфигурирован gcloud
- Установлен
docker-machine
- Установлен
docker host
на ВМ в GCP черезdocker-machine create --driver google...
- Проверил что docker хост успешно создан
docker-machine ls
- Сравнил выводы
docker run --rm -ti tehbilly/htop
docker run --rm --pid host -ti tehbilly/htop
- Создал файлы
Dockerfile
,mongod.conf
,db_config
,start.sh
- Собрал образ через
docker build -t reddit:latest .
- Просмотрел все образыв том числе и промежуточные
docker images -a
- Запустил контейнер
docker run --name reddit -d --network=host reddit:latest
- Проверил что контейнер запущен
docker-machine ls
- Открыл порт через
gcloud compute firewall-rules create
- Зарегистрировался под alxkondgcptest на docker hub
- Пометил и загрузил образ на docker hub
docker tag reddit:latest alxkondgcptest/otus-reddit:1.0
docker push alxkondgcptest/otus-reddit:1.0
- Запустил запуск контейнера из другой консоли
docker run --name reddit -d -p 9292:9292 alxkondgcptest/otus-reddit:1.0
- Посмотрел логи контейнера
docker logs reddit -f
- Запустил контейнер в интерактивном режиме
docker exec -it reddit bash
- Создал
Dockerfile
для отдельных сервисов - Скачал образ MongoDB
docker pull mongo:latest
- Собрал образы с сервисами
docker build -t alxkondgcptest/post:1.0 ./post-py
docker build -t alxkondgcptest/comment:1.0 ./comment
docker build -t /ui:1.0 ./ui
- Создал отдельную сеть reddit
docker network create reddit
- Запустил контейнеры
docker run -d --network=reddit \
--network-alias=post_db --network-alias=comment_db mongo:latest
docker run -d --network=reddit \
--network-alias=post alxkondgcptest/post:1.0
docker run -d --network=reddit \
--network-alias=comment alxkondgcptest/comment:1.0
docker run -d --network=reddit \
-p 9292:9292 alxkondgcptest/ui:1.0
- Выключил контейнеры docker
kill $(docker ps -q)
- Создал volume
- Перезапустил контейнеры, добавив ключ
-v reddit_db:/data/db
sudo docker run -d --network=reddit \
--network-alias=post_db \
--network-alias=comment_db -v reddit_db:/data/db mongo:latest
sudo docker run -d --network=reddit \
--network-alias=post alxkondgcptest/post:1.0
sudo docker run -d --network=reddit \
--net work-alias=comment alxkondgcptest/comment:1.0
sudo docker run -d --network=reddit \
-p 9292:9292 alxkondgcptest/ui:1.0
- Сравнил none и host драйвера дoкер сети
docker run -ti --rm --network none joffotron/docker-net-tools -c ifconfig
docker run -ti --rm --network host joffotron/docker-net-tools -c ifconfig
- Создал докер bridgе-сеть с именем reddit
docker network create reddit --driver bridge
- Запустил проект с использование bridge-сети
docker run -d --network=reddit mongo:latest
docker run -d --network=reddit alxkondgcptest/post:1.0
docker run -d --network=reddit alxkondgcptest/comment:1.0
docker run -d --network=reddit -p 9292:9292 alxkondgcptest/ui:1.0
- Удалил контейнеры и запустил проект с использованием алиасов
docker run -d --network=reddit --network-alias=post_db --networkalias=comment_db
mongo:latest
docker run -d --network=reddit --network-alias=post alxkondgcptest/post:
1.0
docker run -d --network=reddit --network-alias=comment /
comment:1.0
docker run -d --network=reddit -p 9292:9292 alxkondgcptest/ui:1.0
- Удалил контейнеры и пересоздал подсеть с использование двух подсетей
docker network create back_net --subnet=10.0.2.0/24
docker network create front_net --subnet=10.0.1.0/24
docker run -d --network=front_net -p 9292:9292 --name ui alxkondgcptest/ui:1.0
docker run -d --network=back_net --name comment alxkondgcptest/comment:1.0
docker run -d --network=back_net --name post alxkondgcptest/post:1.0
docker run -d --network=back_net --name mongo_db \
--network-alias=post_db --network-alias=comment_db mongo:latest
Подключил необходимы контейнеры ко второй подсети
docker network connect front_net post
docker network connect front_net comment
- Создал файл
docker-compose.yml
- Развернул новую ВМ в GCP
- Создал необходимые папки
- Создал docker-compose.yml
- Установил GitLab сервере через
docker-compose.yml up -d
- В GitLab настроил группу и проект
- Добавил репозиторий в проект через
git remote add gitlab http://34.76.69.125/homework/example.git
git push gitlab gitlab-ci-1
- Добавил
.gitlab-ci.yml
с тестовым pipleline - Создал и зарегистрировал новый runner
- Изменил pipeline для тестирования reddit
- Добавил
simpletest.rb
для тестов - Проверил что pipeline отрабатывает успешно
- Подготовил новый проект example2
- Изменил пайплайн таким образом чтобы job deploy стал определением окружения dev
- Добавил окружения stage и production
- Добавил ручной способ запуска задач на stage и prod через
when: manual
- Добоавил условие что только изменения с тегом версии могут уйти на stage
- Добавил возможность создания динамических окружений для всех веток кроме ветки master
- Созадал правило для фаервола
gcloud compute firewall-rules create prometheus-default --allow tcp:9090
gcloud compute firewall-rules create puma-default --allow tcp:9292
- Создал рабочю директорию
monitoring/prometheus
- Создал Dockerfile прометиуса
- Создал файл конфигурации для прометиуса prometheus.yml
- Собрал докер-образ прометиуса
docker build -t /prometheus .
- Создал отдельный
docker-compose-monitoring.yml
- Добавил конфиг cAdvisor
- Добавил контейнер графаны в docker-compose-monitoring.yml
- Добавил дашборды графану
- Добавил конфиг на alertmanager
- Запустил сборку образов для каждого сервиса
for i in ui post-py comment; do cd src/$i; bash docker_build.sh; cd -; done
- Создал отдельный docker compose файл для системы логгирования
docker-compose-logging.yml
- Создал
Dockerfile
для fluentd - Создал конфиг для fluentd
fluent.conf
- Собрал образ для fluebtd
docker build -t alxkondgcptest/fluentd
- Поправил env файл
- Зпустил сервисы
docker-compose up -d
- Запустил команду просмотра логов
docker-compose logs -f post
- Добавляем драйвер fluentd в docker-compose.yml для сервиса post
- Поднял сервисы логирования и перезапустил сервисы приложения
docker-compose -f docker-compose-logging.yml up -d
docker-compose down
docker-compose up -d
- Добавил фильтр для парсинга json логов в конфиг fluent.conf
- Создал файлы ...-deploment.yml
- Прочитал
kubenrnetes The Hard Way
и осознал на что я подписался - Создал файлы в kubernates/the_hard_way
- Устанвовил kubectl вместе с minikube