Use Docker in Custom Image for AWS CodeBuild
in Development on DevOps
AWS CodeBuild에서 Custom Image로 빌드하면서 Docker 사용하기
AWS CodeBuild에서 docker build
와 같은 docker를 사용하기 위해서는 Privileged: true
로 설정해야 한다. 그렇지 않으면
Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?
위와 같은 오류가 발생한다.
하지만 AWS에서 제공하는 CodeBuild 이미지가 아닌 Custom Image를 사용하는 경우 Privileged: true
로 설정하더라도 위 오류가 계속 발생한다. 그 이유는 AWS에서는 본인들이 제공하는 이미지가 아닌 고객이 직접 생성한 이미지에 대해서는 신뢰를 할 수 없기 때문에 과도한 권한을 줄 수가 없다고 한다.
이것의 해결방법은 의외로 간단하다. buildspec에서 docker를 직접 실행시켜주면 된다.
version: 0.2
phases:
install:
commands:
- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
- timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
pre_build:
commands:
- docker build -t helloworld .
build:
commands:
- docker images
- docker run helloworld echo "Hello, World!"
위 예제코드처럼 phases.install.commands
에 2줄의 명령어만 추가해주면 정상동작 한다.
참고: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker-custom-image.html
이 글이 도움이 되셨다면 공감 및 광고 클릭을 부탁드립니다 :)