Docker 컨테이너 실행하기

DockerBeginner
지금 연습하기

소개

이번 실습에서는 빅토리아 시대의 골동품 상인이 되어, 현대 기술인 Docker 컨테이너를 활용해 역사적인 유물을 운송하고 전시하는 흥미로운 시나리오를 경험하게 됩니다.

1880 년대 런던에서 전 세계의 귀중한 유물을 수집하는 존경받는 골동품 상인이라고 상상해 보세요. 기존의 낡은 나무 상자나 진열장 대신, 귀중한 소장품을 그 어느 때보다 효율적이고 안전하게 포장하고 운송하며 전시할 수 있는 혁신적인 기술인 "Docker 컨테이너"를 발견했습니다.

이 실습을 마치면 Docker 컨테이너의 기본 개념을 이해하고, 이를 사용하여 애플리케이션을 실행하는 방법을 익히게 됩니다. 이는 곧 여러분의 귀중한 골동품 컬렉션을 관리하고 전시하는 능력을 갖추게 됨을 의미합니다.

Docker 환경 설정하기

이 단계에서는 컨테이너를 실행하기 위해 Docker 환경을 올바르게 설정합니다. 이는 마치 골동품 작업장에 필요한 도구와 장비를 갖추는 과정과 같습니다.

  1. 터미널에서 다음 명령어를 실행하여 Docker 를 설치합니다.

    sudo apt update
    sudo apt install docker.io
    

    첫 번째 명령어는 패키지 목록을 업데이트하여 최신 버전의 Docker 를 설치할 수 있도록 준비하며, 두 번째 명령어는 Docker 를 직접 설치합니다. sudo 접두사는 설치에 필요한 관리자 권한을 부여합니다.

  2. Docker 설치가 완료되면, 설치된 버전과 실행 중인 데몬이 일치하도록 Docker 서비스를 재시작합니다.

    sudo systemctl restart docker
    

    이 명령어는 새로 설치된 패키지 버전으로 Docker 데몬을 다시 로드합니다. Docker 가 아직 실행 중이지 않았다면 restart 명령어가 서비스를 시작해 줍니다. 이를 통해 첫 번째 컨테이너를 실행할 때 발생할 수 있는 클라이언트와 데몬 API 버전 불일치 문제를 방지할 수 있습니다.

  3. Docker 가 성공적으로 실행 중인지 확인합니다.

    sudo systemctl status docker
    

    이 명령어는 Docker 가 활성화되어 정상적으로 작동 중인지 확인합니다. 출력 결과에서 active (running) 상태를 확인하면 Docker 환경이 준비된 것입니다. 만약 inactive 상태이거나 오류 메시지가 나타나면 sudo systemctl restart docker를 다시 실행한 후 계속 진행하세요.

  4. 매번 sudo를 사용하지 않고도 Docker 명령어를 실행할 수 있도록, 현재 사용자를 Docker 그룹에 추가합니다.

    sudo usermod -aG docker $USER
    

    참고: 이 명령어를 실행한 후에는 변경 사항을 적용하기 위해 로그아웃 후 다시 로그인해야 할 수도 있습니다. 이번 실습에서는 호환성을 위해 Docker 명령어 앞에 sudo를 계속 사용하겠습니다.

Hello-World 컨테이너 실행하기

환경 설정이 완료되었으니, 이제 첫 번째 Docker 컨테이너인 "hello-world" 예제를 실행해 보겠습니다. 이는 새로운 컨테이너 기술이 제대로 작동하는지 확인하기 위해 첫 번째 유물을 전시하는 과정과 같습니다.

  1. Docker Hub 에서 "hello-world" 이미지를 가져옵니다 (pull).

    sudo docker pull hello-world
    

    이 명령어는 Docker 이미지의 공개 저장소인 Docker Hub 에서 hello-world 이미지를 다운로드합니다. 이는 먼 나라에서 첫 번째 유물을 입수하는 것과 같습니다. Docker Hub 는 다양한 용도의 컨테이너를 찾을 수 있는 시장과 같은 곳입니다.

  2. "hello-world" 컨테이너를 실행합니다.

    sudo docker run hello-world
    

    이 명령어는 hello-world 이미지를 기반으로 컨테이너를 생성하고 시작합니다. 컨테이너는 간단한 메시지를 출력한 후 종료되는 프로그램을 실행합니다. 빅토리아 시대 시나리오에 비유하자면, 새로운 컨테이너 시스템이 제대로 작동하는지 확인하기 위해 첫 번째 유물을 잠시 전시하는 것과 같습니다. 만약 클라이언트와 데몬 API 버전 불일치 오류가 발생하면 sudo systemctl restart docker로 서비스를 재시작한 후 다시 실행하세요.

  3. 컨테이너가 성공적으로 실행되었는지 출력 내용을 확인합니다. "Hello from Docker!"로 시작하는 메시지와 설명 문구가 보일 것입니다. 이는 다음을 의미합니다.

    • Docker 가 올바르게 설치됨
    • 시스템이 컨테이너를 성공적으로 생성할 수 있음
    • Docker Hub 에서 이미지를 다운로드할 수 있음
  4. 종료된 컨테이너를 포함한 모든 컨테이너 목록을 확인합니다.

    sudo docker ps -a
    

    이 명령어는 이미 종료된 hello-world 컨테이너를 포함한 모든 컨테이너를 보여줍니다. 컨테이너 ID, 생성된 이미지, 생성 시간, 현재 상태 등의 세부 정보를 확인할 수 있습니다.

