Docker 튜토리얼 실습 및 도커 사용법 / 도커 허브 사용법
도커 튜토리얼 실습
Docker 공식 문서의 튜토리얼 실습을 따라하며 도커 기본 사용법을 익혀봅니다.
사전 환경 세팅
윈도우 환경에 Docker Desktop, Git Client, VS Code를 설치하고 실습을 시작해야 합니다.
Git Clone
git clone https://github.com/docker/getting-started-app
todo 리스트를 관리하는 JavaScript 기반 애플리케이션을 GitHub 저장소에서 내려받을 수 있습니다.
도커 설정 파일 생성
프로젝트 경로에 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 build -t 도커이미지명 .
프로젝트 폴더 내 Dockerfile을 기반으로 도커 이미지를 빌드합니다.
-t 옵션으로 도커 이미지명을 지정하고, 현재 폴더를 빌드 컨텍스트로 사용합니다.
애플리케이션 코드 수정 후에는 도커 이미지를 다시 빌드하고,
기존 컨테이너 삭제 후 새 컨테이너를 실행하면 변경 사항을 반영할 수 있습니다.
Docker Desktop 확인
빌드되거나 도커 레지스트리에서 내려받아 Docker Engine의 이미지 저장소에 저장된
도커 이미지 목록을 확인하고, 이미지를 이용해 컨테이너를 실행할 수 있습니다.
도커 이미지를 클릭하면, 이미지의 파일 시스템을 구성하는 Layers도 확인할 수 있습니다.
도커 컨테이너 실행
docker run -d -p 127.0.0.1:3000:3000 도커이미지명
Docker 컨테이너 런타임이 이미지를 기반으로 컨테이너를 생성하고,
격리된 환경에서 애플리케이션 프로세스를 백그라운드로 실행하는 명령어입니다.
호스트의 127.0.0.1:3000 포트를 컨테이너의 3000번 포트에 매핑하여
호스트 웹 브라우저에서 컨테이너 내부 애플리케이션에 접근할 수 있도록 합니다.
메모리, CPU 자원 제한하여 컨테이너 실행 방법
docker run -d -p 127.0.0.1:3000:3000 --memory="512m" --cpus="1" 도커이미지명
리눅스 커널 기능 cgroup을 이용하여 컨테이너의 메모리 및 CPU 사용량을 제한하여 실행합니다.
cpus=”1” 옵션은 최대 1개 CPU에 해당하는 연산량만 사용하도록 제한합니다.
도커 레지스트리에서 도커 이미지 내려받아 컨테이너 실행 방법
docker run -d --memory="512m" --cpus="0.2" ubuntu tail -f /dev/null
로컬에 ubuntu 이미지가 없으면, 도커 허브 등 도커 레지스트리에서 내려받고 컨테이너를 실행합니다.
실행 중인 도커 컨테이너 확인
docker ps
웹브라우저에서 http://localhost:3000로 접속해도 확인할 수 있습니다.
도커 컨테이너별 자원 사용률 확인
docker stats
도커 컨테이너의 CPU, 메모리, 네트워크 I/O 사용량, 메모리 LIMIT 등을 확인할 수 있습니다.
도커 컨테이너 Shell 접속 방법
docker exec -it 컨테이너ID /bin/bash
Docker Engine에 요청해서 실행 중인 컨테이너 내부의 /bin/bash 실행파일을 실행합니다.
새로운 Shell 프로세스가 실행되면, 명령어를 입력하고 결과를 확인할 수 있습니다.
컨테이너 내부 bash 프로세스 종료 방법
Ctrl + D
도커 컨테이너 로그 확인
docker logs -f 컨테이너ID
도커 컨테이너가 정상 실행되고 있는지 실시간으로 확인할 수 있습니다.
도커 컨테이너 종료
docker stop 컨테이너ID
docker ps 명령어로 확인된 실행 중 컨테이너ID를 입력하여 도커 컨테이너를 종료할 수 있습니다.
도커 컨테이너 삭제
docker rm -f 컨테이너ID
실행 중인 도커 컨테이너도 강제로 종료하고 삭제합니다.
도커 볼륨 마운트 방법
도커 컨테이너 내부에 저장한 데이터는 컨테이너가 삭제되면 함께 사라집니다.
도커 볼륨을 컨테이너에 마운트하면 컨테이너 파일시스템과 별도로 데이터를 저장해 유지할 수 있습니다.
도커 볼륨 생성
docker volume create 볼륨명
호스트의 로컬 저장소에 새로운 도커 볼륨을 생성합니다.
도커 볼륨 저장 경로 확인
docker volume inspect 볼륨명
JSON 응답의 Mountpoint 항목이 호스트 파일시스템에 저장된 도커 볼륨 경로입니다.
도커 볼륨을 마운트하여 컨테이너 실행 방법
docker run -d -p 127.0.0.1:3000:3000 --mount type=volume,src=볼륨명,target=/etc/폴더명 도커이미지명
생성한 도커 볼륨을 컨테이너 내부 특정 경로에 마운트하여 컨테이너를 실행합니다.
바인드 마운트하여 컨테이너 실행 방법
docker run -it --mount type=bind,src="${PWD}",target=/src ubuntu bash
호스트의 현재 디렉터리를 컨테이너 내부 /src 경로에 직접 마운트하여 컨테이너를 실행합니다.
호스트에서 소스 코드를 수정하면 컨테이너에도 바로 반영되어 개발 환경에서 사용할 수 있습니다.
바인드 마운트하여 컨테이너 실행 후 프로젝트 실행 예시
docker run -dp 127.0.0.1:3000:3000 \
-w /app --mount type=bind,src="$(pwd)",target=/app \
node:18-alpine \
sh -c "yarn install && yarn run dev"
node:18-alpine 이미지가 없으면 내려받아 컨테이너를 실행합니다.
-w /app은 컨테이너의 작업 디렉터리를 /app으로 지정하는 옵션입니다.
호스트의 현재 프로젝트 소스를 컨테이너의 /app 경로에 바인드 마운트합니다.
이후 yarn install로 의존성을 설치하고 yarn run dev로 프로젝트를 실행합니다.
도커 허브 사용법
도커 허브 레포지토리 생성
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 아키텍처용 이미지로 빌드할 수도 있습니다.