Docker
Docker - команды
Установкаsudo apt install docker.io sudo chmod 666 /var/run/docker.sock
список образов (классов):
docker images
список активных контейнеров (объектов)
docker ps -a-a - историй запусков
запуск образа:
docker run py_app:v0.1Ключи
-d (--detach) - запускает в фоновом режиме контейнер и выводит в консоль ID-контейнера
-p (--publish) - открывает порт(-ы) для докер-контейнера на хосте
-p 8080:8080 - диапазон портов для которых открывают работать приложение на хосте по тегу, что создавали ранее
-rm - выполнить образ и удалить (удобно для скачиваемых)
-it - интерактивный запуск (перенаправление stdin/out из контейнера в родительскую ОС)
docker run --rm --name stepik-task -it ubuntu:14.04
подключение командной строкой к уже работающему приложению
docker exec -it container-name bash
удаление:
rmi - удалить образ (класс)
rm - удалить контейнер (объект)
Задание тэга для образа:
docker tag go:v0.2 pihel/lesson1:v0.2* загрузка в докехаб:
docker push pihel/lesson1:v0.2
Создание образа (класса) из контейнера (объекта)
docker commit название_старое новое(сохранятся команды изменения, но не точка входа)
слои образа (изменения которые вносились)
docker historyидеалогия copy on write - изменения создают новый слой, оригинальные данные остаются в предыдущем слое (страдает производительность при чтении)
примонтировать папку из родительского хоста:
--mount type=bind,source=/tmp,target=/usr -v /tmp:/tmp
хранение данных докера в файле на хосте (место определяем докер)
docker volume create my-volмонтирование -v tratata:/tratata
проброс портов:
-p <port_on_host_machine>:<port_inside_container>
docker run -rm -p 80:80 parseq/stepik-ports-docker
взаимодействие контейнеров через сеть bridge
все контейнеры попадают в 1 сеть bridge и могут взаимодействовать через ип адреса в этой сети
Создание Dockerfile
собираем образ автоматически:docker build . -t py_app:v0.1в образ попадают все файлы рядом с Dockerfile
Делаем dockerfile вручную:
vim Dockerfile FROM python:3.6-alpine3.8 # Скачиваем легковесный образ python-alpine COPY 1.py /app/ # Копируем 1.py с компьютера в дирректорию /app образа (делается 1 раз при сборка) WORKDIR /app # Делаем /app рабочей дирректорией для след. команды ENTRYPOINT ["python3", "/app/1.py"] # Говорим "Питон3, запусти приложение /app/1.py"
операции RUN, COPY, ADD - создает новый слой
по этому несколько однотипных комманд объединяем через &&
изменение слоя вначале приводит к пересборке всех нижних, по этому самое редко используемое должно быть вначале
Копирование образа builder в собираемый:
COPY --from=builder ./app . # Копируем собранное приложение из образа biulder
Kuber
Установка minikube
minikube - для тестовых локальных запусковminikube start --vm-driver=none sudo apt-get install -y conntrack sudo apt-get install -y goДополнительная инструкция по установке minukube
Создание pod из файла
pod - минимальная абстракция для управления куберомминимальное описание пода:
apiVersion: v1 kind: Pod metadata: name: static-web namespace: lesson14 labels: app: goweb #помечает под для перенаправления трафика на него (у нескольких подов может быть 1 label) spec: containers: - name: web #имя контейнера в поде image: pihel/lesson1:v0.2 #образ для контейнера ports: - name: web containerPort: 8080 protocol: TCP
Команды
Запуск:minikube start --vm-driver=docker minikube status
список куберов
kubectl config get-contexts
текущий кубер
kubectl config current-contextnamespae - разделение подов на папки
kubectl get ns
запуск пода:
kubectl apply -f pod.yaml
проброс порта
kubectl port-forward -n lesson14 static-web 8080:8080 --address='51.250.85.224'
проброс портов между подами:
apiVersion: v1 kind: Service metadata: namespace: lesson14 name: my-service spec: selector: app: goweb #проброс портов для пода goweb ports: - protocol: TCP port: 80 targetPort: 8080
задание статичного IP для приложения:
apiVersion: v1 kind: Service metadata: name: my-balancer namespace: lesson14 spec: ports: - port: 80 name: webport targetPort: 8080 selector: app: goweb type: LoadBalancer loadBalancerIP: 10.10.130.145
получить информацию на какой ноде находится под:
kubectl get pod -n lesson14 -o wide
подробное описание пода
kubectl describe pod -n lesson14
логи пода:
kubectl logs -f -n kube-system etcd-minikube
заход в командную строку пода:
kubectl exec -it -n lesson14 pod/static-web -c web sh
информацию о загрузке подов:
kubectl top pods -n lesson14
Передача переменных в pod
передача секретов через переменные окружения:env: - name: SECRETENV valueFrom: secretKeyRef: name: first-secret key: password
передача обычных переменных через data
data: colorgood: purple colorbad: yellow
Helm
- шаблонизация kuber манифестовenv: - name: {{ .Values.secret.name }} valueFrom: secretKeyRef: name: {{ .Values.secret.name }} key: passwordЗадание значени в values.yaml
secret: name: load-secret password: loadqwertyПрименение значений
helm install my-helm-release test-chart -n tst-namespace -f test-chart/values.yaml
Скалирование от нагрузки
горизонтальное скалирование от загрузки цпу:apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: php-apache spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80
Комментариев нет:
Отправить комментарий