Docker. Склерозник
Склерозник по Docker. Установка, работа с образами и контейнерами, создание своего образа для нескольких платформ swarm и т.д.
Как установить Docker CE на Ubuntu ?
1. Смотрим как устанавливать Docker на его сайте: https://docs.docker.com/install/ 2. Ищем нужную нам OS (Ubuntu): https://docs.docker.com/install/linux/docker-ce/ubuntu/ 3. Удаляем старую ерсию (если есть):
sudo apt-get remove docker docker-engine docker.io
4. Устанавливаем все что нужно перед установкой Docker CE:
Update the apt package index:
sudo apt-get update
Install packages to allow apt to use a repository over HTTPS:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
Add Docker\\u2019s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.
sudo apt-key fingerprint 0EBFCD88
Use the following command to set up the stable repository.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5. Устанавливаем Docker CE
sudo apt-get update
sudo apt-get install docker-ce
6. Проверяем работу Docker
sudo docker ps
sudo docker run hello-world
Как установить Docker на Raspberry Pi?
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
Команды Docker в примерах
Поиск образа
docker search nginx
docker search nginx -- filter stars=3 --no-trunc busybox
Список скачанных образов
docker images
Удаление образа
docker rmi nginx
Список всех контейнеров
docker ps -a
Список запущенных контейнеров
docker ps
Скачать образ nginx
sudo docker pull nginx
Запустить контейнер как демон (-d) из образа nginx, назвать docker-nginx, пробросить порт 80 наружу как 8888, папку /var/docker-nginx/html прокинуть в контейнер как /usr/share/nginx/html,
а папку var/docker-nginx/conf.d как /etc/nginx/conf.d
sudo docker run --name docker-nginx -p 8888:80 -v /var/docker-nginx/html:/usr/share/nginx/html -v /var/docker-nginx/conf.d:/etc/nginx/conf.d -d nginx
Перезапустить контейнер
sudo docker restart docker-nginx
Смотреть что делает контейнер
docker logs -f docker-nginx
Подключится к работающему контейнеру (6ee6223a3ce3 - ID контейнера или имя)
docker exec -i -t 6ee6223a3ce3 bash
Остановить контейнер
sudo docker stop docker-nginx
Переименование контейнера
docker rename infinite infinity
Обновление контейнера
docker update --cpu-shares 512 -m 300M infinite
Пауза (приостановка всех процессов контейнера)
docker pause nginx
Снятие паузы
docker unpause nginx
Блокировка (до остановки контейнера)
docker wait nginx
Удалить контейнер
docker rm docker-nginx
Создаем сеть в docker
docker network create mynet
Список сетей
docker network ls
Удаление сети
docker network rm mynet
Запустить контейнеры в сети:
docker run --name mongodb1 --net=mynet -d -v /var/mongo/db1:/data/db -p 27017:27017 --restart unless-stopped mongo --replSet "rs0"
docker run --name mongodb2 --net=mynet -d -v /var/mongo/db2:/data/db -p 27018:27017 --restart unless-stopped mongo --replSet "rs0"
docker run --name mongodba --net=mynet -d -v /var/mongo/dba:/data/db -p 27019:27017 --restart unless-stopped mongo --replSet "rs0"
Подключение работающего контейнера к сети
docker network connect mynet nginx
Отключение контейнера от сети
docker network disconnect mynet nginx
Как собрать свой образ (Image) ?
Создаем файл с именем Dockerfile (пример):
FROM ubuntu:latest
MAINTAINER ubackend
RUN apt-get update
RUN apt-get install python3 -y
RUN apt install python3-pip -y
RUN pip3 install pymongo
ADD ./ /root/u-backend/
EXPOSE 8888
CMD /usr/bin/python3 /root/u-backend/test.py
Собираем image командой:
sudo docker build . -t ubackend
Как поднять собственный Registry Server для Docker ?
sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2
Заливаем собранный образ на свой Registry Server
sudo docker tag ubackend:latest localhost:5000/ubackend
sudo docker push localhost:5000/ubackend
Список Image на своем Registry Server:
sudo docker images localhost:5000
Скачать Image со своего Registry Server:
sudo docker pull localhost:5000/ubackend:latest
Удалить Image со своего Registry Server:
sudo docker image remove localhost:5000/ubackend:latest
Сохранить образ в tar файл
docker save ubackend-auth > ubackend-auth.tar
Загрузить образ из tar файла
docker load < ubackend-auth.tar
Как поднять Docker Swarm ?
Если хочется, устанавливаем docker-machine (на Linux):
base=https://github.com/docker/machine/releases/download/v0.15.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
На ведущем хосте выполняем команду инициализации:
docker swarm init --advertise-addr 192.168.0.101
Команда должна вернуть примерно такой ответ:
andre@andre-desktop:~$ docker swarm init --advertise-addr 192.168.0.101 Swarm initialized: current node (wbrl1qtgnpu6hzacuvchpc0gt) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-5tfzb50bvqx8is04va4ob2yrorbozjf2aqynismq8j4m3klnsz-agg97k98r9oqga5ft6vimpkgd 192.168.0.101:2377 To add a manager to this swarm, run `docker swarm join-token manager` and follow the instructions.Дальше на каждой следующей ноде, которую надо включить в swarm, выполняем команду, которая выдана при инициализации swarm:
docker swarm join --token SWMTKN-1-5tfzb50bvqx8is04va4ob2yrorbozjf2aqynismq8j4m3klnsz-agg97k98r9oqga5ft6vimpkgd 192.168.0.101:2377
Проверяем состояние нод:
docker node ls
Пример ответа:
andre@andre-desktop:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION wbrl1qtgnpu6hzacuvchpc0gt * andre-desktop Ready Active Leader 18.06.1-ce rl4t7ngjhyy6kyzl4vhl3k21h raspberrypi Ready Active 18.06.1-ce zut817u4pcucxqlxvhzrzkoa7 raspberrypi Ready Active 18.06.1-ceСоздаем сервис:
docker service create --replicas 1 --name helloworld alpine ping docker.com
Проверяем состояние сервисов
docker service ls
пример ответа:
andre@andre-desktop:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS jhmnkafmnrsl helloworld replicated 1/1 alpine:latestИнспектируем :) Сервис:
docker service inspect --pretty helloworld
Пример ответа:
andre@andre-desktop:~$ docker service inspect --pretty helloworld ID: jhmnkafmnrslhf0ydcsnrljo8 Name: helloworld Service Mode: Replicated Replicas: 1 Placement: UpdateConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-first RollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: Image: alpine:latest@sha256:7043076348bf5040220df6ad703798fd8593a0918d06d3ce30c6c93be117e430 Args: ping docker.com Init: false Resources: Endpoint Mode: vipСписок сервисов:
docker service ps helloworld
МАСШТАБИРУЕМ Сервис! (ВОТ ОНО - ГЛАВНОЕ):
docker service scale helloworld=5
Вот они, родимые:
docker service ps helloworld
portainer
portainer - web морда для управлени Docker и Docker Swarm. Устанавливаем:
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Как собрать один образ для разных платформ и/или ОС ?
У меня в Swarm есть две платформы amd, arm. Для работы скриптов на Python нужно собирать для каждой платформы свой образ. Но использовать для каждой из платформ образ с отдельным именем жутко не удобно. Особенно если у Вас swarm и в нем ноды на разных платформах или с разными операционными системами. 1. Собираем образы для разных платформ и заливаем на Docker hub. Можно так: docker_build_linux-amd.bash:
#!/bin/bash
CONTAINER=avislab/test:backend-linux-amd
docker rmi $CONTAINER
docker build . -t $CONTAINER
docker login
docker push $CONTAINER
Соответственно на ARM платформе собираем свой образ (Dockerfile может быть разным)
docker_build_linux-arm.bash:
#!/bin/bash
CONTAINER=avislab/test:backend-linux-arm
docker rmi $CONTAINER
docker build . -t $CONTAINER
docker login
docker push $CONTAINER
Создаем и заливаем манифест:
docker manifest create avislab/test:backend avislab/test:backend-linux-amd avislab/test:backend-linux-arm --amend
docker manifest annotate --arch amd avislab/test:backend avislab/test:backend-linux-amd
docker manifest annotate --arch arm --variant armv7l avislab/test:backend avislab/test:backend-linux-arm
docker manifest push avislab/test:backend --purge
Теперь на любых платформах используем avislab/test:backend. Для AMD скачается avislab/test:backend-linux-arm, а для ARM скачается avislab/test:backend-linux-arm
Успехов.
Дивись також:
- Справочник команд по Docker. Как поднять Swarm
- MongoDB Replica Set в Docker
- Справочник команд MongoDB
- Как настроить NGNIX Loader balancer + SSL в Docker
- Технология Push notifications. Как сделать на сайте
- Пример Websocket сервера и Websocket клиента. Пример простого чата на websocket
- Как использовать Memcached в Python
- Как использовать Radis в Python
Недавні записи
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
Tags
battery soldering java-script ngnix adc rs-232 flask esp8266 watchdog web exti solar mongodb rtc sms pwm usart books ethernet smd git websocket meteo css python dc-dc displays led ssd1306 eeprom gpio barometer max1674 mpx4115a brushless motor mpu-6050 timer sensors remap servo bldc atmega pmsm 3d-printer flash encoder examples dma raspberry-pi tim ssd1331 piezo mpu-9250 rfid eb-500 foc bme280 gps nvic dht11 bluetooth hih-4000 stm32 st-link docker uart avr html wifi bmp280 bkp nodemcu options usb lcd programmator i2c capture
Архіви