00 (How to docker) - Kazakov01/Docker-1 GitHub Wiki

Предисловие

Установить docker, docker-machine и virtualbox. Docker и docker-machine могут быть установлены с использованием системы управления пакетами Brew, а VirtualBox с использованием Managed Software Center.

Проверка

Проверить версию докера можно с помощью следующей команды:

docker -v



Задания

01. Создай виртуалку (виртуальную машину) используя docker-machine и VirtualBox драйвер и назвать её Char.

документация docker-machine create

Решение

docker-machine create --driver virtualbox Char

Объяснение

При создании виртуалки используется флаг --driver чтобы указать на каком провайдере (VirtualBox, DigitalOcean, AWS и т.д.) создать машину и аргумент (Char), указывающий имя созданной машины

Проверка

docker-machine ls — Команда ls пытается подключиться к каждому хосту параллельно. Если данный хост не отвечает менее чем через 10 секунд, команда ls сообщает, что этот хост находится в состоянии тайм-аута.



02. Получи IP адрес виртуалки с именем Char.

документация docker-machine ip

Решение

docker-machine ip Char

Объяснение

Такая команда, прими как должное

Проверка

Получить айпишники других машин ранее созданных, например

$ docker-machine ip dev

192.168.99.104

или

$ docker-machine ip dev dev2

192.168.99.104

192.168.99.105



03. Определи переменные, необходимые для виртуальной машины Char, в общем окружении терминала, чтобы без ошибок запускать команду docker ps. Нужно исправить все четыре переменные среды с помощью одной команды, и не разрешается использовать встроенную в оболочку оболочку для установки этих переменных вручную.

документация docker ps

документация docker machine env

Решение

eval $(docker-machine env Char)

Объяснение

При использовании команды docker-machine env Char можно наблюдать следующий вывод

export DOCKER_TLS_VERIFY="1"

export DOCKER_HOST="tcp://192.168.99.100:2376"

export DOCKER_CERT_PATH="/Users/vbrazhni/.docker/machine/machines/Char"

export DOCKER_MACHINE_NAME="Char"

Run this command to configure your shell:

eval $(docker-machine env Char)

Проверка

docker-machine -ls вывод:

PHOTO NEEDED

Now the ACTIVE column of Char has * instead of -.



04. Получи (склонируй) контейнер hello-world из Docker Hub, где он доступен.

документация docker pull

Решение

docker pull hello-world

Объяснение

Я скажу то, что для тебя не новость. Мир не такой уж солнечный и приветливый. Это очень опасное и жесткое место. И если только ты дашь слабину, он опрокинет тебя с такой силой, что больше уже не встанешь. Ни ты, ни я, ни кто на свете не валит так сильно, как проверки душных людей. Совсем не важно как ты сдаешь, а важно какую душную проверку ты выдерживаешь! Как движешься вперед, будешь идти вперед, иди, если с испуга не свернешь... Только так побеждают! Если знаешь чего ты стоишь, иди и бери свое, но будь готов проверки сдавать. А не плакаться и говорить: я ничего не сдал из-за него, из-за нее, из-за кого то. Так делают трусы, а ты не трус!!! Быть этого не может!



05. Запусти контейнер hello-world и убедись, что он печатает приветственное сообщение.

документация docker run

Решение

docker run hello-world

Объяснение

Такова команда, сынок, ничего не поделать

Проверка

Запустить другие контейнеры, предварительно их стянув pull-ом.



06. Запусти контейнер nginx, доступный в Docker Hub, в качестве фоновой задачи. Он должен называться overlord, иметь возможность перезапускаться самостоятельно, а его порт 80 должен быть подключен к порту 5000 Char. Можешь проверить правильность контейнера, нажав сюда или написав вручную http://:5000 в своем веб-браузере.

документация docker run

Решение

docker run -d -p 5000:80 --name overlord --restart=always nginx

Объяснение

docker run --help:

-d, --detach — запускает контейнер в фоновом режиме и печатает ID контейнера.

--name string — даёт имя контейнера.

-p, --publish list — публикует порт(ы) контейнера на хосте.



