Jenkins 를 Docker Container 로 사용 중
Docker build 와 같은 Docker Command 사용을 해야 함
bash: docker: command not found
도커 명령어가 안된다..
Docker 구성 삼대장
Container 내부 격리된 공간에 Docker daemon 을 설치하여 사용 하는 방법
Docker 에서는 해당 방법을 권장하지 않는다.
이유는 해당 방법을 사용하려면 Container 가 privilieged mode로 실행되어야 하기 때문
$ docker run --privileged --name jenkins-slave
privileged 옵션을 사용하면 해당 Container 는 Host 의 리눅스 커널 자원을 모두 사용 할 수 있게 되어 보안적으로 좋지 않으며 docker command 를 위해 모든 권한을 주는 것도 알맞은 조치가 아님
그래서 권장하는 방법은 Docker 소켓을 Mount 하는 방법
해당 방법을 구현하기 위해서는 3가지의 작업이 필요
$ sudo apt update
$ sudo apt-get install -y ca-certificates \
curl \
software-properties-common \
apt-transport-https \
gnupg \
lsb-release
해당 작업은 볼륨 설정을 통해 적용 가능
docker run -d --name jenkins-slve -v /var/run/docker.sock:/var/run/docker.sock
docker 그룹이 이미 존재할 수 있기 때문에 삭제
groupdel docker groupadd -g {호스트 서버 도커그룹의 GID} -f docker
리눅스의 uid와 gid
컨테이너 내부에서 권한 관리를 할 때 uid, gid 를 사용
컨테이너로 분리된 프로세스들은 하나의 OS 커널을 공유하여 사용하는데 서버 전체의 uid, gid 를 커널이 관리하고 있음
그렇지만 username 이나 group name 과 같은 식별값은 커널이 아니라 외부 툴에 의해 관리되고 있기 때문에 ( ex. /etc/passwd, LDAP 등 ) 같은 이름의 docker group 이 호스트와 컨테이너 내부에 존재하더라도 gid 값이 다르면 동일한 권한이 들어가지 않기 때문에 이를 방지 하기 위해 기존 docker 그룹을 삭제하고 gid 값을 부여하여 docker 그룹을 새로 생성함
usermod -aG docker jenkins