2016-12-13 4 views
0

Я вытащил изображение Дженкинса и запустил его. Затем я сделал некоторую конфигурацию на этом контейнере. Теперь я хочу сохранить всю конфигурацию в новом изображении. Ниже приводится команда, которую я использовал:Почему докеры не могут использовать контейнер Jenkins с настраиваемой конфигурацией?

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS        NAMES 
f214096e4847  jenkins    "/bin/tini -- /usr/lo" About an hour ago Up 1 seconds  50000/tcp, 0.0.0.0:8081->8080/tcp ci 

С выше вывода, вы можете увидеть, что Дженкинс контейнер f214096e4847 работает.

Теперь я использую следующую команду, чтобы совершить свои изменения и создать новый образ:

$ docker commit f214096e4847 my_ci/1.0 
sha256:d83801a700c4060326a5209b87281bfb0e93f46207d960038ba2d87628ddb90c 

Затем я остановить текущий контейнер и запустить новый контейнер из my_ci/1.0 изображения:

$ Docker остановки f214096e4847 f214096e4847 $ Docker запустить -d --name myci -p 8081: 8080 my_ci/1,0 aba1660be200291d499bf00d851a854c724193c0ee2afb3fd318c36320b7637e

Но новый Contà iner не включает никаких изменений, которые я сделал. Похоже, что контейнер создан из оригинального изображения дженкинсов. Как сохранить мои данные при использовании фиксации докеров?

EDIT1

Я знаю, что я могу добавить объем, чтобы сохранить данные конфигурации, как показано ниже:

-v my_path:/var/jenkins_home 

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

+0

не уверен в части фиксации докеров, но если вы хотите сохранить свои данные (JENKINS_HOME), вы можете запустить контейнер с томом в постоянное хранилище - запустить docker ... -v my_path:/var/jenkins_home' – Amityo

+0

Да это будет работать. Но я действительно хочу сохранить конфигурацию jenkins внутри изображения докера. –

+0

вы не сможете обновить новые изображения jenkins ... – Amityo

ответ

1

Важно знать, что это нехороший подход. Как рассказали вам в комментариях. Рекомендуемый способ - объединить объемы.

Но если вы действительно хотите свой том на изображении, я могу предложить другой способ. Вы можете создать свой собственный образ, полученный от официального образа:

Clone мерзавец репо исходного изображения

git clone https://github.com/jenkinsci/docker.git 

Это содержит следующее:

CONTRIBUTING.md Jenkinsfile docker-compose.yml install-plugins.sh jenkins-volume plugins.sh update-official-library.sh 
Dockerfile  README.md init.groovy   jenkins-support  jenkins.sh  tests  weekly.sh 

Вам просто нужно сделать одно редактирование в Dockerfile. Заменить VOLUME командой mkdir

# Jenkins home directory is a volume, so configuration and build history 
# can be persisted and survive image upgrades 
#VOLUME /var/jenkins_home 
RUN mkdir -p /var/jenkins_home 

Перестроить свой собственный образ:

docker build -t my-jenkins:1.0 

начать свой собственный Дженкинс + установить некоторые плагины + создать несколько рабочих мест.

docker run -d -p 8080:8080 -p 50000:50000 my-jenkins:1.0 

Когда вы будете готовы с созданием желаемых заданий, вы можете зафиксировать контейнер как изображение.

docker commit 30c5889032a8 my-jenkins-for-developers:1.0 

Этот новейший контейнер jenkins будет содержать ваши плагины + задания по умолчанию.

docker run -d -p 8080:8080 -p 50000:50000 my-jenkins-for-developers:1.0 

Это будет работать в вашем случае. Но, как я уже сказал. Это не рекомендуется. Это делает ваш контент зависимым от изображения. Поэтому сложнее, если вы хотите выполнять обновления. Также изображение может быть слишком большим (размер).

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