소개
Docker 는 애플리케이션 개발, 배포 및 관리에 혁신을 가져왔습니다. 이 생태계의 핵심은 컨테이너화된 애플리케이션을 생성하고 실행하기 위한 빌딩 블록 역할을 하는 Docker 이미지입니다. 이 튜토리얼에서는 프로젝트에 Docker 의 강력한 기능을 활용하는 데 중요한 단계인, 레지스트리에서 Docker 이미지를 가져오는 과정을 안내합니다.
이 랩을 마치면 Docker 이미지를 검색하고, Docker Hub 에서 가져와 컨테이너화된 애플리케이션에서 사용하는 방법을 이해할 수 있습니다.
Docker 이미지 이해
Docker 이미지를 가져오기 전에 Docker 이미지가 무엇이며 어떻게 작동하는지 이해하는 것이 중요합니다.
Docker 이미지란 무엇인가?
Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적인 패키지입니다.
- 애플리케이션 코드
- 런타임 환경
- 라이브러리 및 종속성
- 환경 변수
- 구성 파일
이미지는 이러한 이미지의 실행 인스턴스인 Docker 컨테이너를 생성하는 데 사용되는 템플릿입니다.
Docker 이미지 레포지토리
Docker 이미지는 레지스트리 내의 레포지토리에 저장됩니다. 가장 인기 있는 공개 레지스트리는 Docker Hub 이며, 수천 개의 바로 사용할 수 있는 이미지를 호스팅합니다. Docker Hub 에 대한 몇 가지 주요 사항은 다음과 같습니다.
- 소프트웨어 공급업체가 유지 관리하는 공식 이미지를 포함합니다.
- 사용자가 만든 커뮤니티 기여 이미지를 호스팅합니다.
- 조직이 독점 이미지를 위한 개인 레포지토리를 가질 수 있도록 허용합니다.
Docker 이미지 명명
Docker 이미지는 특정 명명 규칙을 따릅니다.
[registry/]username/repository:tag
여기서:
registry는 레지스트리의 호스트 이름입니다 (선택 사항, 기본값은 Docker Hub).username은 Docker Hub 사용자 이름 또는 조직 이름입니다.repository는 이미지 이름입니다.tag는 이미지 버전입니다 (선택 사항, 기본값은 "latest").
예를 들어: ubuntu:22.04 또는 nginx:latest
Docker 설치 확인
진행하기 전에 Docker 가 시스템에 제대로 설치되었는지 확인해 보겠습니다. 터미널을 열고 다음을 실행합니다.
docker --version
다음과 유사한 출력을 볼 수 있습니다.
Docker version 20.10.21, build baeda1f
이는 Docker 가 설치되어 사용할 준비가 되었음을 확인합니다.
다음 단계에서는 첫 번째 Docker 이미지를 검색하고 가져올 것입니다.
첫 번째 Docker 이미지 검색 및 가져오기
이제 Docker 이미지가 무엇인지 이해했으므로 Docker Hub 에서 이미지를 찾고 가져오는 방법을 알아보겠습니다.
Docker 이미지 검색
이미지를 가져오기 전에 사용 가능한 옵션을 검색할 수 있습니다. docker search 명령을 사용하여 Docker Hub 에서 이미지를 찾습니다.
docker search ubuntu
이렇게 하면 Docker Hub 에서 사용 가능한 Ubuntu 관련 이미지 목록이 표시됩니다. 다음과 유사한 출력을 볼 수 있습니다.
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 14938 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 111 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 256 [OK]
...
[OK]로 표시된 OFFICIAL 열은 Docker 또는 소프트웨어 공급업체가 유지 관리하는 이미지를 나타냅니다.
Docker 이미지 가져오기
Docker 이미지를 로컬 머신에 다운로드하려면 docker pull 명령을 사용하고 이미지 이름을 입력합니다.
docker pull ubuntu:22.04
이 명령은 Docker Hub 에서 Ubuntu 22.04 이미지를 가져옵니다. 다음과 유사한 다운로드 진행률을 볼 수 있습니다.
22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
출력은 Docker 가 이미지의 개별 레이어를 다운로드하고 있음을 보여줍니다. 각 레이어는 파일 시스템 변경 사항 집합을 나타냅니다.
태그 없이 이미지 가져오기
태그를 지정하지 않으면 Docker 는 latest로 태그된 이미지를 가져옵니다.
docker pull nginx
이렇게 하면 Nginx 웹 서버 이미지의 최신 버전을 가져옵니다.
Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
다른 레지스트리에서 가져오기
기본적으로 docker pull은 Docker Hub 에서 이미지를 다운로드합니다. 다른 레지스트리에서 가져오려면 레지스트리 호스트 이름을 포함합니다.
docker pull mcr.microsoft.com/dotnet/sdk:6.0
이 명령은 Microsoft Container Registry 에서 .NET SDK 6.0 이미지를 가져옵니다.
이제 몇 가지 Docker 이미지를 가져왔으므로 다음 단계로 이동하여 이미지를 관리하는 방법을 알아보겠습니다.
Docker 이미지 관리
Docker 이미지를 가져온 후에는 이미지를 효과적으로 나열하고, 검사하고, 관리하는 방법을 알아야 합니다.
Docker 이미지 나열
로컬 머신에 다운로드한 모든 Docker 이미지를 보려면 docker images 명령 (또는 별칭 docker image ls) 을 사용합니다.
docker images
다음과 유사한 출력을 볼 수 있습니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 58db3edaf2be 3 weeks ago 77.8MB
nginx latest 605c77e624dd 4 weeks ago 142MB
이 출력은 다음을 보여줍니다.
REPOSITORY: 이미지 이름TAG: 이미지 버전IMAGE ID: 이미지의 고유 식별자CREATED: 이미지가 생성된 시기SIZE: 디스크에서 이미지 크기
Docker 이미지 검사
특정 이미지에 대한 자세한 정보를 얻으려면 docker inspect 명령을 사용합니다.
docker inspect ubuntu:22.04
이 명령은 다음을 포함하여 이미지에 대한 모든 세부 정보를 포함하는 JSON 배열을 표시합니다.
- 레이어 정보
- 환경 변수
- 아키텍처
- 운영 체제
- 구성
출력은 매우 길고 자세합니다. 다음은 표시될 수 있는 내용의 일부입니다.
[
{
"Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"RepoTags": [
"ubuntu:22.04"
],
"RepoDigests": [
"ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
],
...
}
]
이미지 히스토리
이미지의 레이어 히스토리 (빌드 방법) 를 보려면 docker history 명령을 사용합니다.
docker history ubuntu:22.04
출력은 이미지를 구성하는 각 레이어를 보여줍니다.
IMAGE CREATED CREATED BY SIZE
58db3edaf2be 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:15efc167a417... 77.8MB
Docker 이미지 제거
더 이상 이미지가 필요하지 않으면 docker rmi 명령을 사용하여 디스크 공간을 확보하기 위해 제거할 수 있습니다.
docker rmi nginx
성공하면 Docker 는 제거된 이미지 ID 를 표시합니다.
Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)
이미지가 컨테이너에서 사용 중인 경우 먼저 컨테이너를 제거하거나 -f (force) 옵션을 사용해야 합니다.
docker rmi -f nginx
이제 Docker 이미지를 관리하는 방법을 알았습니다. 이제 실제로 이미지를 사용하여 컨테이너를 실행하는 마지막 단계로 진행해 보겠습니다.
Docker 이미지 사용
Docker 이미지를 가져오는 것은 첫 번째 단계일 뿐입니다. 이제 이러한 이미지를 사용하여 컨테이너를 실행하는 방법을 알아보겠습니다.
이미지에서 컨테이너 실행
이미지에서 컨테이너를 생성하고 시작하려면 docker run 명령을 사용합니다.
docker run ubuntu:22.04 echo "Hello from Ubuntu container"
이 명령은 다음을 수행합니다.
ubuntu:22.04이미지에서 새 컨테이너를 생성합니다.- 컨테이너 내에서
echo "Hello from Ubuntu container"명령을 실행합니다. - 출력을 표시합니다.
Hello from Ubuntu container
명령을 실행한 후 컨테이너는 작업을 완료했으므로 중지됩니다.
대화형 컨테이너 실행
컨테이너 내에서 대화형 셸을 시작하려면 -i (interactive) 및 -t (terminal) 옵션을 사용합니다.
docker run -it ubuntu:22.04 bash
이렇게 하면 명령을 실행할 수 있는 Ubuntu 컨테이너 내에서 bash 셸이 제공됩니다.
root@a1b2c3d4e5f6:/## ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
컨테이너를 종료하려면 exit를 입력하거나 Ctrl+D를 누릅니다.
root@a1b2c3d4e5f6:/## exit
exit
분리 모드에서 컨테이너 실행
백그라운드 (분리 모드) 에서 컨테이너를 실행하려면 -d 옵션을 사용합니다.
docker run -d --name nginx-server -p 8080:80 nginx
이 명령은 다음을 수행합니다.
nginx이미지에서nginx-server라는 컨테이너를 생성합니다.- 분리 모드 (
-d) 로 실행합니다. - 호스트의 포트 8080 을 컨테이너의 포트 80 에 매핑합니다.
- 컨테이너 ID 를 반환합니다.
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1
실행 중인 컨테이너에 액세스
이제 브라우저에서 http://localhost:8080에서 Nginx 웹 서버에 액세스하거나 curl을 사용하여 작동하는지 확인할 수 있습니다.
curl localhost:8080
그러면 Nginx 시작 페이지 HTML 이 표시됩니다.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
실행 중인 컨테이너 나열
실행 중인 모든 컨테이너를 보려면 다음을 사용합니다.
docker ps
이렇게 하면 실행 중인 컨테이너에 대한 정보가 표시됩니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1d0ac1dcb21 nginx "/docker-entrypoint.…" 30 seconds ago Up 29 seconds 0.0.0.0:8080->80/tcp nginx-server
컨테이너 중지 및 제거
실행 중인 컨테이너를 중지하려면 다음을 수행합니다.
docker stop nginx-server
중지된 컨테이너를 제거하려면 다음을 수행합니다.
docker rm nginx-server
이제 Docker 이미지를 사용하여 컨테이너를 성공적으로 실행했습니다. 이것은 개발 및 배포 프로세스에서 Docker 를 사용하는 기본적인 워크플로우입니다.
요약
이 Docker 이미지 실습을 완료하신 것을 축하드립니다. Docker 이미지를 사용하는 데 필요한 필수 기술을 익혔습니다.
- Docker 이미지가 무엇인지, 그리고 레지스트리에서 어떻게 구성되는지 이해
- Docker Hub 에서 Docker 이미지 검색 및 가져오기
- 로컬 Docker 이미지 관리 (나열, 검사 및 제거 포함)
- 다양한 모드에서 Docker 이미지를 사용하여 컨테이너 실행
이러한 기술은 Docker 를 사용하는 기본이며 개발 워크플로우에서 컨테이너화를 활용할 수 있게 해줍니다. 이제 공용 또는 개인 레지스트리에서 모든 Docker 이미지를 가져와 컨테이너화된 애플리케이션을 실행하는 데 사용할 수 있습니다.
추가 학습을 위한 다음 단계:
- Dockerfile 로 자체 Docker 이미지 생성
- 다중 컨테이너 애플리케이션을 위한 Docker Compose 사용
- 영구 스토리지를 위한 Docker 볼륨 사용
- 컨테이너 네트워킹 설정
개발 프로세스를 가속화할 수 있는 도구와 애플리케이션을 찾기 위해 Docker Hub 에서 사용할 수 있는 광대한 Docker 이미지 생태계를 계속 탐색하십시오.



