웹사이트 검색

Ubuntu 18.04에서 Docker를 설치하고 사용하는 방법


이 튜토리얼의 이전 버전은 finid에 의해 작성되었습니다.

소개

Docker는 컨테이너에서 애플리케이션 프로세스를 관리하는 프로세스를 단순화하는 애플리케이션입니다. 컨테이너를 사용하면 리소스 격리 프로세스에서 애플리케이션을 실행할 수 있습니다. 가상 머신과 유사하지만 컨테이너는 더 휴대 가능하고 리소스 친화적이며 호스트 운영 체제에 더 의존합니다.

Docker 컨테이너의 다양한 구성 요소에 대한 자세한 소개는 The Docker Ecosystem: An Introduction to Common Components를 확인하세요.

이 자습서에서는 Ubuntu 18.04에 Docker Community Edition(CE)을 설치하고 사용합니다. Docker 자체를 설치하고, 컨테이너 및 이미지로 작업하고, Docker 리포지토리에 이미지를 푸시합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 Ubuntu 18.04 초기 서버 설정 가이드에 따라 설정된 Ubuntu 18.04 서버 1대
  • 7단계와 8단계에 표시된 것처럼 고유한 이미지를 만들어 Docker Hub에 푸시하려는 경우 Docker Hub의 계정.

1단계 - 도커 설치

공식 Ubuntu 리포지토리에서 제공되는 Docker 설치 패키지는 최신 버전이 아닐 수 있습니다. 최신 버전을 확보하기 위해 공식 Docker 리포지토리에서 Docker를 설치합니다. 이를 위해 새 패키지 소스를 추가하고 Docker에서 GPG 키를 추가하여 다운로드가 유효한지 확인한 다음 패키지를 설치합니다.

먼저 기존 패키지 목록을 업데이트합니다.

  1. sudo apt update

다음으로 apt가 HTTPS를 통해 패키지를 사용할 수 있도록 하는 몇 가지 전제 조건 패키지를 설치합니다.

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

그런 다음 공식 Docker 리포지토리의 GPG 키를 시스템에 추가합니다.

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

APT 소스에 Docker 리포지토리를 추가합니다.

  1. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

다음으로 새로 추가된 리포지토리의 Docker 패키지로 패키지 데이터베이스를 업데이트합니다.

  1. sudo apt update

기본 Ubuntu 리포지토리 대신 Docker 리포지토리에서 설치하려고 하는지 확인합니다.

  1. apt-cache policy docker-ce

Docker의 버전 번호는 다를 수 있지만 다음과 같은 출력이 표시됩니다.

docker-ce:
  Installed: (none)
  Candidate: 18.03.1~ce~3-0~ubuntu
  Version table:
     18.03.1~ce~3-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

docker-ce가 설치되지 않았지만 설치 후보는 Ubuntu 18.04용 Docker 저장소(bionic)에서 가져온 것입니다.

마지막으로 Docker를 설치합니다.

  1. sudo apt install docker-ce

이제 Docker가 설치되고 데몬이 시작되며 부팅 시 프로세스를 시작할 수 있습니다. 실행 중인지 확인합니다.

  1. sudo systemctl status docker

서비스가 활성화되어 실행 중임을 보여주는 출력은 다음과 유사해야 합니다.

Output
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-08-09 19:42:32 UTC; 33s ago Docs: https://docs.docker.com Main PID: 5231 (dockerd) Tasks: 7 CGroup: /system.slice/docker.service └─5231 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

이제 Docker를 설치하면 Docker 서비스(데몬)뿐만 아니라 docker 명령줄 유틸리티 또는 Docker 클라이언트도 제공됩니다. 이 자습서의 뒷부분에서 docker 명령을 사용하는 방법을 살펴보겠습니다.

2단계 - Sudo 없이 Docker 명령 실행(선택 사항)

기본적으로 docker 명령은 루트 사용자 또는 Docker 설치 프로세스 중에 자동으로 생성되는 docker 그룹의 사용자만 실행할 수 있습니다. sudo 접두사를 지정하지 않거나 docker 그룹에 속하지 않고 docker 명령을 실행하려고 하면 다음과 같은 결과가 표시됩니다.

