#6 DevOps. Docker. Как создать свой образ и закачать на Docker Hub

Чтобы каждый раз не вводить sudo можно добавить нужного пользователя в группу docker. Делая это помните о ИБ

sudo usermod -aG docker username
sudo service docker restart

Разберем команду

docker run -it ubuntu bash

-i -t // создать интерактивный сеанс в подключаемом терминале
bash // инициализирует командную оболочку bash

Загружаемый образ после проверки отправляется в контейнер. Теперь он доступен при создании нового контейнера

Если выйти из командной оболочки, контейнер прекращает свою работу. Пока существует основной процесс — контейнер работает

docker ps -a // все контейнеры, в том числе остановленные

docker start containername // запустить контейнер, остановленный ранее

docker stop containername // остановить контейнер

docker run -h devopslife -it ubuntu bash // запустим контейнер

Откроем еще один терминал

docker ps // посмотрим имя запущенного контейнера
docker inspect heuristic_keldysh // посмотрим детальную информацию о контейнере (у вас будет свое имя контейнера)
docker stop heuristic_keldysh // остановим контейнер и зададим ему свое имя
docker run --name devopslife -it ubuntu bash
docker ps // проверим

Создадим в контейнере файл и проверим изменения

touch index.html
// в другой вкладке выполним
docker diff devoplife
A /index.html // видим изменения
docker logs devopslife // посмотрим логи
root@ae6ce7f6b3f9:/# touch index.html
// выйдем из контейнера и затем удалим его
docker rm devopslife
docker ps -a // проверим
docker images // посмотреть список образов

Теперь создадим свой образ (у вас должна быть учетная запись на Docker Hub)

На Docker Hub выполним

Create repository -> docker_test (зададим имя) -> выбираем public -> Create

Далее в консоли выполним

mkdir devopslife
cd devopslife

nano index.html

<html>
   <head>
      <title>
         devopslife
      </title>
   </head>
   <body>
      <h1>
         Welcome to devopslife.ru
      </h1>
   </body>
</html>

sudo docker run -d --restart always --name devopslife -p 80:80 -v /home/devopslife:/usr/share/nginx/html nginx:stable

docker exec -it devopslife bash // для подключения к контейнеру

Проверим 

ip_address:80

Видим приветственную страницу

Далее выполним

docker commit devopslife your_dockerhub_username/devopslife-nginx (замените имя на свое)

docker images // видим наш образ

docker stop devopslife // остановим наш образ

docker ps -a // проверим

docker rm // удалим все, что создали ранее, чтобы запустить с тем же именем

Теперь запустим свой образ 

sudo docker run -d --restart always --name devopslife -p 80:80 -v /home/devopslife:/usr/share/nginx/html your_dockerhub_username/devopslife-nginx

Проверим еще раз

ip_address:80

Видим приветственную страницу

Теперь отправим наш образ на Docker Hub

docker login // логинимся и видим Login Succeeded

docker push your_dockerhub_username/devopslife-nginx // отправляем наш образ

Теперь проверим на Docker Hub и видим, что помимо созданного ранее docker_test и у нас появился devopslife-nginx

При отправке можно добавить tag, например чтобы указать, что это тестовая версия. Если не указать, автоматически присваивается :latest

docker push your_dockerhub_username/devopslife-nginx:test

Удалим и проверим еще раз

docker stop devopslife

docker rm -v $(docker ps -aq -f status=exited) // удаляем все остановленные

docker images

docker rmi // удаляем все образы

sudo docker run -d --restart always --name devopslife -p 80:80 -v /home/devopslife:/usr/share/nginx/html your_dockerhub_username/devopslife-nginx

docker ps

docker images

Проверим еще раз

ip_address:80

Видим приветственную страницу

Образ скачался с нашего репозитория и успешно запустился.

На Docker Hub можем видеть как увеличился счётчик скачиваний нашего образа