웹사이트 검색

미리 빌드된 Docker 이미지 시작하기


이 페이지에서

  1. 전제 조건
  2. 무엇을 알아야 합니까?\n
  3. CLI로 이미지 관리
  4. Docker 이미지 검사
  5. Docker 태그 사용
  6. Docker 레지스트리 작업
    1. 개인 Docker 레지스트리 배포
    2. 이미지 푸시, 풀링 및 서명\n

    이미지는 docker의 기본 구성 요소입니다. 이 가이드에서는 도커 이미지가 무엇인지, 어떻게 빌드하고 관리하고 사용하는지에 대해 설명합니다.

    시작하자.

    전제 조건

    • 도커 이미지를 사용하기 전에 시스템에 도커를 설치해야 합니다.\n
    • 이 가이드는 Ubuntu를 사용하지만 단계는 다른 배포판과 유사해야 합니다.\n
    • 루트 권한이 있는 사용자 계정.\n

    무엇을 알아야 합니까?

    도커 이미지 작업을 시작하기 전에 도커 이미지가 무엇인지 아는 것이 중요합니다.

    Docker 이미지는 Docker의 기본 구성요소입니다. Docker는 이미지를 사용하여 컨테이너를 만듭니다. 이미지는 본질적으로 코드, 라이브러리 및 런타임과 같은 컨테이너를 만드는 데 필요한 모든 정보를 포함하는 템플릿입니다.

    도커 컨테이너는 이미지의 런타임 인스턴스입니다. 여기에는 이미지에 포함된 모든 항목과 컨테이너가 실행되는 동안 수행한 모든 변경 사항 또는 추가 사항이 포함됩니다. 예를 들어 시스템에 새 애플리케이션을 설치하면 새 애플리케이션이 컨테이너에 설치됩니다.

    CLI로 이미지 관리

    Docker CLI를 사용하여 이미지를 관리하는 것은 Docker 관리자에게 필수입니다. Docker CLI는 이미지와 컨테이너를 완벽하게 제어할 수 있는 강력한 도구입니다. 이 섹션에서는 Docker CLI를 사용하여 이미지를 관리하는 방법을 알아봅니다.

    1. 아래 명령을 실행하여 Docker가 실행 중인지 확인합니다.

    sudo systemctl status docker

    2. Docker가 실행 중이 아니면 아래 명령으로 시작합니다.

    sudo systemctl start docker

    3. 도커 그룹에 사용자 계정을 추가합니다. 변경 사항을 적용하려면 로그아웃했다가 다시 로그인하십시오.

    sudo usermod -aG docker $(whoami)

    4. docker image 명령을 실행하면 docker image 명령에 사용할 수 있는 모든 옵션 목록이 표시됩니다.

    docker image

    아래와 같이 docker image 명령에는 많은 옵션이 있지만 가장 일반적으로 사용되는 옵션은 다음과 같습니다.

    • ls: 시스템의 이미지를 나열합니다.\n
    • pull: 레지스트리에서 이미지를 가져옵니다.
    • 푸시: 이미지를 레지스트리로 푸시합니다.\n
    • 만들기: Dockerfile에서 새 이미지를 만듭니다.
    • rm: 시스템에서 이미지를 제거합니다.\n
    • 태그: 이름으로 이미지에 태그를 지정합니다.\n

    시작하려면 시스템의 이미지를 나열하는 방법을 살펴보겠습니다.

    5. docker image ls 명령을 실행하여 호스트의 이미지를 나열합니다. docker image ls 명령은 가져온 리포지토리를 포함하여 호스트의 모든 이미지를 나열합니다. ID, 리포지토리, 태그 및 이미지 크기입니다.

    docker image ls

    호스트에서 이미지를 제거한다고 가정합니다. rm 명령을 사용할 수 있습니다. 이미지 이름 또는 이미지 ID를 사용하여 이미지를 제거할 수 있습니다.

    docker image rm <image-name>
    docker image rm <image-id>

    ID를 사용하는 경우 ID의 처음 몇 문자가 목록의 이미지에 고유한지 확인하십시오. 즉, ID의 처음 몇 글자는 다른 이미지에서 사용해서는 안 됩니다.

    6. 예를 들어 ubuntu:12.04 이미지를 제거하려면 다음 명령 중 하나를 사용할 수 있습니다. ID(5b1)의 처음 몇 문자만 사용하여 이미지를 제거할 수 있습니다. 처음 몇 문자가 포함된 다른 이미지가 없기 때문입니다.

    docker image rm ubuntu:12.04
    docker image rm 5b1

    ubuntu:12.04 이미지는 아래와 같이 이미지 생성에 사용된 모든 레이어와 함께 호스트에서 삭제됩니다.

    7. 시스템의 이미지를 다시 나열하여 ubuntu:12.04 이미지가 더 이상 나열되지 않는지 확인합니다.

    docker image ls

    docker image ls 명령과 docker images 명령은 완전히 동일한 작업을 수행합니다. 그러나 Docker는 개발자가 올바른 하위 명령과 함께 docker 명령을 사용하는 것을 선호하기 때문에 두 번째는 더 이상 사용되지 않습니다. docker rmi 명령도 마찬가지입니다. 이 명령은 이미지와 모든 레이어를 제거하는 데 사용되며 docker image rm과 동일합니다. Docker는 올바른 하위 명령과 함께 docker rm을 사용할 것을 권장합니다.

    docker image ls
    docker images

    우리는 같은 출력을 가지고 있습니다.

    지금까지 사용하지 않은 이미지를 한 번에 하나씩 제거했습니다. 두 개 이상의 사용하지 않는 이미지를 동시에 제거하려면 어떻게 해야 합니까?

    여기서 prune 명령이 유용합니다. prune 명령을 사용하여 호스트에서 사용하지 않는 모든 이미지를 한 번에 제거할 수 있습니다. prune 명령을 사용하여 매달려 있는 모든 이미지, 사용하지 않는 모든 이미지 또는 이 둘의 조합을 제거할 수 있습니다. 매달린 이미지는 연결된 컨테이너가 하나 이상 없는 이미지입니다.

    8. docker image prune 명령을 실행하여 시스템에서 사용하지 않거나 매달린 이미지를 모두 제거합니다.

    docker image prune

    보시다시피 prune 명령은 사용하지 않는 모든 이미지와 해당 레이어를 호스트에서 제거하고 프로세스에서 많은 디스크 공간을 절약했습니다.

    9. 호스트의 이미지를 다시 나열하여 이미지가 실제로 사라졌는지 확인합니다. 이제 호스트에서 이미지를 나열, 제거 및 정리하는 방법을 알았습니다. 이러한 기본 명령은 시스템을 깨끗하고 체계적으로 유지하는 데 도움이 됩니다.

    docker image ls

    Docker 이미지 검사

    Docker 이미지와 컨테이너를 신비한 블랙 박스라고 생각할 수 있습니다. 당신은 그들 안에서 어떤 종류의 마법이 일어나고 있는지 궁금합니다. 이 섹션에서는 Docker 이미지에 무엇이 있는지 살펴보고 해당 정보를 유리하게 사용할 수 있는 방법을 살펴봄으로써 신비주의를 해소합니다.

    1. Docker는 이미지 내용을 검사하는 방법을 제공합니다. docker inspect 명령은 다음 예제와 같이 이미지에 대한 경로를 가져와 이미지에 대한 풍부한 정보를 출력합니다.

    docker inspect ubuntu

    아래와 같이 위 명령의 출력에는 많은 정보가 포함되어 있습니다. 여기에서 JSON 배열이라는 형식으로 모든 정보를 볼 수 있습니다.

    출력의 정보는 키-값 저장소처럼 표시됩니다. 파이프(|)와 같은 Linux 도구를 사용하여 특정 키워드에 대한 출력을 grep할 수 있습니다. 그런 다음 원하는 목적으로 파이프 출력을 사용할 수 있습니다. 다음 예에서는 이를 사용하는 방법을 보여줍니다.

    2. 아래 명령을 실행하여 docker inspect 명령의 출력을 image-inspect.txt라는 파일에 저장합니다.

    docker image inspect ubuntu > image-inspect.txt

    3. 그런 다음 선택한 편집기를 사용하여 파일을 열고 내용을 검사합니다.

    sudo 나노 이미지-inspect.txt

    docker inspect 명령의 출력에는 아래와 같이 이미지에 대한 풍부한 정보가 포함되어 있습니다. 편집기 내에서 편집기를 위/아래로 스크롤하는 것처럼 쉽게 탐색하여 다양한 정보를 검사할 수 있습니다. 원하는 경우 정보를 편집할 수 있습니다.

    --format 인수를 사용하여 특정 방식으로 출력 형식을 지정할 수도 있습니다.

    4. 예를 들어 우분투 이미지의 ID를 출력하려면 다음 명령을 사용할 수 있습니다.

    docker image inspect ubuntu --format='{{.ID}}'

    5. 이미지를 나열하여 이미지 ID를 확인합니다.

    docker image ls

    6. 아래 명령을 실행하여 docker inspect 명령의 출력을 more 명령으로 파이프합니다. 이렇게 하면 출력에 페이지를 매길 수 있으므로 출력에 포함된 모든 정보를 볼 수 있습니다.

    docker image inspect ubuntu | more

    이번에는 아래와 같이 ContainerConfig 섹션에 Hostname(b32714f341a6)이 표시됩니다.

    7. 호스트 이름 값(b32714f341a6)만 원하는 경우에는 어떻게 합니까? 아래 명령을 실행하여 이를 달성할 수 있습니다.

    docker image inspect ubuntu --format='{{.ContainerConfig.Hostname}}'

    보시다시피 Linux 도구와 함께 docker inspect 명령을 사용하여 더 많은 필터링을 수행할 수 있습니다. 범위처럼. 예를 들어 192.168.0.0/16 범위의 모든 IP 주소를 나열합니다. 또한 다른 스크립팅 도구와 결합하여 훨씬 더 멋진 작업을 수행할 수도 있습니다.

    도커 태그 사용

    Docker 이미지 작업을 계속하면서 태그 사용을 시작하고 싶을 것입니다. 태그를 사용하면 이미지를 쉽게 식별하고 관리할 수 있습니다. 예를 들어 이미지가 사용되는 각 환경 또는 이미지가 사용되는 각 고객 또는 클라이언트에 대한 태그를 생성할 수 있습니다. 이를 통해 필요한 특정 이미지를 쉽게 찾고 어떤 이미지가 어떤 목적으로 사용되었는지 추적할 수 있습니다.

    이미지에 태그를 추가하는 구문은 다음과 같습니다.

    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

    태그는 유효한 ASCII 문자열일 수 있으며 소문자 및 대문자, 숫자, 밑줄, 마침표 및 대시를 포함할 수 있습니다. 마침표나 대시로 시작할 수 없으며 길이가 128자를 초과할 수 없습니다. 예를 살펴보겠습니다.

    1. 이미지에 태그를 추가하려면 먼저 태그를 지정하려는 이미지의 이름 또는 ID를 알아야 합니다. 다음 명령을 실행하여 시스템에서 사용 가능한 모든 이미지를 나열할 수 있습니다.

    docker image ls

    2. 이제 아래 명령을 실행하여 "myubuntu" 태그를 이미지에 추가합니다.

    docker tag ubuntu:latest ubuntu:myubuntu

    3. 이제 docker image ls 명령을 다시 실행하면 이미지에 "myubuntu" 태그가 지정된 것을 볼 수 있습니다.

    태그는 별칭일 뿐입니다. 이미지에 여러 태그가 있을 수 있지만 모두 동일한 소스 이미지를 참조한다는 의미입니다. 따라서 의미가 있는 한 원하는 태그를 사용할 수 있습니다. 나중에 쉽게 추적할 수 있도록 이미지를 만들 때 태그를 추가하는 것이 좋습니다.

    4. 한 가지 예를 더 살펴보겠습니다. "original" 태그가 있는 Ubuntu 이미지를 만들고 싶다고 가정합니다. 다음 명령을 실행하여 이를 수행할 수 있습니다.

    docker tag myubuntu:latest myubuntu:original

    위의 명령은 \latest\ 태그가 지정된 이미지를 기반으로 \original\ 태그가 지정된 이미지를 만듭니다. 이제 두 개의 myubuntu 이미지가 있습니다. 하나는 최신으로 태그가 지정되고 다른 하나는 원본으로 태그가 지정되지만 동일한 소스 이미지 ID(2b4cba85892a)를 다시 가리킵니다.

    Docker 레지스트리 작업

    이제 Docker 이미지가 무엇인지 기본적으로 이해했으므로 레지스트리 작업을 살펴보겠습니다. Docker Hub는 가장 널리 사용되는 공용 레지스트리이지만 다른 옵션도 사용할 수 있습니다.

    Docker Hub는 개인 및 상업적 목적으로 모두 무료로 사용할 수 있는 공개 레지스트리입니다. 다양한 이미지를 사용할 수 있으며 나만의 이미지를 만들어 다른 사람과 공유할 수도 있습니다. Docker Hub를 사용하려면 계정을 만든 다음 docker 클라이언트를 설치하기만 하면 됩니다. 그런 다음 docker search 명령을 사용하여 이미지를 찾고 docker pull 명령을 사용하여 이미지를 다운로드할 수 있습니다.

    지금까지 Docker 공개 레지스트리인 Docker Hub에서 사용할 수 있는 ubuntu 이미지로 작업했습니다. 그러나 개인 레지스트리를 생성하여 이미지를 저장할 수도 있습니다.

    비공개 Docker 레지스트리 배포

    개인 레지스트리를 사용하려는 몇 가지 이유가 있습니다.

    • 내부 전용 이미지를 저장합니다. 민감한 정보가 포함된 이미지가 있고 공개되는 것을 원하지 않을 수 있습니다. 또는 귀하의 환경에서 어떤 이미지가 사용되었는지 추적하고 다른 사람이 귀하의 허가 없이 이미지를 다운로드할 수 없도록 하고 싶을 수도 있습니다.\n
    • 배포 파이프라인 CI/CD에서 이미지를 로컬로 캐싱하여 다운로드 속도를 높입니다. 자체 레지스트리를 실행하고 자체적으로 저장하는 것은 이를 CI/CD 시스템과 연결하고 개선하는 훌륭한 방법입니다.\n

    1. 도커 호스트가 로컬 레지스트리를 생성할 준비가 되었는지 확인합니다.

    docker version

    2. 아래의 docker run 명령을 실행하여 로컬 및 개인 레지스트리를 시작하고 실행합니다. 어디에:

    • -p 5000:5000 = 도커 호스트의 포트 5000을 컨테이너의 포트 5000에 매핑\n
    • --restart=always = 컨테이너가 실패할 경우 항상 다시 시작되도록 합니다.\n
    • --name registry=개인 레지스트리 이름
    • registry:2 = 레지스트리 컨테이너를 만드는 데 사용할 이미지\n

    docker run -d -p 5000:5000 --restart=always --name registry registry:2

    3. 아래 명령을 실행하여 도커 호스트에서 실행 중인 모든 컨테이너를 나열합니다.

    docker ps 

    다음 출력이 표시됩니다. 이 출력은 레지스트리 컨테이너가 도커 호스트에서 실행 중임을 나타냅니다. :::5000->5000/tcp 표기법은 도커 호스트의 포트를 레지스트리 컨테이너의 포트에 매핑하는 바로 가기입니다.

    이제 비공개 레지스트리가 실행 중이므로 이미지를 추가하는 방법을 살펴보겠습니다. 다음 예에서는 ubuntu 이미지를 레지스트리에 추가하는 방법을 보여줍니다. 먼저 Docker Hub에서 로컬 호스트로 이미지를 가져오고 특정 태그를 지정해야 합니다. 그런 다음 새로 태그가 지정된 이미지를 개인 레지스트리로 푸시합니다. 마지막으로 로컬 호스트에서 우분투 이미지를 삭제하고 개인 레지스트리에서 이미지를 가져와 테스트합니다.

    4. 아래 명령을 실행하여 태그 20.04가 있는 ubuntu 이미지를 Docker Hub에서 로컬 호스트로 다운로드합니다.

     docker image pull ubuntu:20.04

    5. 다음으로 아래 명령을 실행하여 다운로드한 Ubuntu 이미지에 "my-ubuntu" 태그를 지정합니다. 원하는 모든 태그를 사용할 수 있지만 조직에 적합한 태그를 사용하는 것이 좋습니다.

    docker tag ubuntu:20.04 localhost:5000/my-ubuntu 

    6. 아래 명령을 실행하여 새로 태그가 지정된 이미지를 포트 localhost:5000에서 실행 중인 개인 레지스트리로 푸시합니다.

    docker push localhost:5000/my-ubuntu

    7. 개인 레지스트리를 테스트하기 위해 아래 명령을 실행하여 로컬 호스트에서 로컬로 캐시된 우분투 이미지를 삭제합니다.

    docker image remove ubuntu:20.04 && docker image remove localhost:5000/my-ubuntu

    8. 로컬에 캐시된 우분투 이미지가 제거되면 아래 명령을 실행하여 개인 레지스트리에서 이미지를 가져올 수 있습니다.

    docker pull localhost:5000/my-ubuntu

    9. 아래 명령을 실행하여 도커 호스트의 모든 이미지를 나열합니다.

    docker image ls

    아래와 같이 개인 레지스트리에서 가져온 것으로 나열된 my-ubuntu 이미지를 볼 수 있습니다. 이 출력은 개인용 레지스트리에서 이미지를 성공적으로 가져왔고 개인용 레지스트리가 올바르게 작동하고 있음을 확인합니다.

    이미지 푸시, 풀링 및 서명

    Docker는 이미지를 밀고 당기고 검색하는 몇 가지 명령줄 옵션을 제공합니다. 이 섹션에서는 이러한 명령을 사용하여 호스트의 명령줄에서 레지스트리의 이미지를 관리하는 방법을 알아봅니다. 이 예제에서는 Docker 허브를 사용하여 시연하지만 다른 레지스트리를 사용할 수 있습니다.

    1. docker login 명령을 실행하여 Docker Hub 레지스트리에 로그인합니다. 메시지가 표시되면 사용자 이름과 암호를 제공합니다. Docker Hub 계정이 없는 경우 https://hub.docker.com/에서 무료로 만들 수 있습니다.

    docker login

    2. 로그인하면 이미지를 푸시할 준비가 된 것입니다. 우분투 최신 이미지를 Docker Hub에 푸시한다고 가정합니다. 또한 나중에 쉽게 참조할 수 있도록 의미 있는 이름으로 이미지에 태그를 지정해야 합니다. 이 예에서는 이미지에 howtoforge/ubuntu:latest 태그를 지정합니다. 원하는 태그 이름을 자유롭게 사용하십시오.

    docker tag ubuntu:latest howtoforge/ubuntu:latest
    docker push howtoforge/ubuntu:latest

    3. 웹 브라우저를 열고 Docker 허브로 이동합니다. 거기에 이미지가 표시됩니다. 이 리포지토리는 사용자 이름과 사용한 태그를 기반으로 생성되었습니다. 이 예에서 리포지토리는 howtoforge/ubuntu입니다. 태그 탭으로 이동하면 태그가 성공적으로 적용되었음을 확인할 수 있습니다(최신).

    4. 풀을 테스트하기 위해 아래 명령을 실행하여 로컬 우분투 이미지를 제거합니다.

    docker image rm howtoforge/ubuntu

    ubuntu 이미지가 제거되었는지 확인하려면 시스템의 이미지를 나열하십시오.

    docker image ls

    5. 아래 명령을 실행하여 Docker 허브에서 my-ubuntu 이미지를 다운로드합니다.

    docker pull howtoforge/ubuntu

    6. 호스트의 이미지를 다시 나열하여 ubuntu 이미지를 가져왔는지 확인합니다. 시스템에 my-ubuntu 이미지가 표시되어야 합니다.

    docker image ls

    이미지로 작업하는 동안 Docker 레지스트리에서 특정 이미지를 검색할 수 있습니다. docker search 명령을 사용하여 Docker 레지스트리에서 이미지를 검색할 수 있습니다.

    7. docker search 명령을 실행하여 사용 가능한 모든 옵션과 매개변수를 확인합니다.

    man docker search

    다음 출력이 표시되어야 합니다. 다음과 같은 유용한 필터링 옵션을 볼 수 있습니다.

    • stars=: 이미지가 Docker Hub에 있는 별의 수로 검색 결과를 필터링합니다. 이것을 사용하여 가장 인기 있는 이미지를 찾을 수 있습니다.\n
    • is-automated=(true|false): 자동화된 빌드를 포함하거나 제외하도록 검색 결과를 필터링합니다. 이를 사용하여 자동화된 빌드이거나 그렇지 않은 이미지를 찾을 수 있습니다.\n
    • is-official=(true|false): 공식 이미지를 포함하거나 제외하도록 검색 결과를 필터링합니다. 이를 사용하여 이미지 뒤의 회사에서 공식적으로 지원하는 이미지를 찾을 수 있습니다. 예를 들어 Ubuntu는 Ubuntu 이미지 뒤에 있는 공식 회사입니다. Nginx는 Nginx 이미지 뒤에 있는 공식 회사입니다. 공식 이미지는 회사에서 테스트를 거쳤으며 안정적일 가능성이 높으므로 가능한 한 항상 공식 이미지를 사용해야 합니다. 공식 이미지에 문제가 발생하면 이미지를 제공하는 회사의 도움을 받을 수 있습니다.\n

    8. 예를 들어 docker search --filter=stars=4 ubuntu 명령을 실행하여 Docker Hub에서 별이 4개 이상인 ubuntu 이미지를 검색합니다.

    docker search --filter=stars=4 ubuntu

    9. 아래 명령을 실행하여 Ubuntu의 공식 이미지인 ubuntu 이미지를 검색합니다.

    docker search --filter=is-official=true ubuntu

    출력은 우분투 이미지를 포함하는 리포지토리 목록이어야 하며 아래와 같이 공식 우분투 이미지(OK)임을 나타냅니다.

    10. 아래 명령을 실행하여 Docker Hub에서 별점 등급이 100개 이상이고 공식 Ubuntu 이미지인 ubuntu 이미지를 검색합니다.

    docker search --filter="stars=100" --filter=is-official=true ubuntu

    Docker 이미지는 애플리케이션 코드 및 구성을 저장하는 좋은 방법입니다. 그러나 동시에 특히 다른 응용 프로그램을 테스트하거나 다른 구성을 시도하는 경우 사용하지 않은 많은 이미지를 쉽게 축적할 수 있습니다. 레지스트리에 있는 일부 이미지가 더 이상 필요하지 않을 수 있습니다.

    이미지가 포함된 저장소로 이동하고 삭제 버튼을 클릭하여 이미지를 삭제할 수 있습니다.

    11. 예를 들어 Docker Hub에서 howtoforge/ubuntu 리포지토리로 이동합니다. 설정 > 리포지토리 삭제를 클릭합니다. 리포지토리 이름을 입력하여 리포지토리 삭제를 확인합니다. 삭제를 클릭합니다.

    대시보드로 다시 이동하면 이제 우분투 이미지와 함께 howtoforge/ubuntu 리포지토리가 삭제된 것을 볼 수 있습니다.

    결론

    축하합니다! 이제 기사의 끝에 도달했습니다. 이제 Docker 이미지와 이를 사용하는 방법에 대한 기본적인 이해가 있어야 합니다. 다음은 다음과 같은 주제에 대한 자세한 정보를 찾을 수 있는 문서 가이드입니다.

    • 도커파일
    • 네트워킹
    • 볼륨
    • 서비스
    • 군집 모드