Output
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.

docker 명령을 실행할 때마다 sudo를 입력하지 않으려면 docker 그룹에 사용자 이름을 추가합니다.

  1. sudo usermod -aG docker ${USER}

새 그룹 구성원을 적용하려면 서버에서 로그아웃했다가 다시 로그인하거나 다음을 입력하십시오.

  1. su - ${USER}

계속하려면 사용자 비밀번호를 입력하라는 메시지가 표시됩니다.

다음을 입력하여 사용자가 이제 docker 그룹에 추가되었는지 확인합니다.

  1. id -nG
Output
sammy sudo docker

로그인하지 않은 docker 그룹에 사용자를 추가해야 하는 경우 다음을 사용하여 사용자 이름을 명시적으로 선언합니다.

  1. sudo usermod -aG docker username

이 문서의 나머지 부분에서는 docker 그룹의 사용자로 docker 명령을 실행한다고 가정합니다. 선택하지 않은 경우 명령 앞에 sudo를 추가하십시오.

다음으로 docker 명령을 살펴보겠습니다.

3단계 — Docker 명령 사용

docker를 사용하는 것은 일련의 옵션과 명령 뒤에 인수를 전달하는 것으로 구성됩니다. 구문은 다음 형식을 취합니다.

  1. docker [option] [command] [arguments]

사용 가능한 모든 하위 명령을 보려면 다음을 입력하십시오.

  1. docker

Docker 20부터 사용 가능한 하위 명령의 전체 목록에는 다음이 포함됩니다.

Output
attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

특정 명령에 사용할 수 있는 옵션을 보려면 다음을 입력하십시오.

  1. docker docker-subcommand --help

Docker에 대한 시스템 전체 정보를 보려면 다음을 사용하십시오.

  1. docker info

이러한 명령 중 일부를 살펴보겠습니다. 이미지 작업부터 시작하겠습니다.

4단계 — 도커 이미지 작업

Docker 컨테이너는 Docker 이미지에서 빌드됩니다. 기본적으로 Docker는 Docker 프로젝트 배후의 회사인 Docker가 관리하는 Docker 레지스트리인 Docker Hub에서 이러한 이미지를 가져옵니다. 누구나 Docker Hub에서 Docker 이미지를 호스팅할 수 있으므로 필요한 대부분의 애플리케이션과 Linux 배포판에 이미지가 호스팅됩니다.

Docker Hub에서 이미지에 액세스하고 다운로드할 수 있는지 확인하려면 다음을 입력합니다.

  1. docker run hello-world

출력은 Docker가 올바르게 작동하고 있음을 나타냅니다.

Output
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b8dfde127a29: Pull complete Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. . . .

Docker는 처음에 hello-world 이미지를 로컬에서 찾을 수 없었기 때문에 기본 리포지토리인 Docker Hub에서 이미지를 다운로드했습니다. 이미지가 다운로드되면 Docker는 이미지에서 컨테이너를 생성하고 컨테이너 내의 애플리케이션이 실행되어 메시지를 표시합니다.

search 하위 명령과 함께 docker 명령을 사용하여 Docker Hub에서 사용 가능한 이미지를 검색할 수 있습니다. 예를 들어 Ubuntu 이미지를 검색하려면 다음을 입력합니다.

  1. docker search ubuntu

이 스크립트는 Docker Hub를 크롤링하고 이름이 검색 문자열과 일치하는 모든 이미지 목록을 반환합니다. 이 경우 출력은 다음과 유사합니다.

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK] dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK] neurodebian NeuroDebian provides neuroscience research s… 50 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components=m… 38 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK] tutum/ubuntu Simple Ubuntu docker images with SSH access 18 i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13 ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12 1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK] eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK] codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK] darksheer/ubuntu Base Ubuntu Image -- Updated hourly 4 [OK] 1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK] 1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK] 1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK] pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1 1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK] pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0 smartentry/ubuntu ubuntu with smartentry 0 [OK] ossobv/ubuntu ...

OFFICIAL 열에서 OK는 프로젝트 배후의 회사에서 구축하고 지원하는 이미지를 나타냅니다. 사용하려는 이미지를 식별했으면 pull 하위 명령을 사용하여 컴퓨터에 다운로드할 수 있습니다.

