항상 시스템을 구축하다보면, 설치되어있는 패키지를 사용하는 것보다 내가 처음부터 구축하고 빌드하는 것이 호환성에 있어 안정적인 모습을 보여왔다.
그래서 이번에도 역시 기존에 설치된 Docker 관련 패키지가 있다면 제거한 후 진행하도록 하겠다.
sudo dnf remove docker docker-engine docker.io containerd runc
국룰 스텝 (패키지 매니저 업데이트)
sudo dnf update -y
Docker 설치를 위해 필요한 패키지를 설치한다.
yum-utils는 yum/dnf 관련 도구를 제공하며, Docker 설치를 위한 현재 글에서는 yum-config-manager를 사용하기 위해 필요하다.device-mapper-persistent-data와 lvm2는 Docker의 스토리지 드라이버 중 하나인 devicemapper를 지원하기 위해필요하다.sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
그 후 도커 설치를 위해 저장소를 추가한다.
기본 Rocky Linux 저장소에는 Docker 최신 버전이 포함되어 있지 않으므로, 공식 Docker 저장소를 추가해야 한다.
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
이제 Docker를 설치한다.
sudo dnf install -y docker-ce docker-ce-cli containerd.io
외부에서 Docker를 사용할 수 있도록 네트워크 관련 작업을 시행할 것이라면 방화벽을 열어주어야 한다.
sudo firewall-cmd --permanent --add-service=docker
sudo firewall-cmd --reload
하지만 나는 docker 서비스가 firewalld 서비스에 정의가 되어있지 않아 docker가 사용하는 포트를 직접 열어주고 docker 브리지 네트워크를 수동으로 허용해주었다.
위 방법이 뭔가 더 깔끔하고 유지보수에, 보안에 더 좋을 것 같은데 나중에 한번 찾아봐야겠다.
# HTTP 포트 80 허용
sudo firewall-cmd --permanent --add-port=80/tcp
# HTTPS 포트 443 허용
sudo firewall-cmd --permanent --add-port=443/tcp
# 브리지 네트워크 허용
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
다음 명령어로 Docker 서비스 시작 및 시작 프로그램으로 등록한다.
sudo systemctl start docker
sudo systemctl enable docker
Docker의 버전을 확인하고, Docker가 제대로 작동하는지 테스트하기 위해 'hello-world' 이미지를 실행해본다.
docker --version
sudo docker run hello-world
docker run hello-world 를 실행하면 ->
그 후 Docker를 사용할 때마다 sudo를 입력하는 것이 귀찮다면 docker 그룹에 사용자를 추가하면 된다.
sudo usermod -aG docker $USER
현재 세션에서는 변경 사항이 적용되지 않으므로 로그아웃 후 다시 로그인하거나, 새 세션을 열어야 적용된다.
Docker 정상 작동을 확인했으니 정상적으로 Docker 환경을 구축했다고 볼 수 있다. 이제 Docker에 서비스 배포와 Jenkins를 활용한 CI/CD 파이프라인을 구축해보자.