#docker #kubernetes #container #orchestrator #microservice #infrastructure-as-code #devops #ci #cd

제목[Q&A] Jenkins로 docker container을 관리해보자. (swarm X)2019-12-12 00:16
작성자

다시 한 번 강조하지만 docker swarm 관리가 아닌 docker container을 관리하는 방법이다. 


먼저 http://wiki.webnori.com/display/cicd/Jenkins+for+Docker 에서 참고해야 할 사항이다.

jenkins로 docker container을 관리하려면 jenkins container에 volume 옵션이 꼭 필요하다.


-v /var/run/docker.sock:/var/run/docker.sock


꼭 jenkins container을 만들 때 해당 옵션을 잊지 않도록 하자.

port는 8080과 50000 2개를 사용하고, /var/jenkins_home에 따로 volume을 mount 하는 게 편하다는 것 정도 알아두면 좋다.


저 링크에서 알아둬야 할 점은 이 정도이다.

다른 내용은 따라하지 않아도 괜찮다.



다음은 http://wiki.webnori.com/display/cicd/Jenkins+with+Docker+Build 에서 참고해야할 사항이다.

사이트에서 설치하라는 jenkins 플러그인 (docker plugin, docker build step)을 설치한다.


다른 내용은 됐고, Jenkins 관리 -> 시스템 설정 에서 스크롤을 내리다보면 Docker Builder 항목이 있다.

Docker URL에 unix:///var/run/docker.sock 를 적어준다.

Docker version에 Docker 버전을 적는다

cert file path도 /var/run/docker.sock 를 적어준다.


Test Connection을 눌렀을 시 Connected to unix:///var/run/docker.sock 가 뜨면 완료다.


여기서 권한 오류가 뜨는 경우, docker.sock 파일에 접근 권한이 없어서 뜨는 오류다.


이 경우에는

docker container exec {containerName} -u 0 chmod 777 /var

docker container exec {containerName} -u 0 chmod 777 /var/run

docker container exec {containerName} -u 0 chmod 777 /var/run/docker.sock

권한을 모두 열어준다.


이후 새로운 Item을 만들 때 build-step에서 Execute Docker command 을 추가하면

여러가지 Docker command를 선택하여 사용할 수 있다.


주의할 점은, jenkins container가 host의 다른 container들을 관리하기 때문에

all container에는 자기 자신도 포함되므로 all container command 사용은 추천하지 않는다.


예를 들어 stop all container 명령어의 경우 다른 container을 stop시키기 전에

자기 자신 jenkins container를 먼저 stop시켜버리면 이후 명령어 실행이 되지 않는다.


덧붙여 container에 명령을 주고 싶다면 Create exec instance in container 가 아닌

Create and start exec instance in container 명령어를 택해야 한다.


또 주의할 점은, 나의 경우 container을 만들거나 시작하는 docker command는 오류가 나서 실행되지 않았다.

이 점 참고하기 바란다.

댓글