Nginx 웹 서버 배포하기

이 단계에서는 Docker 컨테이너를 사용하여 Nginx 웹 서버를 배포합니다. 빅토리아 시대 시나리오에서 이는 방문객들에게 가장 귀중한 골동품 (웹 콘텐츠) 을 보여주기 위해 우아한 진열장 (Nginx) 을 설치하는 것과 같습니다.

  1. Docker Hub 에서 Nginx 이미지를 가져옵니다.

    sudo docker pull nginx
    

    이 명령어는 Docker Hub 에서 공식 Nginx 이미지를 다운로드합니다. Nginx 는 HTML 콘텐츠를 제공할 수 있는 인기 있는 웹 서버입니다. 이는 골동품 컬렉션을 위한 고급 진열장을 마련하는 것과 같습니다.

  2. 호스트의 80 번 포트를 컨테이너의 80 번 포트에 매핑하여 Nginx 컨테이너를 분리 모드 (detached mode) 로 실행합니다.

    sudo docker run -d -p 80:80 nginx
    

    명령어 상세 설명:

    • run: 새 컨테이너를 생성하고 시작합니다.
    • -d: 컨테이너를 분리 모드 (백그라운드) 에서 실행합니다.
    • -p 80:80: 호스트 머신의 80 번 포트를 컨테이너의 80 번 포트에 연결하여 웹 트래픽이 Nginx 서버에 도달할 수 있게 합니다.
    • nginx: 사용할 이미지를 지정합니다.

    이는 전시장에 진열장을 배치하고 방문객들이 골동품을 볼 수 있도록 준비하는 과정입니다.

  3. Nginx 컨테이너가 실행 중인지 확인합니다.

    sudo docker ps
    

    이 명령어는 실행 중인 모든 컨테이너를 보여줍니다. 목록에서 Nginx 컨테이너가 활발히 실행 중임을 확인할 수 있습니다.

  4. 상단 메뉴에서 웹 서비스 매핑을 추가하고 포트 매핑을 80 으로 설정합니다. Nginx 웹 서버가 성공적으로 실행 중이라면, 실습 환경이 자동으로 서버의 임의 URL 로 이동하며 기본 Nginx 환영 페이지가 나타날 것입니다.

  5. 선택 사항: 브라우저에서 수동으로 Nginx 서버에 접속하려면 http://localhost 또는 해당 머신의 IP 주소로 이동하면 됩니다.

  6. 문제가 발생하면 컨테이너 로그를 확인할 수 있습니다.

    sudo docker logs <container_id>
    

    <container_id> 부분에 docker ps 명령어로 확인한 Nginx 컨테이너의 ID 를 입력하세요.

요약

이번 실습에서는 Docker 컨테이너 실행의 기본 개념을 배웠습니다. 빅토리아 시대의 골동품 상인이라는 역사적 상황을 시뮬레이션하며, Docker 의 실행 기능을 활용하는 실무 경험을 쌓았습니다.

다음 내용을 학습했습니다:

  • Docker 환경 설정
  • Docker Hub 에서 이미지 가져오기
  • 포그라운드 및 분리 모드에서 컨테이너 실행
  • 컨테이너 포트를 호스트 머신에 노출
  • 컨테이너 상태 확인

이러한 기술은 컨테이너 기술의 기초이며, 골동품 상인 시나리오를 넘어 다양한 애플리케이션에 적용할 수 있습니다. 현대 환경에서는 이와 동일한 기술을 사용하여 간단한 웹 서버부터 복잡한 마이크로서비스 아키텍처까지 다양한 애플리케이션을 배포합니다.

애플리케이션과 그 의존성을 휴대 가능한 컨테이너로 패키징하는 능력은 소프트웨어 배포 및 관리 방식을 혁신했습니다. 마치 표준화된 해상 컨테이너가 글로벌 무역을 변화시킨 것과 같습니다. 빅토리아 시대의 골동품 상인이 말했듯이, "이 놀라운 Docker 컨테이너들이 우리의 보물을 세상에 선보이는 방식을 완전히 바꿔놓을 것입니다!"