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 сообщает, что этот хост находится в состоянии тайм-аута.
документация 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 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 -.
docker pull hello-world
Я скажу то, что для тебя не новость. Мир не такой уж солнечный и приветливый. Это очень опасное и жесткое место. И если только ты дашь слабину, он опрокинет тебя с такой силой, что больше уже не встанешь. Ни ты, ни я, ни кто на свете не валит так сильно, как проверки душных людей. Совсем не важно как ты сдаешь, а важно какую душную проверку ты выдерживаешь! Как движешься вперед, будешь идти вперед, иди, если с испуга не свернешь... Только так побеждают! Если знаешь чего ты стоишь, иди и бери свое, но будь готов проверки сдавать. А не плакаться и говорить: я ничего не сдал из-за него, из-за нее, из-за кого то. Так делают трусы, а ты не трус!!! Быть этого не может!
docker run hello-world
Такова команда, сынок, ничего не поделать
Запустить другие контейнеры, предварительно их стянув pull-ом.
06. Запусти контейнер nginx, доступный в Docker Hub, в качестве фоновой задачи. Он должен называться overlord, иметь возможность перезапускаться самостоятельно, а его порт 80 должен быть подключен к порту 5000 Char. Можешь проверить правильность контейнера, нажав сюда или написав вручную http://:5000 в своем веб-браузере.
docker run -d -p 5000:80 --name overlord --restart=always nginx
docker run --help:
-d, --detach — запускает контейнер в фоновом режиме и печатает ID контейнера.
--name string — даёт имя контейнера.
-p, --publish list — публикует порт(ы) контейнера на хосте.
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 -it --rm alpine /bin/sh
-i, --interactive — оставляет STDIN (стандартный поток ввода)открытым.
-t, --tty — размещает(включает) pseudo-tty (Устройство которое имеет функции физического терминала, фактически не являясь им).
--rm — автоматически удаляет контейнер при выходе.
09. Из оболочки контейнера debian установи через диспетчер пакетов контейнера все, что нужно для компиляции исходного кода C и помести его в репозиторий git (конечно, перед этим убедись, что диспетчер пакетов и сами пакеты, уже находящиеся в контейнере, обновлены) . В этом упражнении следует указать только команды, которые будут запускаться непосредственно в контейнере.
запусти контейнер командой docker run -ti --rm debian
На упражнение ответом являются следующие команды
apt-get update
apt-get upgrade -y
apt-get install -y build-essential git
Ну а что тут сказать собственно говоря мда ничего блинб не добавить просто мда без слов
документация docker volume create
docker volume create --name hatchery
--name - присваивает имя
эту команду делай docker volume ls пару раз в день и ничего болеть не будет
11. Перечисли все тома Docker, созданные на машине. Внимание. ТОМА (и ничего другого, понял да????).
docker volume ls
ls вместо тысячи слов
12. Запусти контейнер mysql в качестве фоновой задачи. Он должен иметь возможность перезапускаться самостоятельно в случае ошибки, а пароль root базы данных должен быть Kerrigan. Также убедись, что база данных хранится в томе hatchery (инкубаторий), что контейнер напрямую создает базу данных с именем zerglings, а сам контейнер называется spawning-pool.
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 -f '{{.Config.Env}}' spawning-pool
inspect - выводит низкоуровневую информацию по объектам
--format , -f - форматирует строку
14. Запусти контейнер wordpress в качестве фоновой задачи, просто для удовольствия. Контейнер должен называться lair, его порт 80 должен быть привязан к порту 8080 виртуальной машины, и он должен иметь возможность использовать контейнер spawning-pool в качестве службы базы данных. Можешь попытаться получить доступ к lair на своей машине через веб-браузер, указав IP-адрес виртуальной машины в качестве URL-адреса. Поздравляю, ты только что развернул сайт на Wordpress двумя командами!
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 --name roach-warden -d --link spawning-pool:db -p 8081:80 phpmyadmin/phpmyadmin
Phpmyadmin должен указывать на сервер MySQL. Надо связать оба контейнера, добавив параметр: --link name-of-container: name-of-imag.
docker logs -f spawning-pool
журналы докеров -f <КОНТЕЙНЕР>
Параметры -f или --follow покажут вывод журнала в реальном времени.
docker ps
docker ps выводит контейнеры
docker restart overlord
restart — перезапускает один или несколько контейнеров
19. Запусти контейнер с именем Abathur. Это будет контейнер Python, версия 2-slim, его корневая папка будет привязана к папке HOME на твоем хосте, а его порт 3000 будет привязан к порту 3000 виртуальной машины. Персонализируй этот контейнер, чтобы мог использовать Flask в последней версии. Убедись, что Flask может обслуживать html-страницу, отображающую Hello World с тегами h1. Проверь, что контейнер правильно настроен, получив доступ через curl или веб-браузер к IP-адресу виртуальной машины на порту 3000. Перечисли все необходимые команды в своем репозитории.
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 "
"' > ~/app.pydocker exec -e FLASK_APP=/root/app.py Abathur flask run --host=0.0.0.0 --port 3000
Команда docker exec запускает новую команду в работающем контейнере.
--env, -e - Установливает переменные окружения.
документация 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 network create
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 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.
документация docker service ls
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
документация 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.
документация 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.
документация 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).
docker rm -f $(docker ps -a -q)
docker rmi $(docker images -a -q)
rmi — удаляет один или несколько образов.
документация docker-machine rm
docker-machine rm -y Aiur
rm — удаляет машину. docker-machine rm --help:
-y — автоматическое «да» для продолжения удаления без запроса дополнительного подтверждения пользователя.