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
Tags
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви
