이번 글에서는 Docker Daemon 서비스를 설정하고 관리하는 방법을 다뤄보겠습니다. Docker 서비스를 시작, 중지 및 상태 확인하는 방법과 더불어 Docker 데몬을 직접 실행하고 구성하는 방법을 알아보겠습니다.
우리는 Linux 환경에서 Docker를 관리하고 있으며, systemctl 기반의 서비스 구성을 사용하고 있습니다. Docker 서비스를 관리하기 위한 기본 명령은 다음과 같습니다:
systemctl start docker
: Docker 서비스를 시작합니다.systemctl status docker
: Docker 서비스의 상태를 확인합니다.systemctl stop docker
: Docker 서비스를 중지합니다.이 명령들은 시스템이 부팅될 때 Docker 데몬을 자동으로 시작하도록 설정할 수 있습니다. dockerd
명령을 사용하여 Docker 데몬을 포그라운드에서 직접 실행할 수도 있습니다. 이는 주로 Docker 데몬이 제대로 시작되지 않을 때 문제를 해결하고 디버깅하기 위해 사용됩니다. 이 명령을 사용하면 데몬 로그가 실시간으로 화면에 출력됩니다.
추가 정보를 출력하려면 --debug 플래그를 사용하십시오. 디버그 플래그를 추가하면 출력에 더 많은 세부 정보와 디버그 로그가 포함됩니다.
Docker 데몬이 시작되면 /var/run/docker.sock
경로에 있는 내부 Unix 소켓에서 대기합니다. 이는 로그 출력에서도 확인할 수 있습니다. Unix 소켓은 동일한 호스트 내의 다른 프로세스 간 통신을 위한 IPC(Inter-Process Communication) 메커니즘입니다. 이는 Docker 데몬이 동일한 호스트 내에서만 접근 가능하도록 설정되어 있으며, Docker CLI가 이 소켓을 통해 Docker 데몬과 상호 작용하도록 구성되어 있음을 의미합니다.
Docker CLI가 설치된 다른 호스트에서 Docker 데몬에 연결해야 하는 상황을 가정해봅시다. 예를 들어, Docker 호스트는 인프라 내에 있는 서버이고, 연결을 시도하는 호스트는 로컬 PC입니다. 기본 설정에서는 Docker 데몬이 Unix 소켓에서만 대기하므로 외부에서 접근할 수 없습니다.
이를 해결하기 위해 Docker 데몬 명령을 실행할 때 -H
옵션을 사용하여 Docker 데몬을 TCP 인터페이스에서 대기하도록 설정할 수 있습니다. 예를 들어, 호스트의 IP 주소가 192.168.1.10
이고 포트가 2375
라면 다음과 같이 설정합니다:
dockerd -H tcp://192.168.1.10:2375
이제 Docker 데몬은 외부에서 192.168.1.10:2375
를 통해 접근할 수 있습니다. 다른 호스트에서는 DOCKER_HOST
환경 변수를 설정하여 Docker 명령을 실행할 수 있습니다.
export DOCKER_HOST=tcp://192.168.1.10:2375
기본적으로 Docker 데몬은 암호화되지 않은 트래픽을 사용합니다. 따라서 Docker API 서버를 외부에서 접근 가능하도록 설정할 때는 보안에 각별히 주의해야 합니다. 특히, 호스트가 인터넷에 노출되어 있을 경우 누구나 이 호스트에서 컨테이너를 실행할 수 있으므로 매우 위험합니다.
Docker 데몬의 암호화를 활성화하려면 TLS 인증서 쌍을 생성하고 다음과 같이 --tls 플래그와 인증서 경로를 지정합니다:
dockerd -H tcp://192.168.1.10:2376 --tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/server-cert.pem --tlskey=/path/to/server-key.pem
이렇게 설정하면 Docker 데몬은 암호화된 트래픽을 사용하여 외부에서 접근할 수 있습니다. 표준 포트는 2376으로 설정됩니다.
이제 이러한 설정을 명령줄 옵션이 아닌 구성 파일로 옮겨보겠습니다. 기본 구성 파일 위치는 /etc/docker/daemon.json
입니다. 이 파일은 기본적으로 생성되지 않으므로, 필요하다면 직접 생성해야 합니다.
구성 파일은 JSON 형식으로 작성되며, 예를 들어 다음과 같습니다:
{
"hosts": ["tcp://192.168.1.10:2376"],
"tlsverify": true,
"tlscacert": "/path/to/ca.pem",
"tlscert": "/path/to/server-cert.pem",
"tlskey": "/path/to/server-key.pem"
}
이 파일이 구성되면 dockerd 명령을 실행할 때 매개변수를 전달할 필요가 없습니다. 단, 명령줄 옵션과 구성 파일에 모두 같은 설정이 지정된 경우 충돌이 발생할 수 있습니다. 이 경우 Docker 서비스는 오류를 발생시키며, 값 간의 충돌을 해결해야 합니다.
Docker Daemon 서비스를 설정하고 관리하는 방법에 대해 알아보았습니다. 기본적인 서비스 관리 명령어부터 시작하여, 외부 접근 설정 및 보안 고려사항, 그리고 구성 파일을 통한 설정 방법까지 다루었습니다. 이를 통해 Docker 환경을 더욱 효과적으로 관리할 수 있기를 바랍니다.