Чтобы каждый раз не вводить 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 можем видеть как увеличился счётчик скачиваний нашего образа