2016-02-29 3 views
1

Возможно, мне не хватает этого при чтении документов, но есть ли способ перезаписать файлы в файловой системе контейнера при выдаче команды docker run?Перезаписывать файлы с помощью `docker run`

Что-то похожее на команду DockerfileCOPY? Ключевым желанием здесь является возможность взять конкретный Docker image и закрутить несколько изображений одного и того же изображения, но с различными конфигурационными файлами. (Я бы предпочел сделать это с помощью переменных окружения, но приложение, которое я докетирую, не является частичным для этого.)

+1

Похоже, вы хотите использовать встроенные аргументы в докере 1.9 до – danday74

+0

Я полагаю, что если я использую build args, он не перестроит все промежуточные контейнеры? Он просто добавляет нового посредника в конец и копирует файл? – Breedly

+1

Build args позволяют создать изображение с x, установленным в 6, и другое изображение с x, установленным в 7 из того же файла докеров. U затем запускает контейнеры с любого изображения обычным способом, я полагаю, что обычный посредник используется везде, где это возможно – danday74

ответ

4

У вас есть несколько вариантов. Используя что-то вроде docker-compose, вы можете автоматически создавать уникальное изображение для каждого контейнера, используя ваше базовое изображение в качестве шаблона. Например, если у вас docker-compose.yml, которые выглядят полюбились:

container0: 
    build: container0 

container1: 
    build: container1 

И тогда внутри container0/Dockerfile вы имели:

FROM larsks/thttpd 
COPY index.html /index.html 

А внутри container0/index.html вы имели все, что содержание вы хотели, то работает docker-compose build будет генерировать уникальный изображения для каждой записи (и запуск docker-compose up начнет все вверх).

Я собрал пример вышеуказанного here.

Используя только командную строку Docker, вы можете использовать монтирует тома хоста, которые позволяют монтировать файлы в контейнер, а также каталоги. Используя мой thttpd в качестве примера снова, вы можете использовать следующий -v аргумент переопределить /index.html в контейнере с содержанием вашего выбора:

docker run -v index.html:/index.html larsks/thttpd 

И вы могли бы сделать то же самое с docker-compose через volume запись:

container0: 
    image: larsks/thttpd 
    volumes: 
    - ./container0/index.html:/index.html 

container1: 
    image: larsks/thttpd 
    volumes: 
    - ./container1/index.html:/index.html 

Я хотел бы предложить, что использование механизма build имеет смысл, если вы пытаетесь отменить много файлов, используя при ИЗДЕ umes отлично подходит для одного или двух файлов.

Основное различие между этими двумя механизмами является то, что при создании изображений, каждый контейнер будет иметь копию файлов, при использовании монтирует тома, изменения, внесенные в файл в пределах изображения будут отражаться на хост файловой системе.

Смежные вопросы