В этой статье поподробнее рассмотрим основы докер: создадим PHP-приложение, Dockerfile с этим приложением, Docker Image
1. Docker Image
Мы установим бесплатную версию 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
3. Продолжение следует... (Загрузка образа в Private DockerHub)