다음 명령을 실행하여 공식 ubuntu 이미지를 컴퓨터에 다운로드합니다.

  1. docker pull ubuntu

다음 출력이 표시됩니다.

Output
Using default tag: latest latest: Pulling from library/ubuntu 16ec32c2132b: Pull complete Digest: sha256:82becede498899ec668628e7cb0ad87b6e1c371cb8a1e597d83a47fac21d6af3 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest

이미지를 다운로드한 후 run 하위 명령과 함께 다운로드한 이미지를 사용하여 컨테이너를 실행할 수 있습니다. hello-world 예제에서 보았듯이 run 하위 명령으로 docker를 실행할 때 이미지가 다운로드되지 않은 경우 Docker 클라이언트는 먼저 이미지를 다운로드한 다음 이를 사용하여 컨테이너를 실행합니다.

컴퓨터에 다운로드된 이미지를 보려면 다음을 입력하십시오.

  1. docker images

출력은 다음과 유사해야 합니다.

Output
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 1318b700e415 13 days ago 72.8MB hello-world latest d1165f221234 5 months ago 13.3kB

이 튜토리얼의 뒷부분에서 볼 수 있듯이 컨테이너를 실행하는 데 사용하는 이미지를 수정하고 새 이미지를 생성하는 데 사용할 수 있으며, 그런 다음 Docker Hub에 업로드(푸시는 기술 용어임)할 수 있습니다. 다른 Docker 레지스트리.

컨테이너를 실행하는 방법을 자세히 살펴보겠습니다.

5단계 - Docker 컨테이너 실행

이전 단계에서 실행한 hello-world 컨테이너는 테스트 메시지를 내보낸 후 실행되고 종료되는 컨테이너의 예입니다. 컨테이너는 그보다 훨씬 더 유용할 수 있으며 대화식일 수 있습니다. 결국 가상 머신과 유사하지만 리소스 친화적일 뿐입니다.

예를 들어 Ubuntu의 최신 이미지를 사용하여 컨테이너를 실행해 보겠습니다. -i 및 -t 스위치의 조합은 컨테이너에 대한 대화형 셸 액세스를 제공합니다.

  1. docker run -it ubuntu

명령 프롬프트는 현재 컨테이너 내부에서 작업하고 있다는 사실을 반영하도록 변경되어야 하며 다음 형식을 취해야 합니다.

Output
root@d9b100f2f636:/#

명령 프롬프트에서 컨테이너 ID를 기록해 둡니다. 이 예에서는 d9b100f2f636입니다. 나중에 컨테이너를 제거할 때 컨테이너를 식별하기 위해 해당 컨테이너 ID가 필요합니다.

이제 컨테이너 내에서 모든 명령을 실행할 수 있습니다. 예를 들어 컨테이너 내부의 패키지 데이터베이스를 업데이트해 보겠습니다. 컨테이너 내부에서 루트 사용자로 작업하기 때문에 명령에 sudo 접두사를 붙일 필요가 없습니다.

  1. apt update

그런 다음 응용 프로그램을 설치하십시오. Node.js를 설치해 보겠습니다.

  1. apt install nodejs

이렇게 하면 공식 Ubuntu 리포지토리의 컨테이너에 Node.js가 설치됩니다. 설치가 완료되면 Node.js가 설치되었는지 확인합니다.

  1. node -v

터미널에 버전 번호가 표시됩니다.

Output
v10.19.0

컨테이너 내부에서 변경한 내용은 해당 컨테이너에만 적용됩니다.

컨테이너를 종료하려면 프롬프트에 exit를 입력합니다.

다음으로 시스템에서 컨테이너를 관리하는 방법을 살펴보겠습니다.

6단계 — Docker 컨테이너 관리

한동안 Docker를 사용하면 컴퓨터에 많은 활성(실행 중) 및 비활성 컨테이너가 생깁니다. 활성 항목을 보려면 다음을 사용하십시오.

  1. docker ps

다음과 유사한 출력이 표시됩니다.

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

