Enable the Docker Remote API with Secure Connection! (안전하게 도커 원격 작업하기)
1. 안전하게 도커 원격
작업하기
Protect the Docker Daemon Socket
https://github.jholee.kr
jho.lee@kakao.com
github.jholee.kr
2. 0. 준비
• 도커 데몬이 설치되어 있는 서버 🐳🖥
• (예시: Ubuntu 18.04LTS, Docker > 19.03)
• 도커 클라이언트가 설치되어 있는 클라이언트 💻
• (예시: OS X 10.15.3, Docker > 19.03)
github.jholee.kr
필요한 것
3. 0. 준비
• 서버에서 해야하는 작업일 경우에는 고래 🐳가
나타납니다.
• 클라이언트에서 해야하는 작업일 경우에는
노트북 💻이 나타납니다.
github.jholee.kr
여기에서는…
4. 1. CA 인증서
서버와 클라이언트 중간에서 인증 기관이 될, CA(Certificate Authority) 인증서의 key 파일을 생성해줍니다.
기억할 수 있는 암호문을 입력해주세요.
github.jholee.kr
CA key 파일 생성
5. 1. CA 인증서
방금 입력했던 암호문을 입력해주세요.
그 후 인증서 정보 입력란에 다른 값은 괜찮으나, $HOST 부분에는 꼭! 사용할 도메인 혹은 ip 주소를 넣어주세요.
CA의 key와 cert 파일이 생성되었습니다.
github.jholee.kr
CA cert 파일 생성
6. 2. Server 인증서
이번에는 Server 인증서를 생성합니다.
먼저 Key 파일을 만들어주세요.
github.jholee.kr
Server key 생성
7. 2. Server 인증서
CA에 인증서 발급 신청 서류가 되는 csr 파일과 기타 정보들을 포함한 extfile.cnf 를 생성해주세요.
앞에서와 마찬가지로 Docker Remote API를 이용할 도메인을 $HOST부분에 넣어주시고,
도메인 외에 ip로도 접속하신다면 해당 ip 주소도 적어주세요.
github.jholee.kr
Server csr 및 기타 설정 파일 생성
8. 2. Server 인증서
생성한 server.csr과 ca.pem, ca-key.pem 을 기반으로 Server cert 파일을 생성합니다.
CA key 생성 시에 넣었던 암호문이 필요해요.
여기까지 하면 ca.pem, ca-key.pem, server-key.pem, server-cert.pem 이 생성됩니다.
github.jholee.kr
Server cert파일 생성
9. 3. Client 인증서
이번에는 client 인증서 파일들을 생성합니다.
Server 관련 파일들을 생성할 때와 과정은 유사해요.
github.jholee.kr
Client key 생성
10. 3. Client 인증서
이번에는 도메인 이름을 넣는 대신, client라는 이름을 넣어서 client임을 알려줍니다.
github.jholee.kr
Client csr 및 기타 설정 파일 생성
12. 4. 생성 마무리
테스트를 해보죠.
dockerd 명령이 안될 경우에는, docker -d 를 대신 넣어주세요.
github.jholee.kr
테스트
…
13. 4. 생성 마무리
실행이 잘 되었다면, 인증서 생성에 사용하였던 재료들은 모두 제거해주세요.
그리고 cert 파일들은 사용자 관계없이 읽을 수 있도록 권한 설정 해주시고, key 파일들은 나만이 읽을 수 있도록 설정해주세요.
github.jholee.kr
설정에 사용된 파일들 제거, key&cert 파일 보호 설정
14. 4. 생성 마무리
docker --help 를 입력하시면, 위와 같이 나옵니다. 여기에서 인증서 파일의 기본 위치를 확인해주세요.
github.jholee.kr
인증서 저장할 위치 확인
15. 4. 생성 마무리
이제 앞에서 생성한 파일들을 서버와 클라이언트에 나눠주세요.
ca.pem은 모두 사용하며, cert.pem과 key.pem은 각각 자신의 것을 사용합니다.
$DOCKER_CERT는 임의로 지정 가능합니다.
앞서 docker 도움말에서 확인하였던 기본 디렉토리에 두시는 것보다, 직접 지정해주시는 것을 추천합니다.
Server Client
ca (공통) $DOCKER_CERT/ca.pem ~/.docker/ca.pem
cert $DOCKER_CERT/server-cert.pem ~/.docker/cert.pem
key $DOCKER_CERT/server-key.pem ~/.docker/key.pem
github.jholee.kr
인증서 파일 분배
16. 5. 서버 도커 데몬 설정
/lib/systemd/system/docker.service 에서 execStart의 내용을 위와 같이 추가해주세요. (노란 박스 부분)
기본 디렉토리에 서버 인증서 파일을 저장하신 경우에는 --tlsverify 와 -H tcp://$HOST:2376 만 추가해도 됩니다.
github.jholee.kr
데몬 서비스 파일 수정
17. 5. 서버 도커 데몬 설정
Ubuntu 서버 기준, 수정한 docker.service의 반영을 위해 다음 명령어들을 실행해주세요.
sudo systemctl daemon-reload
sudo systemctl restart docker
github.jholee.kr
도커 데몬 재시작
18. 7. 클라이언트 설정
클라이언트에 ca.pem, cert.pem, key.pem을 복사해줍니다.
(기본 위치 추천)
github.jholee.kr
인증서 복사
19. 7. 클라이언트 설정
Docker Remote API 의 사용을 강제하면, VS Code 연동 시에 별다른 설정 없이 로컬에서 사용하는 것처럼 바로 사용 가능합니다.
~/.bashrc (or ~/.zshrc or …) 에서 위 문장들을 추가해줍니다.
(이 과정을 하지 않으면, 매 접속 시에 -H $HOST 과 --tlsverify 옵션을 넣어주어야 합니다.)
github.jholee.kr
(옵션) Docker Remote API 사용 강제하기
20. 7. 클라이언트 설정
docker ps -a 를 입력해 테스트해봅시다.
서버 내 도커에서 실행되는 프로세스 목록이 뜬다면 성공입니다.
(인증서 파일들이 기본 위치에 있지 않은 경우, --tlscert, --tlskey 등의 명령어와 함께 직접 파일 위치를 지정해주어야 합니다.
github.jholee.kr
Docker 접속!