В этой статье поподробнее рассмотрим основы докер: как инсталлировать docker, как использовать docker image, как запускать docker container, что такое dockerfile, что такое dockerhub, как создавать docker image из dockerfile, как создавать обновленный docker image из docker container.
0. Docker-engine
Мы установим бесплатную версию docker engine community edition и добавим пользователя в группу docker:
sudo apt -y update
sudo apt -y install apt-transport-https
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt -y update
sudo apt -y install docker-ce
sudo systemctl status docker
sudo usermod -aG docker $USER
1. Команды докер
docker -v #Версия Docker Engine
docker run hello-world #Запустить контейнер "hello-world"
docker stop hello-world #Остановить контейнер "hello-world"
docker ps #Показать запущенные контейнеры
docker ps -a #Остановить запущенные контейнеры
docker images #Показать локальные образы
docker search tomcat #Показать образы tomcat в репозитории docker HUB
docker pull tomcat #Скачать образ tomcat
docker run -it -p 1234:8080 tomcat #Запустить контейнер интерактивно с перенаправлением порта с доступом на 1234 с порта 8080
docker run -d -p 8888:80 nginx #Запустить контейнер "в фоне" с перенаправлением порта с доступом на 8888 с порта 80
docker rm #Удалить контейнер
docker rmi #Удалить образ
docker tag oldimage:oldtag newimage:newtag #Создать дубликат образа с новым тегом
docker exec -it 5267e21d140 /bin/bash #Запустить интерактивно /bin/bash на контейнере с ID 5267e21d140
echo "New Version v2" >> /var/www/html/index.html #Изменить файл в контейнере
exit #Выйти из контейнера
docker commit 5267e21d140 newimage_v2:latest #Создать Image с именем newimage_v2:latest из контейнера с ID 5267e21d140
docker save image:tag > arch_name.tar #Экспорт в файл
docker load -i arch_name.tar #Импорт из файла
2. Свой Dockerfile
Команды внутри Dockerfile:
1. FROM — задаёт базовый (родительский) образ.
2. LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
3. ENV — устанавливает постоянные переменные среды.
4. RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
5. COPY — копирует в контейнер файлы и папки.
6. ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
7. CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
8. WORKDIR — задаёт рабочую директорию для следующей инструкции.
9. ARG — задаёт переменные для передачи Docker во время сборки образа.
10. ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
11. EXPOSE — указывает на необходимость открыть порт.
12. VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.
Этой командой мы можем создать наш Dockerfile: mkdir dockerproject && cd dockerproject && nano Dockerfile
#---------------------------------------------------------------------------
# Dockefile to build Docker Image of Apache WebServer running on Ubuntu
#---------------------------------------------------------------------------
FROM ubuntu:24.04
RUN apt -y update
RUN apt -y install apache2
RUN echo 'Hello World from Docker!' > /var/www/html/index.html
CMD ["/usr/sbin/apache2ctl", "-D","FOREGROUND"]
EXPOSE 80
Команда ниже чтобы создать образ с тэгом "v1" из Dockerfile и запустить его. Точка в конце означает запуск Dockerfile локально.
docker build -t kent:v1 .
docker run -it -p 1234:80 kent:v1
docker run -d -p 1234:80 kent:v1