소개
이번 실습에서는 빅토리아 시대의 골동품 상인이 되어, 현대 기술인 Docker 컨테이너를 활용해 역사적인 유물을 운송하고 전시하는 흥미로운 시나리오를 경험하게 됩니다.
1880 년대 런던에서 전 세계의 귀중한 유물을 수집하는 존경받는 골동품 상인이라고 상상해 보세요. 기존의 낡은 나무 상자나 진열장 대신, 귀중한 소장품을 그 어느 때보다 효율적이고 안전하게 포장하고 운송하며 전시할 수 있는 혁신적인 기술인 "Docker 컨테이너"를 발견했습니다.
이 실습을 마치면 Docker 컨테이너의 기본 개념을 이해하고, 이를 사용하여 애플리케이션을 실행하는 방법을 익히게 됩니다. 이는 곧 여러분의 귀중한 골동품 컬렉션을 관리하고 전시하는 능력을 갖추게 됨을 의미합니다.
Docker 환경 설정하기
이 단계에서는 컨테이너를 실행하기 위해 Docker 환경을 올바르게 설정합니다. 이는 마치 골동품 작업장에 필요한 도구와 장비를 갖추는 과정과 같습니다.
터미널에서 다음 명령어를 실행하여 Docker 를 설치합니다.
sudo apt update sudo apt install docker.io첫 번째 명령어는 패키지 목록을 업데이트하여 최신 버전의 Docker 를 설치할 수 있도록 준비하며, 두 번째 명령어는 Docker 를 직접 설치합니다.
sudo접두사는 설치에 필요한 관리자 권한을 부여합니다.Docker 설치가 완료되면, 설치된 버전과 실행 중인 데몬이 일치하도록 Docker 서비스를 재시작합니다.
sudo systemctl restart docker이 명령어는 새로 설치된 패키지 버전으로 Docker 데몬을 다시 로드합니다. Docker 가 아직 실행 중이지 않았다면
restart명령어가 서비스를 시작해 줍니다. 이를 통해 첫 번째 컨테이너를 실행할 때 발생할 수 있는 클라이언트와 데몬 API 버전 불일치 문제를 방지할 수 있습니다.Docker 가 성공적으로 실행 중인지 확인합니다.
sudo systemctl status docker이 명령어는 Docker 가 활성화되어 정상적으로 작동 중인지 확인합니다. 출력 결과에서
active (running)상태를 확인하면 Docker 환경이 준비된 것입니다. 만약inactive상태이거나 오류 메시지가 나타나면sudo systemctl restart docker를 다시 실행한 후 계속 진행하세요.매번
sudo를 사용하지 않고도 Docker 명령어를 실행할 수 있도록, 현재 사용자를 Docker 그룹에 추가합니다.sudo usermod -aG docker $USER참고: 이 명령어를 실행한 후에는 변경 사항을 적용하기 위해 로그아웃 후 다시 로그인해야 할 수도 있습니다. 이번 실습에서는 호환성을 위해 Docker 명령어 앞에
sudo를 계속 사용하겠습니다.
Hello-World 컨테이너 실행하기
환경 설정이 완료되었으니, 이제 첫 번째 Docker 컨테이너인 "hello-world" 예제를 실행해 보겠습니다. 이는 새로운 컨테이너 기술이 제대로 작동하는지 확인하기 위해 첫 번째 유물을 전시하는 과정과 같습니다.
Docker Hub 에서 "hello-world" 이미지를 가져옵니다 (pull).
sudo docker pull hello-world이 명령어는 Docker 이미지의 공개 저장소인 Docker Hub 에서 hello-world 이미지를 다운로드합니다. 이는 먼 나라에서 첫 번째 유물을 입수하는 것과 같습니다. Docker Hub 는 다양한 용도의 컨테이너를 찾을 수 있는 시장과 같은 곳입니다.
"hello-world" 컨테이너를 실행합니다.
sudo docker run hello-world이 명령어는 hello-world 이미지를 기반으로 컨테이너를 생성하고 시작합니다. 컨테이너는 간단한 메시지를 출력한 후 종료되는 프로그램을 실행합니다. 빅토리아 시대 시나리오에 비유하자면, 새로운 컨테이너 시스템이 제대로 작동하는지 확인하기 위해 첫 번째 유물을 잠시 전시하는 것과 같습니다. 만약 클라이언트와 데몬 API 버전 불일치 오류가 발생하면
sudo systemctl restart docker로 서비스를 재시작한 후 다시 실행하세요.컨테이너가 성공적으로 실행되었는지 출력 내용을 확인합니다. "Hello from Docker!"로 시작하는 메시지와 설명 문구가 보일 것입니다. 이는 다음을 의미합니다.
- Docker 가 올바르게 설치됨
- 시스템이 컨테이너를 성공적으로 생성할 수 있음
- Docker Hub 에서 이미지를 다운로드할 수 있음
종료된 컨테이너를 포함한 모든 컨테이너 목록을 확인합니다.
sudo docker ps -a이 명령어는 이미 종료된 hello-world 컨테이너를 포함한 모든 컨테이너를 보여줍니다. 컨테이너 ID, 생성된 이미지, 생성 시간, 현재 상태 등의 세부 정보를 확인할 수 있습니다.
Nginx 웹 서버 배포하기
이 단계에서는 Docker 컨테이너를 사용하여 Nginx 웹 서버를 배포합니다. 빅토리아 시대 시나리오에서 이는 방문객들에게 가장 귀중한 골동품 (웹 콘텐츠) 을 보여주기 위해 우아한 진열장 (Nginx) 을 설치하는 것과 같습니다.
Docker Hub 에서 Nginx 이미지를 가져옵니다.
sudo docker pull nginx이 명령어는 Docker Hub 에서 공식 Nginx 이미지를 다운로드합니다. Nginx 는 HTML 콘텐츠를 제공할 수 있는 인기 있는 웹 서버입니다. 이는 골동품 컬렉션을 위한 고급 진열장을 마련하는 것과 같습니다.
호스트의 80 번 포트를 컨테이너의 80 번 포트에 매핑하여 Nginx 컨테이너를 분리 모드 (detached mode) 로 실행합니다.
sudo docker run -d -p 80:80 nginx명령어 상세 설명:
run: 새 컨테이너를 생성하고 시작합니다.-d: 컨테이너를 분리 모드 (백그라운드) 에서 실행합니다.-p 80:80: 호스트 머신의 80 번 포트를 컨테이너의 80 번 포트에 연결하여 웹 트래픽이 Nginx 서버에 도달할 수 있게 합니다.nginx: 사용할 이미지를 지정합니다.
이는 전시장에 진열장을 배치하고 방문객들이 골동품을 볼 수 있도록 준비하는 과정입니다.
Nginx 컨테이너가 실행 중인지 확인합니다.
sudo docker ps이 명령어는 실행 중인 모든 컨테이너를 보여줍니다. 목록에서 Nginx 컨테이너가 활발히 실행 중임을 확인할 수 있습니다.
상단 메뉴에서 웹 서비스 매핑을 추가하고 포트 매핑을 80 으로 설정합니다. Nginx 웹 서버가 성공적으로 실행 중이라면, 실습 환경이 자동으로 서버의 임의 URL 로 이동하며 기본 Nginx 환영 페이지가 나타날 것입니다.
선택 사항: 브라우저에서 수동으로 Nginx 서버에 접속하려면 http://localhost 또는 해당 머신의 IP 주소로 이동하면 됩니다.
문제가 발생하면 컨테이너 로그를 확인할 수 있습니다.
sudo docker logs <container_id><container_id>부분에docker ps명령어로 확인한 Nginx 컨테이너의 ID 를 입력하세요.
요약
이번 실습에서는 Docker 컨테이너 실행의 기본 개념을 배웠습니다. 빅토리아 시대의 골동품 상인이라는 역사적 상황을 시뮬레이션하며, Docker 의 실행 기능을 활용하는 실무 경험을 쌓았습니다.
다음 내용을 학습했습니다:
- Docker 환경 설정
- Docker Hub 에서 이미지 가져오기
- 포그라운드 및 분리 모드에서 컨테이너 실행
- 컨테이너 포트를 호스트 머신에 노출
- 컨테이너 상태 확인
이러한 기술은 컨테이너 기술의 기초이며, 골동품 상인 시나리오를 넘어 다양한 애플리케이션에 적용할 수 있습니다. 현대 환경에서는 이와 동일한 기술을 사용하여 간단한 웹 서버부터 복잡한 마이크로서비스 아키텍처까지 다양한 애플리케이션을 배포합니다.
애플리케이션과 그 의존성을 휴대 가능한 컨테이너로 패키징하는 능력은 소프트웨어 배포 및 관리 방식을 혁신했습니다. 마치 표준화된 해상 컨테이너가 글로벌 무역을 변화시킨 것과 같습니다. 빅토리아 시대의 골동품 상인이 말했듯이, "이 놀라운 Docker 컨테이너들이 우리의 보물을 세상에 선보이는 방식을 완전히 바꿔놓을 것입니다!"



