Создание пользовательского образа Docker
Теперь, когда у нас есть работающий контейнер Nginx, мы создадим пользовательский образ, изменив его. Это основа процесса клонирования. Мы:
- Внесем изменения в работающий контейнер
- Создадим новый образ из этих изменений
- Запустим контейнер на основе нашего нового образа
Понимание создания образа Docker
Образы Docker можно создавать двумя способами:
- Используя Dockerfile (рекомендуемый подход для продакшена)
- Фиксируя изменения, внесенные в работающий контейнер (полезно для изучения и экспериментов)
Мы будем использовать второй подход в этом руководстве, так как он более понятен для понимания процесса клонирования.
Изменение работающего контейнера
Во-первых, давайте создадим пользовательский HTML-файл, чтобы заменить страницу приветствия Nginx по умолчанию. Нам нужно войти в работающий контейнер и изменить его файлы.
Используйте следующую команду, чтобы выполнить shell внутри работающего контейнера:
docker exec -it my-nginx bash
Это открывает интерактивный bash shell внутри контейнера. Теперь давайте создадим пользовательский HTML-файл:
echo "<html><body><h1>My Custom Docker Image</h1><p>This is a custom Nginx image created in the LabEx tutorial.</p></body></html>" > /usr/share/nginx/html/index.html
Вы можете проверить изменение, проверив содержимое файла:
cat /usr/share/nginx/html/index.html
Теперь выйдите из shell контейнера:
exit
Тестирование изменений
Давайте проверим, были ли применены наши изменения, снова обратившись к серверу Nginx:
curl http://localhost:8080
Теперь вы должны увидеть наше пользовательское HTML-содержимое вместо страницы приветствия Nginx по умолчанию.
Создание нового образа из измененного контейнера
Теперь, когда мы изменили контейнер, мы создадим новый образ, который включает эти изменения. Это делается с помощью команды docker commit:
docker commit my-nginx my-custom-nginx:v1
Эта команда создает новый образ с именем my-custom-nginx с тегом v1 на основе текущего состояния контейнера my-nginx.
Проверка нового образа
Давайте проверим, был ли создан наш новый образ:
docker images
Вы должны увидеть свой новый образ в списке:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-custom-nginx v1 a1b2c3d4e5f6 10 seconds ago 142MB
nginx latest 605c77e624dd 2 weeks ago 142MB
Запуск контейнера из нового образа
Теперь давайте остановим и удалим исходный контейнер, а затем запустим новый контейнер на основе нашего пользовательского образа:
docker stop my-nginx
docker rm my-nginx
docker run --name my-custom-container -d -p 8081:80 my-custom-nginx:v1
Эти команды:
- Останавливают исходный контейнер
- Удаляют исходный контейнер
- Создают новый контейнер на основе нашего пользовательского образа, отображенного на порт 8081
Тестирование нового контейнера
Давайте проверим, правильно ли работает наш новый контейнер:
docker ps
Вы должны увидеть свой новый контейнер в списке:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
g9h8i7j6k5l4 my-custom-nginx:v1 "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:8081->80/tcp my-custom-container
Теперь получите доступ к серверу Nginx на новом порту:
curl http://localhost:8081
Вы должны увидеть то же пользовательское HTML-содержимое, подтверждающее, что наш новый образ содержит внесенные нами изменения.
Поздравляем! Вы успешно клонировали образ Docker и настроили его. На следующем шаге мы узнаем, как поделиться этим пользовательским образом.