Docker 튜토리얼 실습 및 도커 사용법 / 도커 허브 사용법

도커 튜토리얼 실습

Docker 공식 문서의 튜토리얼 실습을 따라하며 도커 기본 사용법을 익혀봅니다.

사전 환경 세팅

윈도우 환경에 Docker Desktop, Git Client, VS Code​를 설치하고 실습을 시작해야 합니다.

Git Clone

git clone https://github.com/docker/getting-started-app

todo 리스트를 관리하는 JavaScript 기반 애플리케이션을 GitHub 저장소에서 내려받을 수 있습니다.

Docker 설정 파일 생성

프로젝트 경로에 Dockerfile 파일을 생성하고 아래와 같이 입력합니다.

# syntax=docker/dockerfile:1

FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

Node.js가 설치된 경량 Alpine 이미지를 베이스 이미지로 사용하여 도커 이미지를 구성하는 설정입니다.
컨테이너 내부 /app 폴더로 프로젝트를 복사하고, yarn 패키지 매니저로 운영에 필요한 패키지를 설치합니다.
컨테이너 실행 시 src/index.js를 실행하고, 애플리케이션이 3000번 포트를 사용함을 명시합니다.

Docker 이미지 빌드 명령어

docker build -t 도커이미지명 .

프로젝트 폴더 내 Dockerfile을 기반으로 도커 이미지를 빌드합니다.
-t 옵션으로 도커 이미지명을 지정하고, 현재 폴더를 빌드 컨텍스트로 사용합니다.

애플리케이션 코드 수정 후에는 도커 이미지를 다시 빌드하고,
기존 컨테이너 삭제 후 새 컨테이너를 실행하면 변경 사항을 반영할 수 있습니다.

Docker Desktop 확인

Docker Desktop에서 빌드된 도커 이미지를 확인할 수 있습니다.

Docker 컨테이너 실행

docker run -d -p 127.0.0.1:3000:3000 도커이미지명

Docker 컨테이너 런타임이 이미지를 기반으로 컨테이너를 생성하고,
격리된 환경에서 애플리케이션 프로세스를 백그라운드로 실행합니다.
호스트의 127.0.0.1:3000 포트를 컨테이너의 3000번 포트에 매핑하여
호스트 웹 브라우저에서 컨테이너 내부 애플리케이션에 접근할 수 있도록 합니다.

실행 중인 Docker 컨테이너 확인

docker ps

웹브라우저에서 http://localhost:3000로 접속해도 확인할 수 있습니다.

Docker 컨테이너 종료

docker stop 컨테이너ID

docker ps 명령어로 확인된 실행 중 컨테이너ID를 입력하여 도커 컨테이너를 종료할 수 있습니다.

Docker 컨테이너 삭제

docker rm -f 컨테이너ID

실행 중인 도커 컨테이너도 강제로 종료하고 삭제합니다.


도커 허브 사용법

도커 허브 레포지토리 생성

Docker Hub 접속 > My Hub > Repositories 메뉴 > Create a repository > Namespace : DockerHub사용자명 확인 > Repository Name : 레포지토리명 입력 > Create

도커 허브 로그인

docker login

로컬에서 도커 허브 로그인을 먼저 진행해야 합니다.

도커 이미지 태깅

docker tag 도커이미지명 DockerHub사용자명/레포지토리명

도커 이미지에 도커 허브 레포지토리 주소 형식의 태그를 추가합니다.

도커 이미지 공유

docker push DockerHub사용자명/레포지토리명

태깅한 도커 이미지를 도커 허브 레포지토리에 업로드하여 다른 환경에서도 사용할 수 있도록 공유합니다.

공유된 도커 이미지 확인

Docker Hub 접속 > My Hub > Repositories 메뉴 > 레포지토리 선택 > Tags

다른 CPU 아키텍처용으로 도커 이미지 빌드 명령어

docker build --platform linux/amd64 -t DockerHub사용자명/레포지토리명 .

기본적으로 도커 이미지는 현재 빌드 환경의 CPU 아키텍처로 빌드되지만,
–platform 옵션을 사용하면 다른 CPU 아키텍처용 이미지로 빌드할 수도 있습니다.