이 자습서에서는 두 개의 컨테이너를 시작했습니다. 하나는 hello-world 이미지이고 다른 하나는 ubuntu 이미지입니다. 두 컨테이너 모두 더 이상 실행되지 않지만 여전히 시스템에 존재합니다.

모든 컨테이너(활성 및 비활성)를 보려면 -a 스위치와 함께 docker ps를 실행합니다.

  1. docker ps -a

다음과 유사한 출력이 표시됩니다.

e4dcb273b696   ubuntu        "bash"     About a minute ago   Exited (0) 30 seconds ago             suspicious_hopper
79b892f318e9   hello-world   "/hello"   3 minutes ago        Exited (0) 3 minutes ago              boring_jang

생성한 최신 컨테이너를 보려면 -l 스위치를 전달하십시오.

  1. docker ps -l
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. e4dcb273b696 ubuntu "bash" 2 minutes ago Exited (0) About a minute ago suspicious_hopper

중지된 컨테이너를 시작하려면 docker start 다음에 컨테이너 ID 또는 컨테이너 이름을 사용합니다. ID가 e4dcb273b696인 Ubuntu 기반 컨테이너를 시작하겠습니다.

  1. docker start e4dcb273b696

컨테이너가 시작되고 docker ps를 사용하여 상태를 확인할 수 있습니다.

CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
e4dcb273b696   ubuntu    "bash"    2 minutes ago   Up 4 seconds             suspicious_hopper

실행 중인 컨테이너를 중지하려면 docker stop 다음에 컨테이너 ID 또는 이름을 사용합니다. 이번에는 Docker가 컨테이너에 할당한 이름인 sharp_volhard를 사용합니다.

  1. docker stop suspicious_hopper

더 이상 컨테이너가 필요하지 않다고 판단되면 컨테이너 ID 또는 이름을 다시 사용하여 docker rm 명령으로 컨테이너를 제거합니다. docker ps -a 명령을 사용하여 hello-world 이미지와 연결된 컨테이너의 컨테이너 ID 또는 이름을 찾아 제거합니다.

  1. docker rm boring_jang

새 컨테이너를 시작하고 --name 스위치를 사용하여 이름을 지정할 수 있습니다. 또한 --rm 스위치를 사용하여 중지될 때 자체적으로 제거되는 컨테이너를 생성할 수 있습니다. 이러한 옵션 및 기타 옵션에 대한 자세한 내용은 docker run help 명령을 참조하세요.

컨테이너는 새 컨테이너를 빌드하는 데 사용할 수 있는 이미지로 변환될 수 있습니다. 어떻게 작동하는지 살펴보겠습니다.

7단계 — 컨테이너의 변경 사항을 Docker 이미지에 커밋

Docker 이미지를 시작하면 가상 머신에서와 마찬가지로 파일을 생성, 수정 및 삭제할 수 있습니다. 변경 사항은 해당 컨테이너에만 적용됩니다. 시작하고 중지할 수 있지만 docker rm 명령으로 제거하면 변경 사항이 완전히 손실됩니다.

이 섹션에서는 컨테이너의 상태를 새 Docker 이미지로 저장하는 방법을 보여줍니다.

Ubuntu 컨테이너 내부에 Node.js를 설치한 후 이제 이미지에서 실행되는 컨테이너가 있지만 컨테이너는 생성에 사용한 이미지와 다릅니다. 하지만 나중에 이 Node.js 컨테이너를 새 이미지의 기반으로 다시 사용할 수 있습니다.

그런 다음 다음 명령을 사용하여 새 Docker 이미지 인스턴스에 대한 변경 사항을 커밋합니다.

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

-m 스위치는 귀하와 다른 사람들이 변경 사항을 알 수 있도록 도와주는 커밋 메시지용이며 -a는 작성자를 지정하는 데 사용됩니다. container_id는 대화형 Docker 세션을 시작할 때 튜토리얼의 앞부분에서 기록한 것입니다. Docker Hub에 추가 리포지토리를 생성하지 않은 경우 리포지토리는 일반적으로 Docker Hub 사용자 이름입니다.

예를 들어 컨테이너 ID가 d9b100f2f636인 사용자 sammy의 경우 명령은 다음과 같습니다.

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

