jenkins와 docker
jenkins 에서 도커 이미지를 빌드하는 것은 흔한 일이다.
하지만, jenkins 서버를 만약 docker container로 띄웠다면 조금 복잡해진다.
이 때, jenkins에서 도커를 사용하는 방식에 따라 dood, did 로 나뉘게 된다.
- docker out of docker
- 젠킨스의 docker가 아닌, 호스트의 docker를 젠킨스에서 사용할 수 있도록 한다.
- docker in docker
- 젠킨스의 docker image 내부에 docker를 추가로 설치한다.
둘 중 어떤 것을 쓸 지 고민해보고 찾아보다가, dood로 결정했다.
아무래도 호스트의 docker를 바로 쓰는 것이 did보다 더 쾌적할 것으로 보인다.
또한, 대부분이 dood를 권장한다. 정확히는, did를 권장하지 않는다 한다.
docker buildx와 dood
단, docker buildx 를 이용해서 dood 빌드하려는 경우 조금 일이 복잡해진다.
- 젠킨스 docker 에 volume으로 dood를 위해 다음 폴더를 마운트한다.
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- 하지만, docker buildx를 사용하려면 추가적으로 다음 폴더를 마운트한다.
- /usr/libexec/docker/:/usr/libexec/docker/
번외
이 때 docker buildx 명령어를 실행하려고 하면 빌드 인스턴스가 없다고 한다.
- 따라서 jenkins 빌드 시 빌드 인스턴스를 체크하고 생성해준다.
# Set a variable for the builder instance name
BUILDER_NAME=jenkins-buildx-builder
# Check if the builder already exists
BUILDER_EXISTS=$(docker buildx ls | grep $BUILDER_NAME || true)
# If the builder does not exist, create it and use it
if [[ -z "$BUILDER_EXISTS" ]]; then
docker buildx create --name $BUILDER_NAME --use
else
docker buildx use $BUILDER_NAME
fi
- 이후 기존 쓰던 docker buildx 명령어처럼 사용하면, 완료.
docker buildx build --push \\
--platform $ARCHS \\
-t $TAGS \\
--build-arg SOURCE_BRANCH=$SOURCE_BRANCH \\
--build-arg SOURCE_REVISION=$SOURCE_REVISION \\
--build-arg RES_PROJECT=$RES_PROJECT \\
--build-arg RES_REVISION=$RES_REVISION \\
-f Dockerfile .
'연구한 이야기 > 문제 해결 이야기' 카테고리의 다른 글
Android Studio NDK breakpoint가 잡히지 않아요! (0) | 2024.03.02 |
---|---|
dockerfile은 죄가 없다. (4) | 2024.02.24 |
CMake 와 static library에서의 종속성 관리 (0) | 2023.12.16 |
서버 스트레스테스트 시 일정 주기로 멈춰요! (0) | 2023.12.09 |
docker exec format error (0) | 2023.12.09 |