본문 바로가기

Tools/Docker

[Docker] 'insecure-registry' 설정

 

문제 상황

 최근 내가 진행하고 있는 프로젝트 중 하나는, 데이터 분석 및 추후 머신러닝 적용의 가능성으로 인해 파이썬으로 작성되고 있다. 사실 파이썬은 비교적 자잘하고 귀찮은, 비교적 중요도가 낮은 작업을 자동화 하는데 사용했을 뿐 제대로 프로젝트를 빌드해서 실행파일을 만들어본 경험은 없었다. 때문에 꽤 많은 의존성을 어떻게 통합하여 빌드해야하는지 고민하게 되었는데, 관련 'Best Practice' 를 찾는데 너무 많은 시간적 비용을 들이는 것은 부적합 하다고 판단했고 결국 'Docker'를 사용해 이미지를 빌드하기로 결정했다.

 

 빌드 서버는 사내 개발망에 위치하고 있다. 따라서 도커 공식 레지스트리에 대한 접근 제한으로 인해, 파이썬 빌드에 필요한 'python' 베이스 이미지를 당겨(pull)올 수 없었다. 때문에 아래와 같은 절차를 통해 사내 Devops 팀이 구축한 사설 레지스트리에 해당 베이스 이미지를 push 하는 작업을 진행 했다.

 

1. 도커 공식 레지스트리 로부터 이미지 pull

 

$ docker pull python

 

2. tag 생성

 

$ docker tag python:3 private-registry:5000/python:3

 

3. 생성한 tag 를 사설 레지스트리에 push

 

$ docker push private-registry:5000/python:3

 

위의 과정 자체는 잘못된 것이 없었으나, 아래와 같은 오류로 push 가 제대로 동작하지 않았다. 

 

뭐 대충 레지스트리 인증서 관련 오류

 

해결

간단하다. 도커 엔진 데몬의 설정파일이라고 할 수 있는 'daemon.json' 에 'insecure-registries' 설정을 추가하는 방법. 말 그대로 보안 설정을 'passing' 하는 레지스트리를 등록하는 것이다. 해당 파일의 위치는 플랫폼 마다 다르기 때문에 이 곳을 참고하면 좋을 것 같다.

 

{
  "insecure-registries" : [ "private-registry:5000" ]
}

 

설정 후, `docker info` 명령어를 통해 적용 여부를 확인할 수 있다.

 

 

Mac OS 에선 상단에 노출된 Background 프로그램 아이콘을 통해 설정이 가능하다. - Window 도 비슷할 듯? -

 

 

'Docker Engine' 탭으로 접근하여 설정

 

임시 방편?

 사실 이런 방법은 좋지 않다. 'insecure' 라는 말 자체가 '불안정한' 이라는 뜻을 가지고 있지 않은가. 때문에 공식 문서에서는 아래와 같이 신뢰할 수 있는 CA(인증 기관)에서 발급된 TLS 인증서를 통해 레지스트리에 대한 보안 설정을 적용하라고 권장하고 있다.

 

 위의 말 그대로, insecure registry 적용을 하게 되면 귀찮은 추가 설정이 필요 없지만 때에 따라 매우 중요한 이미지들이 저장 될 수 있는 사설 레지스트리 보안에 구멍이 생기게 된다.

 

 나의 경우는 해당 사설 레지스트리가 사내 망에 꼭꼭(?) 숨겨져 있고, 고객 개인정보에 접근하는 식의 보안에 민감한 이미지도 없으며, 조직내 관례에 따라서 따로 보안 설정을 하지 않았기 때문에 이번과 같은 방법을 사용했다. 하지만 모든 것은 케바케 이므로, 도커 사설 레지스트리는 조직 또는 팀내 명확한 룰을 바탕으로 안전하게 사용하는게 좋겠다. 너무 당연한 이야기. - 펀쿨섹? -