07. Получи внутренний IP-адрес контейнера overlord без запуска его оболочки и в одну команду.

документация docker inspect

Решение

docker inspect -f '{{.NetworkSettings.IPAddress}}' overlord

Объяснение

Также можно отключить docker по умолчанию, чтобы проверить вывод команды docker, чтобы получить только значение IP-адреса:

docker inspect -f '{{ .NetworkSettings.IPAddress }}' e350390fd549 172.17.0.2 docker inspect --help:

-f, --format string — форматирует вывод, используя данный шаблон.



08. Запусти оболочку из контейнера alpine и убедись, что можешь напрямую взаимодействовать с контейнером через свой терминал, и что контейнер удаляется после завершения выполнения оболочки.

документация docker run

Решение

docker run -it --rm alpine /bin/sh

Объяснение

-i, --interactive — оставляет STDIN (стандартный поток ввода)открытым.

-t, --tty — размещает(включает) pseudo-tty (Устройство которое имеет функции физического терминала, фактически не являясь им).

--rm — автоматически удаляет контейнер при выходе.



09. Из оболочки контейнера debian установи через диспетчер пакетов контейнера все, что нужно для компиляции исходного кода C и помести его в репозиторий git (конечно, перед этим убедись, что диспетчер пакетов и сами пакеты, уже находящиеся в контейнере, обновлены) . В этом упражнении следует указать только команды, которые будут запускаться непосредственно в контейнере.

документация docker run

Решение

запусти контейнер командой docker run -ti --rm debian

На упражнение ответом являются следующие команды

apt-get update

apt-get upgrade -y

apt-get install -y build-essential git

Объяснение

Ну а что тут сказать собственно говоря мда ничего блинб не добавить просто мда без слов



10. Создайте том под названием hatchery (инкубаторий).

документация docker volume create

Решение

docker volume create --name hatchery

Объяснение

--name - присваивает имя

Проверка

эту команду делай docker volume ls пару раз в день и ничего болеть не будет



11. Перечисли все тома Docker, созданные на машине. Внимание. ТОМА (и ничего другого, понял да????).

документация docker volume ls

Решение

docker volume ls

Объяснение

ls вместо тысячи слов



12. Запусти контейнер mysql в качестве фоновой задачи. Он должен иметь возможность перезапускаться самостоятельно в случае ошибки, а пароль root базы данных должен быть Kerrigan. Также убедись, что база данных хранится в томе hatchery (инкубаторий), что контейнер напрямую создает базу данных с именем zerglings, а сам контейнер называется spawning-pool.

документация MySql Docker

Решение

docker run -d --name spawning-pool --restart=on-failure:10 -e MYSQL_ROOT_PASSWORD=Kerrigan -e MYSQL_DATABASE=zerglings -v hatchery:/var/lib/mysql mysql --default-authentication-plugin=mysql_native_password

или

docker run -d --name spawning-pool --restart=on-failure:10 -e MYSQL_ROOT_PASSWORD=Kerrigan -e MYSQL_DATABASE=zerglings -v hatchery:/var/lib/mysql mysql:5.7

Объяснение

docker run --help:

-e, --env list — обозначает переменные среды.

/var/lib/mysql - директория по умолчанию, где MySql контейнер пишет свои файлы

MYSQL_ROOT_PASSWORD - переменная обязательная и обозначает пароль, который будет установлен в качестве пароля для MySQL аккаунта корня суперпользователя.

MYSQL_DATABASE - эта переменная не является обязательной и позволяет указать имя базы данных, которая будет создана при запуске образа. Если был указан пользователь / пароль, то этому пользователю будет предоставлен доступ суперпользователя (соответствующий GRANT ALL) к этой базе данных.



13. Распечатай переменные среды контейнера spawning-pool одной командой, чтобы убедиться, что правильно настроил свой контейнер.

документация docker inspect

Решение

docker inspect -f '{{.Config.Env}}' spawning-pool

Объяснение

inspect - выводит низкоуровневую информацию по объектам

--format , -f - форматирует строку



