Шпаргалка с командами Docker
Прим. перев.: Неделю назад Aymen El Amri, руководящий компанией eralabs и создавший обучающий курс «Безболезненный Docker», опубликовал свой Docker Cheat Sheet — шпаргалку по основным командам Docker. Git-репозиторий этого документа на GitHub уже набрал 1000+ stars и несколько сторонних контрибьюторов, что подтвердило его актуальность и пользу.
Представленные здесь команды описаны минимально (с акцентом на читаемость как есть) и включают в себя установку Docker, работу с реестрами и репозиториями, контейнерами, образами, сетью, Docker Swarm. Ниже представлен перевод шпаргалки в её состоянии на 2 сентября с дополнениями из комментариев ниже.
Сохранить текущее состояние образа докера и экспортировать на другой сервер
Я новичок в докере и контейнерах. Я выполнил следующие шаги для переноса моей базы данных postgres, работающей в док-контейнере:
На сервере назначения (192.10.2.5):
Но когда я вхожу в образ докера, базы данных там нет. Как сохранить образ докера со всеми таблицами базы данных и данными.
4 ответа
Там нет базы данных, потому что команды docker save и docker commit не сохраняют тома контейнера .
Вот скрипт для этого:
Ваш контейнер был основан на изображении при запуске, но после запуска все изменения не будут влиять на изображение.
Поэтому все ваши изменения, включая базу данных, если они сделаны во время выполнения контейнера, должны быть зафиксированы для формирования нового образа докера перед сохранением.
Примерно так: см. здесь.
Затем сохраните новое изображение в tar и сделайте то, что вы хотели.
Зафиксировать текущее состояние изображения
Сохранить изображение как файл tar
Загрузить контейнер с картинки
Попытка переместить контейнер как это не лучшая практика. Однако может потребоваться некоторая настройка, чтобы привести ваш контейнер в правильное состояние.
Важной деталью является то, что все данные, которые могут измениться и должны быть сохранены, должны храниться вне контейнера . В то время как Docker поддерживает именованные тома для этого, использование собственного пути к файловой системе IME легче поддерживать и перемещать. Вам нужно знать, куда внутри контейнера отправляются данные (обычно это хорошо документировано), но затем вы можете запускать такие команды, как
Теперь вы можете делать с контейнером все, что захотите, даже docker rm его, но до тех пор, пока /data/mysql на вашем хосте не затрагивает ваши данные Это хорошо. Это также означает, что вы можете использовать обычный scp для копирования данных на другой хост и docker run там же контейнер, что является более типичным путем миграции.
Если вы создаете и запускаете пользовательские образы, необходимо проверить несколько вещей:
Вы действительно должны использовать своего рода реестр Docker, будь то Docker Hub, что-то, что предлагает ваш облачный провайдер, что-то стороннее или что-то самообслуживаемое. docker save перемещение изображений — последнее средство, которое редко требуется.
Сами изображения должны быть построены из Dockerfiles и, как и все остальное в вашем приложении, должны быть включены в систему контроля версий. В идеале у вас есть автоматизированная система сборки (непрерывная интеграция), запускающая docker build && docker push для вас. Никогда не используйте docker commit или docker export : это рецепт для получения разных версий программного обеспечения в разных системах и не запоминания того, как вы туда попали.
Ваше приложение должно минимизировать объем данных, которые оно хранит локально. Лучший вариант — хранить все во внешней базе данных, а затем вы можете просто указать на базу данных; если локальное файловое хранилище действительно неизбежно, попробуйте поместить все это в один каталог, который не входит в исходное дерево вашего приложения.
Локально вы должны иметь возможность docker stop; docker rm; docker run свободно использовать один и тот же контейнер и не терять данные. Проверьте это, прежде чем выполнять миграцию между хостами.
Если вы можете структурировать свое приложение так, чтобы все его данные находились во внешней базе данных, рассмотрите возможность запуска базы данных на выделенном хосте с чрезвычайно хорошими процедурами резервного копирования. Если вы сделали все до этого момента, вы можете получить серьезный скоординированный сбой жесткого диска и потерять все ваши хосты Docker, а на самом деле ничего не потерять (потому что вы можете docker build снова получить изображения из источника и <
Как перенести / переместить образ Docker в другую систему?
В идеальном случае передача изображений Docker осуществляется через реестр Docker или через полностью управляемого поставщика, такого как AWS ECR или Google GCR. Вы можете легко загрузить изображение с помощью команды docker push , а другие могут получить изображение с помощью команды docker pull .
Хотя, если вам нужно переместить изображение с одного хоста на другой, чтобы протестировать его перед отправкой в производственную среду, или вы хотите поделиться этим изображением с кем-то в офисе, это можно сделать, экспортировав изображение как .tar файл.
Docker поддерживает два разных типа методов для сохранения изображений контейнера в один архив.
- Docker save — Save используется для сохранения изображения (не контейнера)
- Docker export — Export используется для сохранения контейнера (не изображения)
Использование Docker Save Command:
Сохранение изображения Docker:
Во-первых, мы будем придерживаться плана, который сохраняет только изображение. Теперь пройдемся по команде docker save . Предположим, вам нужен образ Python с Alpine, который можно извлечь из Docker Hub:
После добавления нескольких файлов или внесения изменений в контейнер вы решаете создать архив изображения, чтобы предоставить его коллеге. Вы можете достичь этого, выполнив следующую команду:
Просто убедитесь, что вы используете точное имя изображения и тег при создании tar. В нашем случае так и было python:2.7.17-alpine3.9 . Вы можете проверить, сработала ли вышеуказанная команда:
Теперь вы можете отправить файл .tar другому лицу через rsync , scp или аналогичный протокол передачи файлов в соответствии с вашими предпочтениями.
Загрузка изображения докера:
Как только на целевой машине будет файл .tar , вы можете загрузить образ в локальный реестр, используя команду docker load :
Теперь проверьте, есть ли у вас это изображение на целевом компьютере, с помощью docker images или docker image list . Конечный результат будет примерно таким:
Использование команды экспорта Docker:
Примечание. Команда docker export не будет экспортировать содержимое тома, который прикреплен к контейнеру. В этом случае вам необходимо выполнить дополнительную команду для резервного копирования, восстановления или миграции существующего тома.
Посмотрев на метод docker export , сначала мы потянем альпийское изображение:
Теперь вы можете запустить экземпляр в режиме отсоединения, чтобы контейнер не разрушался при выходе из него.
Чтобы получить идентификатор контейнера и имя, которое мы создали, мы можем использовать команду docker ps . На всякий случай, если на вашей машине контейнер был остановлен по какой-либо причине, вы все равно можете получить идентификатор и имя, используя docker ps -a :
Как мы видим, наш идентификатор контейнера 35f34fabfa84 (он будет другим для вас), или вы также можете использовать имя контейнера; в нашем случае это alpine-t . Теперь мы можем запустить команду docker export для экспорта изображения экземпляра:
Кроме того, вы также можете использовать OPTIONS, чтобы сделать то же самое, и ваш файл .tar будет готов для передачи.
Теперь вы можете импортировать файл .tar на целевой компьютер, используя импорт докера:
Чтобы проверить, вы можете запустить контейнер с помощью —rm (он уничтожит контейнер, как только вы его выполните):