Docker 이미지 및 레지스트리

DockerBeginner
지금 연습하기

소개

이번 챌린지에서는 Docker 이미지를 다루어 봅니다. Docker 컨테이너 이미지는 애플리케이션 실행에 필요한 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지입니다.

Docker 이미지 변경

Docker 이미지는 이미지 이름과 이미지 태그로 구성되며, 이미지 이름은 저장소 주소와 이미지 식별자를 포함합니다. 이 섹션에서는 다른 사람이 만든 Docker 이미지를 가져와 자신의 저장소에 푸시하는 방법을 실습합니다.

목표

dockerhub에 있는 공개 ubuntu 이미지를 자신의 개인 저장소로 푸시하는 것이 목표입니다.

결과 예시

챌린지를 완료하면 다음과 같은 작업을 수행할 수 있어야 합니다:

  1. dockerhub에 가입하고 로그인합니다.

    Dockerhub 등록 및 로그인 화면

  2. docker hub에서 ubuntu:22.10 이미지를 로컬 서버로 다운로드합니다.

    Ubuntu Docker 이미지 다운로드

  3. ubuntu:22.10 이미지의 태그를 자신의 저장소 주소로 변경합니다.

    Docker 이미지 저장소 변경

  4. docker hub에 로그인합니다.

    Docker Hub 로그인 화면

  5. 이미지를 원격 저장소로 푸시합니다.

    저장소로 이미지 푸시

요구 사항

이 챌린지를 완료하려면 다음이 필요합니다:

  • Docker 엔진 설치
  • Docker 명령줄 인터페이스에 대한 기본 지식
  • 업데이트가 필요한 기존 Docker 이미지

웹 이미지 빌드

일반적으로 웹사이트와 같은 정적 애플리케이션을 실행할 때는 nginx를 사용합니다. 이 섹션에서는 나만의 웹 이미지를 빌드해 봅니다.

목표

Docker 컨테이너 이미지를 생성하고 간단한 웹 애플리케이션을 패키징한 다음, 해당 이미지를 사용하여 컨테이너를 시작하고 정상적으로 접속할 수 있도록 만드는 것이 목표입니다.

결과 예시

챌린지를 완료하면 다음과 같은 작업을 수행할 수 있어야 합니다:

  1. /home/labex/Code 디렉토리에 hello labex라는 내용이 담긴 index.html 파일을 생성합니다.

    index html 파일 생성

  2. 다음 내용으로 Dockerfile을 생성합니다.

    Dockerfile 내용 예시

  3. your_dockerhub_id/web:1.1.0 형식으로 웹 이미지를 빌드합니다.

    Docker 웹 이미지 빌드

  4. 생성된 웹 이미지를 dockerhub에 푸시합니다.

    DockerHub 로 웹 이미지 푸시

  5. your_dockerhub_id/web:1.1.0 이미지를 사용하여 web이라는 이름의 컨테이너를 시작하고, 호스트의 포트 80을 매핑합니다.

    Docker 컨테이너 web 시작

  6. curl 명령어를 사용하여 http://127.0.0.1에 접속하고 결과가 hello labex인지 확인합니다.

    curl 명령어 출력 hello labex

요구 사항

이 챌린지를 완료하려면 다음이 필요합니다:

  • Dockerfile을 사용한 빌드
  • 베이스 이미지를 Nginx:latest로 지정
  • Dockerfile에서 EXPOSE 명령어를 사용하여 포트 80 노출
  • 빌드 완료 후 컨테이너가 정상적으로 실행되고 HTTP 요청에 응답하는지 확인

멀티 스테이지 이미지 빌드

컨테이너 이미지를 생성하는 과정은 보통 두 단계로 나뉩니다:

  1. 애플리케이션 빌드 컴파일.
  2. 애플리케이션 이미지 생성.

이 섹션에서는 이 두 단계를 하나의 Dockerfile 로 결합하여 멀티 스테이지 빌드를 수행합니다.

이 챌린지를 완료하기 위해 https://github.com/joker-bai/go-hello-world.gitHello World 프로젝트를 준비해 두었습니다.

목표

멀티 스테이지 빌드를 사용하여 컨테이너 이미지를 만들고, 해당 이미지를 사용하여 컨테이너를 시작하고 정상적으로 접속할 수 있도록 만드는 것이 목표입니다.

결과 예시

챌린지를 완료하면 다음과 같은 작업을 수행할 수 있어야 합니다:

  1. /home/labex/Code 디렉토리에 hello-world 디렉토리를 생성합니다. hello world 디렉토리 생성

  2. 이 디렉토리에 다음 내용으로 Dockerfile을 생성합니다. Dockerfile 생성 예시

  3. your_dockerhub_id/go-hello-world:1.1.0 형식으로 Docker 이미지를 빌드합니다. Docker 이미지 빌드 과정

  4. 이미지를 docker hub 에 푸시합니다. Docker 이미지 hub 로 푸시

  5. go-hello-world라는 이름의 컨테이너를 시작하고 포트 8080을 노출합니다. go hello world 컨테이너 시작

  6. http://127.0.0.1:8080에 접속하여 정상 작동하는지 확인합니다. 컨테이너 HTTP 응답 확인

요구 사항

이 챌린지를 완료하려면 다음이 필요합니다:

  • Dockerfile을 사용한 빌드
  • 빌드 완료 후 컨테이너가 정상적으로 실행되고 HTTP 요청에 응답하는지 확인

요약

이번 챌린지의 모든 과정을 완료하신 것을 축하드립니다! 이제 애플리케이션 이미지를 자유롭게 생성하고 관리할 수 있게 되었습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습