14. Запусти контейнер wordpress в качестве фоновой задачи, просто для удовольствия. Контейнер должен называться lair, его порт 80 должен быть привязан к порту 8080 виртуальной машины, и он должен иметь возможность использовать контейнер spawning-pool в качестве службы базы данных. Можешь попытаться получить доступ к lair на своей машине через веб-браузер, указав IP-адрес виртуальной машины в качестве URL-адреса. Поздравляю, ты только что развернул сайт на Wordpress двумя командами!

документация docker run

документация docker --link

Решение

docker run -d --name lair -p 8080:80 --link spawning-pool:mysql wordpress

Объяснение

Ссылки позволяют контейнерам обнаруживать друг друга и безопасно передавать информацию об одном контейнере в другой контейнер. Когда ты устанавливаешь ссылку, ты создаешь канал между исходным контейнером и получателем. После этого получатель может получить доступ к избранным данным об источнике. Чтобы создать ссылку, используется флаг --link.



15. Запусти контейнер phpmyadmin в качестве фоновой задачи. Он должен называться roach-warden, его порт 80 должен быть привязан к порту 8081 виртуальной машины, и он должен иметь возможность работать с базой данных, хранящейся в контейнере spawning-pool.

документация docker phpmyadmin & MySQL server

документация docker run

документация docker --link

Решение

docker run --name roach-warden -d --link spawning-pool:db -p 8081:80 phpmyadmin/phpmyadmin

Объяснение

Phpmyadmin должен указывать на сервер MySQL. Надо связать оба контейнера, добавив параметр: --link name-of-container: name-of-imag.



16. Просмотри журналы контейнера spawning-pool в реальном времени, не запуская его оболочку.

документация docker logs

Решение

docker logs -f spawning-pool

Объяснение

журналы докеров -f <КОНТЕЙНЕР>

Параметры -f или --follow покажут вывод журнала в реальном времени.



17. Покажи все активные в данный момент контейнеры на виртуальной машине Char

документация docker ps

Решение

docker ps

Объяснение

docker ps выводит контейнеры



18. Перезапусти контейнер overlord.

документация docker restart

Решение

docker restart overlord

Объяснение

restart — перезапускает один или несколько контейнеров



19. Запусти контейнер с именем Abathur. Это будет контейнер Python, версия 2-slim, его корневая папка будет привязана к папке HOME на твоем хосте, а его порт 3000 будет привязан к порту 3000 виртуальной машины. Персонализируй этот контейнер, чтобы мог использовать Flask в последней версии. Убедись, что Flask может обслуживать html-страницу, отображающую Hello World с тегами h1. Проверь, что контейнер правильно настроен, получив доступ через curl или веб-браузер к IP-адресу виртуальной машины на порту 3000. Перечисли все необходимые команды в своем репозитории.

документация docker exec

документация flask

Решение

docker run --name Abathur -v ~/:/root -p 3000:3000 -dit python:2-slim

docker exec Abathur pip install Flask

echo 'from flask import Flask\napp = Flask(name)\[email protected]("/")\ndef hello_world():\n\treturn "

Hello, World!

"' > ~/app.py

docker exec -e FLASK_APP=/root/app.py Abathur flask run --host=0.0.0.0 --port 3000

Объяснение

Команда docker exec запускает новую команду в работающем контейнере.

--env, -e - Установливает переменные окружения.



20. Создай локальный swarm, его менеджером должна быть виртуальная машина Char.

документация docker swarm

документация docker swarm init

документация по созданию swarm

Решение

docker swarm init --advertise-addr $(docker-machine ip Char)

Объяснение

Запусти следующую команду чтобы создать новый swarm

docker swarm init --advertise-addr



21. Создай другую виртуалку с помощью docker-machine используя виртуалбокс драйвер и назови её Aiur.

документация docker-machine create

Решение

docker-machine create --driver virtualbox Aiur

Объяснение

создаётся машина с использованием VirtualBox драйвера с названием Aiur



