Защо докерът не може да ангажира контейнер на 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

От изхода по-горе можете да видите, че контейнерът на jenkins f214096e4847 работи.

Сега използвам командата по-долу, за да ангажирам промените си и да създам ново изображение:

$ docker commit f214096e4847 my_ci/1.0
sha256:d83801a700c4060326a5209b87281bfb0e93f46207d960038ba2d87628ddb90c

След това спирам текущия контейнер и стартирам нов контейнер от my_ci/1.0 изображение:

$ docker stop f214096e4847 f214096e4847 $ docker run -d --name myci -p 8081:8080 my_ci/1.0 aba1660be200291d499bf00d851a854c724193c0ee2afb3fd318c36320b7637e

Но новият контейнер не включва никакви промени, които направих. Изглежда, че контейнер е създаден от оригинално изображение на Jenkins. Как да запазя данните си, когато използвам докер ангажимент?

РЕДАКТИРАНЕ1

Знам, че мога да добавя том, за да запазя конфигурационните данни, както е показано по-долу:

-v my_path:/var/jenkins_home

Но наистина искам да го запазя в докер изображението. Така че потребителите не трябва да предоставят конфигурацията от своя хост.


person Joey Yi Zhao    schedule 13.12.2016    source източник
comment
не съм сигурен за частта за ангажиране на докер, но ако искате да запазите данните си (JENKINS_HOME), можете да стартирате контейнера с обем към постоянно хранилище - изпълнение на докер ... -v my_path:/var/jenkins_home   -  person Amityo    schedule 13.12.2016
comment
Да, ще работи. Но наистина искам да запазя конфигурацията на Дженкинс в изображението на докера.   -  person Joey Yi Zhao    schedule 13.12.2016
comment
няма да можете да актуализирате до нови изображения на jenkins...   -  person Amityo    schedule 13.12.2016


Отговори (1)


Важно е да знаете, че това не е добър подход. Както ви казах в коментарите. Препоръчителният начин е да монтирате томове.

Но ако наистина искате вашия обем в изображението, мога да предложа друг начин. Можете да създадете свое собствено изображение, извлечено от официалното изображение:

Клонирайте git repo на оригиналното изображение

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

Стартирайте свой собствен jenkins + инсталирайте някои добавки + създайте някои работни места.

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

Това ще работи във вашия случай. Но както казах. Не се препоръчва. Това прави вашето съдържание зависимо от изображението. Така че е по-трудно, когато искате да извършвате актуализации. Също така вашето изображение може да е твърде голямо (размер).

person lvthillo    schedule 28.12.2016