[Docker] 맥에 Docker Desktop 설치 - #2 튜토리얼 해설까지

    이전 글

    2023.04.08 - [본업/Docker] - [Docker] 맥에 Docker Desktop 설치 - #1 설치 까지만

    이전 포스팅에 이어 튜토리얼의 내용을 볼 것이다.


    Tutorial

    처음 Docker를 스터디 할 때 CLI 환경에서 진행했는데 당시에도 분명 Hello world를 출력하는 예제 컨테이너가 있었던 것 같다.

    어차피 모든 사용자가 해당 튜토리얼을 진행해도 모두 같은 시퀀스일테니 그냥 캡쳐해둔 내용만 간단히 짚고 넘어간다.

    1. Clone a repository

    튜토리얼의 지침을 직접 본인이 사용하는 터미널 애플리케이션을 통해 진행해도 되고, 아니면 우측에 임베드된 쉘을 통해서 진행해도 된다.

    좌측 지침 내용의 푸른색 코드 블럭을 클릭하면 자동으로 우측 쉘에 타이핑되는 것 같다.

    docker run --name repo alpine/git clone \ https://github.com/docker/getting-started.git
    • docker run : 지정된 docker 이미지를 사용해 새로운 컨테이너를 생성(create)
    • --name repo : 컨테이너 이름을 repo로 지정
    • alpine/git : 사용할 docker 이미지를 지정
      (참고로 alpine은 Linux 배포판 중 하나로 매우 가벼운 배포판이다)
    • clone \ https://github.com/docker/getting-started.git : 컨테이너 내부에서 실행되는 실제 명령

    정리하자면, alpine/git 이미지로 repo라는 새 컨테이너를 생성하고 시작한 다음 컨테이너 내부로 지정된 github 레포지토리를 복사(clone)한다는 명령어다.

    docker cp repo:/git/getting-started/ .
    • docker cp : 컨테이너와 로컬 파일 시스템 사이에서 파일이나 디렉토리를 복사
    • repo:/git/getting-started/ : 복사 출발지(source)를 지정
    • . : 복사 도착지(destination)을 지정

    정리하자면, repo 컨테이너에서 /git/getting-started 디렉토리를 로컬(내 맥북) 파일 시스템의 현재 작업 디렉토리(pwd)로 복사한다는 명령어다.

    2. Build the image

    cd getting-started

    이 명령어는 단순히 내 로컬(맥북)에서 getting-started 디렉토리로 이동한 것이다.

    참고로 현재 우측에 임베드 된 쉘의 현재 작업 위치(pwd)는 홈 디렉토리(~)다.

    docker build -t docker101tutorial .
    • docker build : Dockerfile 혹은 지정된 빌드 컨텍스트로부터 새 이미지를 빌드
    • -t docker101tutorial : 새로 빌드되는 이미지의 이름을 지정
    • . : 현재 디렉토리인 빌드 컨텍스트를 지정

    정리하자면, getting-started 디렉토리의 Dockerfile 및 기타 파일을 사용해 docker101tutorial이라는 새 docker 이미지를 빌드한다는 명령어다.

    3. Run a container

    docker run -d -p 80:80 \ --name docker-tutorial docker101tutorial
    • docker run : 지정된 docker 이미지를 사용해 새로운 컨테이너를 생성(create)
      앞서 먼저 본 Clone a respository와 동일한 명령어지만, 사용한 docker 이미지가 다르다는 것을 눈치챌 정도면 된다.
    • -d : 분리 모드(detach)에서 컨테이너를 실행. 백그라운드에서 실행되기 때문에 CLI에 로그나 출력이 표시되지 않음.
    • -p 80:80 : 로컬(내 맥북)의 포트 80번을 컨테이너의 포트 80번에 매핑. 이 설정은 로컬에서 컨테이너 내부에서 실행되는 서비스(특히 웹 서버)에 액세스할 때 유용함.
    • --name docker-tutorial : 컨테이너 이름을 docker-tutorial로 지정
    • docker101tutorial : 사용할 docker 이미지를 지정

    정리하자면, docker101tutorial 이미지를 사용하여 docker-tutorial이라는 이름의 새 컨테이너를 만들고 분리 모드로 시작하여 로컬 시스템의 80 포트와 컨테이너의 80 포트를 매핑한다는 명령어다.

    여기서 눈치가 빠른 사람은 '로컬과 컨테이너의 80포트를 매핑'한 사실을 보고 자신의 브라우저 주소란에 다음을 입력해볼 것이다.

    • localhost
    • localhost:80
    • 127.0.0.1:80

    실제로 docker exec 명령어로 컨테이너 내부로 접속해보면 Nginx(유명한 웹 서버)가 돌고 있고, 80번 포트를 LISTEN중인 것을 확인할 수 있었다.

    즉, 방금 브라우저에서 확인한 페이지는 우리가 실행시킨 컨테이너 내부의 Nginx서버가 구동중인 리소스다.

    4. Push my image up to Docker Hub

    ※ 이 작업은 원격지인 Docker Hub에 이미지를 업로드(push) 하는 작업이므로 하기 싫은 사람은 건너 뛰어도 된다.

    GitHub와 동일하게 Docker Hub라는 원격지 서버에 이미지를 푸쉬해야 하기 때문에 Docker Hub에 로그인해야 한다.

    Sign in here를 클릭하면 Docker Hub로 이동하게 되고 로그인을 진행하면 다시 Docker Desktop 애플리케이션으로 리다이렉트 된다.

    로그인을 마친 후 명령어를 입력한다.

    docker tag docker101tutorial /docker101tutorial
    • docker tag : 기존 docker 이미지에 새로운 태그를 할당
    • docker101tutorial : 새로운 태그를 지정하고자 하는 대상 이미지
    • /docker101tutorial : 할당할 새로운 태그의 이름을 지정

    정리하자면, docker101tutorial이라는 이미지에 docker101tutorial이란 태그를 부여한 것인데, 이게 내용이 조금 이상하다.

    보통 Tag에는 버전 등의 이미지를 식별할 수 있는 내용을 붙이는데 아무리 튜토리얼이라 해도 너무 의미 없는 내용을 작성한 것 같다.

    만약 나라면, 다음과 같이 태그를 작성했을 것 같다.

    docker tag docker101tutorial conceptbug95/docker101tutorial:0.0.1
    docker push /docker101tutorial

    해당 내용은 docker101tutorial 이미지를 원격지에 푸쉬한다는 명령어다.

    내 방식대로 태그를 작성했다면 아마 푸쉬 명령어는 다음과 같이 바뀌어야 할 것이다.

    docker push conceptbug95/docker101tutorial:0.0.1

    Look around

    튜토리얼에서 진행한 내용을 전체적으로 둘러보며 확인해본다.

    참고로, 나는 위에서 언급한 대로 태그를 새로 부여하고 푸쉬했다.

    Containers

    CLI에서는 다음과 같이 확인 가능하다.

    Images

    Volumes

    Remote Repository: Docker Hub

    Stop the container

    이제 둘러보는 것도 끝났으니 현재 실행중인 컨테이너를 정지시킬 것이다.

    GUI상으로는 위와 같이 정지 버튼을 클릭하면 되고 CLI 상에서는 다음과 같이 명령어를 입력한다.

    docker stop docker-tutorial

    Docker의 GUI 버전을 써보니 확실히 명령어 입력하는 것 보다 편하긴 하다.

    하지만 서버에 SSH 등으로 원격으로 접속한 쉘 환경에서는 GUI를 사용하지 못하니, 당연히 쉘 환경에서 CLI로 도커를 사용하는 능력도 길러놔야 한다.

    마지막으로는 지금 튜토리얼 하느라 설치하지 않아도 됐던 내용들을 모두 깔끔하게 삭제하는 포스팅으로 끝내려고 한다.

    댓글

    Designed by JB FACTORY