22. Назначь Aiur подчинённым в локальном swarm в котором Char является лилером (комманда для управления Aiur'ом не требуется).

документация docker-machine ssh

документация docker swarm join

Решение

docker-machine ssh Aiur "docker swarm join --token $(docker swarm join-token worker -q) $(docker-machine ip Char):2377"

Объяснение

Проверка



23. Create an overlay-type internal network that you will name overmind.

документация docker network create

документация docker network

Решение

docker network create -d overlay overmind

Объяснение

-d, --driver string — Driver to manage the Network (default "bridge").



24. Launch a rabbitmq SERVICE that will be named orbital-command. You should define a specific user and password for the RabbitMQ service, they can be whatever you want. This service will be on the overmind network.

документация docker service create

документация docker rabbit mq

Решение

docker service create -d --network overmind --name orbital-command -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root rabbitmq

Объяснение

If you wish to change the default username and password of guest / guest, you can do so with the RABBITMQ_DEFAULT_USER and RABBITMQ_DEFAULT_PASS environmental variables:

$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management docker service create --help:

-d, --detach — Exit immediately instead of waiting for the service to converge (default true). If I didn't use -d flag, I get the following output:

Since --detach=false was not specified, tasks will be created in the background. In a future release, --detach=false will become the default.



25. List all the services of the local swarm.

документация docker service ls

документация docker service

Решение

docker service ls

Объяснение

docker service:

ls — List services.



26. Launch a 42school/engineering-bay service in two replicas and make sure that the service works properly (see the documentation provided at hub.docker.com). This service will be named engineering-bay and will be on the overmind network.

документация 42school/engineering-bay service

документация docker service create

Решение

docker service create -d --network overmind --name engineering-bay --replicas 2 -e OC_USERNAME=root -e OC_PASSWD=root 42school/engineering-bay

Объяснение

You must have an orbital-command running on your host or swarm, accessible with the same name into your network.

To connect to this orbital-command, you must set a

OC_USERNAME : Username used to access to orbital-command OC_PASSWD : Password used to access to orbital-command



27. Get the real-time logs of one the tasks of the engineering-bay service.

документация docker service logs

Решение

docker service logs -f $(docker service ps engineering-bay -f "name=engineering-bay.1" -q)

Объяснение

The name filter matches on task names.

$ docker service ps -f "name=redis.1" redis



28. ... Damn it, a group of zergs is attacking orbital-command, and shutting down the engineering-bay service won’t help at all... You must send a troup of Marines to eliminate the intruders. Launch a 42school/marine-squad in two replicas, and make sure that the service works properly (see the documentation provided at hub.docker.com). This service will be named... marines and will be on the overmind network.

документация

документация

Решение

Объяснение

Проверка



29. Display all the tasks of the marines service.

документация docker service ps

Решение

docker service ps marines

Объяснение

docker service:

ps — List the tasks of one or more services.



30. Increase the number of copies of the marines service up to twenty, because there’s never enough Marines to eliminate Zergs. (Remember to take a look at the tasks and logs of the service, you’ll see, it’s fun.)

документация docker service scale

Решение

docker service scale -d marines=20

Объяснение

docker service:

scale — Scale one or multiple replicated services.

--detach , -d — Exit immediately instead of waiting for the service to converge.

How to check logs?

docker service logs -f $(docker service ps marines -f "name=marines.11" -q)

docker service:

scale — Scale one or multiple replicated services.



31. Force quit and delete all the services on the local swarm, in one command.

документация docker service rm

Решение

docker service rm $(docker service ls -q)

Объяснение

docker:

rm — Remove one or more containers. docker rm --help:

-f, --force — Force the removal of a running container (uses SIGKILL).

32. Принудительно заверши работу и удали все контейнеры (независимо от их статуса) одной командой.

документация docker rm

Решение

docker rm -f $(docker ps -a -q)



33. Удали все образы контейнеров, хранящиеся на виртуальной машине Char с помощью одной команды

документация docker rmi

Решение

docker rmi $(docker images -a -q)

Объяснение

rmi — удаляет один или несколько образов.

34. Удали виртуалку Aiur без использования rm-rf.

документация docker-machine rm

Решение

docker-machine rm -y Aiur

Объяснение

rm — удаляет машину. docker-machine rm --help:

-y — автоматическое «да» для продолжения удаления без запроса дополнительного подтверждения пользователя.

⚠️ **GitHub.com Fallback** ⚠️