2019년 4월 25일 목요일

CentOS 7 업그레이드 후 docker 설치 및 docker pull 실행에 성공하다

모든 문제는 SSL 인증서로 귀결된다. 회사 프록시 서버가 중간 과정에서 인증서를 건드리면서 Somansa라는 '비공인' 인증기관의 것으로 바꾸어서 내부 클라이언트로 전달하고, 응용프로그램에서는 이를 인정하지 못하겠다며 거부한다. 자체 인증서에 대한 CA bundle 위치를 제시하려 해도 응용 프로그램마다 그 방법이 전부 제각각이라는 것이 문제이다.

지난번 글 회사 프록시 서버 뒤에서 docker pull을 실행하지 못하는 문제에 도전해 보자는 결국 성공하지 못했다. 인증서 문제가 발생하지 않는 컴퓨터(예를 들어 윈도우에 설치한 docker)에서 이미지를 받은 뒤 이를 리눅스 서버로 옮겨서 docker run을 하는 우회 방법도 시도하였지만 만족스럽지 않았다. 그래서 CentOS 7으로 업그레이드를 하는 것에서 모든 것을 다시 시작하기로 했다. CentOS 6에서 설치 가능한 docker는 너무 옛날 것이고, 인터넷에서 찾아낸 사용자 지정 CA bundle 설치법도 잘 먹히질 않았다.

Docker 자체를 설치하는 것으로부터 시작해 본다. 다음의 docker 공식 문서 사이트를 참조하였다.

Get Docker CE for CentOS

시작부터 순탄하지 않다. https://로 시작되는 주소에 있는 repo 파일을 가져오는 것부터가 문제다.

# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#60 - "Peer's certificate issuer has been marked as not trusted by the user.

wget(--no-check-certificate)으로 repo 파일을 받은 다음, 각 엔트리에 대해서 sslverity=0을 삽입한다. 이렇게 수정한 파일을 가지고 다시 yum-config-manager를 실행하라. 그리고 이후 과정을 통해서 docker 관련 패키지를 설치한 다음에 최초의 docker pull 명령을 실행하면 익숙한 에러 메시지가 나온다('x509: certificate signed by unknown authority').

# yum-config-manager --add-repo docker-ce.repo
# yum install docker-ce docker-ce-cli containerd.io
# systemctl start docker
# docker pull hello-world
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority

이제부터는 방법을 잘 알고 있다. CentOS 6 시절에 너무나 여러번 반복을 했기 때문이다. 물론 실패했지만... 하지만 CentOS 7에 깨끗한 docker CE를 설치했다면 이야기는 달라진다.

# cp _path_to_/Somansa_ROOT_CA.cer /etc/pki/ca-trust/source/anchors/
# update-ca-trust force-enable
# update-ca-trust extract
# systemctl restart docker
# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

만약 내가 전산망 보안이 까다로운 회사로 오지 않았더라면 프록시 서버로 보호받는(?) 내부에서 SSL 인증서와 엮인 어려움을 전혀 알지 못했을 것이고, CentOS 7 업그레이드도 적어도 반년 뒤에나 시도했을 것이다. 어려움은 도전을 낳고 많은 경우에 해결이 된다. 속이 다 시원하다!

댓글 없음: