Print this page

Создание Docker image и загрузка в Private DockerHub

18 August 2024
Rate this item
(0 votes)

В этой статье поподробнее рассмотрим основы докер: создадим 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)