이미지를 커밋하면 새 이미지가 컴퓨터에 로컬로 저장됩니다. 이 자습서의 뒷부분에서 다른 사용자가 액세스할 수 있도록 Docker Hub와 같은 Docker 레지스트리에 이미지를 푸시하는 방법을 배웁니다.

Docker 이미지를 다시 나열하면 새 이미지와 해당 이미지가 파생된 이전 이미지가 표시됩니다.

  1. docker images

다음과 같은 출력이 표시됩니다.

Output
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ubuntu latest 113a43faa138 4 weeks ago 81.2MB hello-world latest e38bc07ac18e 2 months ago 1.85kB

이 예에서 ubuntu-nodejs는 Docker Hub의 기존 ubuntu 이미지에서 파생된 새 이미지입니다. 크기 차이는 변경 사항을 반영합니다. 그리고 이 예제에서 변경 사항은 NodeJS가 설치되었다는 것입니다. 따라서 다음에 NodeJS가 사전 설치된 Ubuntu를 사용하여 컨테이너를 실행해야 할 때 새 이미지를 사용할 수 있습니다.

새 이미지에 소프트웨어 설치를 자동화할 수 있는 Dockerfile에서 이미지를 빌드할 수도 있습니다. 그러나 이는 이 자습서의 범위를 벗어납니다.

이제 새 이미지를 다른 사람들과 공유하여 컨테이너를 만들 수 있도록 합시다.

8단계 - Docker 이미지를 Docker 리포지토리로 푸시

기존 이미지에서 새 이미지를 만든 후의 논리적인 다음 단계는 선택한 소수의 친구, Docker Hub 또는 액세스할 수 있는 다른 Docker 레지스트리의 전 세계와 공유하는 것입니다. Docker Hub 또는 다른 Docker 레지스트리에 이미지를 푸시하려면 해당 위치에 계정이 있어야 합니다.

이 섹션에서는 Docker 이미지를 Docker Hub에 푸시하는 방법을 보여줍니다. 개인 Docker 레지스트리를 만드는 방법을 알아보려면 Ubuntu 14.04에서 개인 Docker 레지스트리를 설정하는 방법을 확인하십시오.

이미지를 푸시하려면 먼저 Docker Hub에 로그인하십시오.

  1. docker login -u docker-registry-username

Docker Hub 암호를 사용하여 인증하라는 메시지가 표시됩니다. 올바른 암호를 지정했다면 인증이 성공해야 합니다.

참고: Docker 레지스트리 사용자 이름이 이미지를 생성하는 데 사용한 로컬 사용자 이름과 다른 경우 레지스트리 사용자 이름으로 이미지에 태그를 지정해야 합니다. 마지막 단계에 제공된 예의 경우 다음을 입력합니다.

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

그런 다음 다음을 사용하여 자신의 이미지를 푸시할 수 있습니다.

  1. docker push docker-registry-username/docker-image-name

ubuntu-nodejs 이미지를 sammy 리포지토리로 푸시하려면 명령은 다음과 같습니다.

  1. docker push sammy/ubuntu-nodejs

프로세스가 이미지를 업로드하므로 완료하는 데 약간의 시간이 걸릴 수 있지만 완료되면 출력은 다음과 같이 표시됩니다.

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

레지스트리에 이미지를 푸시하면 아래 이미지와 같이 계정의 대시보드에 나열되어야 합니다.

푸시 시도로 인해 이러한 종류의 오류가 발생하면 로그인하지 않았을 수 있습니다.

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

docker login으로 로그인하고 푸시 시도를 반복합니다. 그런 다음 Docker Hub 리포지토리 페이지에 있는지 확인합니다.

이제 docker pull sammy/ubuntu-nodejs를 사용하여 이미지를 새 컴퓨터로 가져오고 이를 사용하여 새 컨테이너를 실행할 수 있습니다.

결론

이 자습서에서는 Docker를 설치하고 이미지 및 컨테이너로 작업하고 수정된 이미지를 Docker Hub에 푸시했습니다. 이제 기본 사항을 알았으니 DigitalOcean 커뮤니티에서 다른 Docker 자습서를 살펴보십시오.