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 아키텍처용 이미지로 빌드할 수도 있습니다.