앱 공유Share your app

이제 이미지를 빌드했으므로 공유해 봅시다.Now that we've built an image, let's share it! Docker 이미지를 공유하려면 Docker 레지스트리를 사용해야 합니다.To share Docker images, you have to use a Docker registry. 기본 레지스트리는 Docker Hub이며, 사용한 모든 이미지는 여기서 가져온 것입니다.The default registry is Docker Hub and is where all of the images we've used have come from.

리포지토리 만들기Create a repo

이미지를 푸시하려면 먼저 Docker Hub에 리포지토리를 만들어야 합니다.To push an image, first, you need to create a repo on Docker Hub.

  1. 필요한 경우 Docker Hub로 이동하여 로그인합니다.Go to Docker Hub and log in if you need to.

  2. 리포지토리 만들기 단추를 클릭합니다.Click the Create Repository button.

  3. 리포지토리 이름에 getting-started를 사용합니다.For the repo name, use getting-started. 표시 유형이 Public인지 확인합니다.Make sure the Visibility is Public.

  4. 만들기 단추를 클릭합니다.Click the Create button!

페이지 오른쪽을 보면 Docker 명령 섹션이 표시됩니다.If you look on the right-side of the page, you'll see a section named Docker commands. 이 리포지토리에 푸시하기 위해 실행해야 하는 예제 명령을 여기서 확인할 수 있습니다.This gives an example command that you will need to run to push to this repo.

Docker 명령 및 푸시 예제

이미지 푸시Push the image

  1. Docker Hub에 표시된 푸시 명령을 명령줄에서 실행해 봅니다.In the command line, try running the push command you see on Docker Hub. 명령에서 “docker”가 아니라 해당 네임스페이스를 사용하는 것을 확인합니다.Note that your command will be using your namespace, not "docker".

    $ docker push docker/getting-started
    The push refers to repository [docker.io/docker/getting-started]
    An image does not exist locally with the tag: docker/getting-started
    

    명령이 실패한 이유는 무엇일까요?Why did it fail? 푸시 명령에서 docker/getting-started라는 이미지를 찾았으나 찾지 못했습니다.The push command was looking for an image named docker/getting-started, but didn't find one. docker image ls를 실행해도 해당 이미지가 표시되지 않습니다.If you run docker image ls, you won't see one either.

    이 문제를 해결하려면 빌드한 기존 이미지에 “태그”를 지정하여 다른 이름을 지정해야 합니다.To fix this, you need to "tag" your existing image we've built to give it another name.

  2. docker login -u <username> 명령을 사용하여 Docker Hub에 로그인합니다.Sign in to the Docker Hub using the command docker login -u <username>.

  3. docker tag 명령을 사용하여 getting-started 이미지에 새 이름을 지정합니다.Use the docker tag command to give the getting-started image a new name. <username>을 Docker ID로 교체해야 합니다.Be sure to swap out <username> with your Docker ID.

    docker tag getting-started <username>/getting-started
    
  4. 이제 푸시 명령을 다시 시도합니다.Now try your push command again. Docker Hub에서 값을 복사하는 경우에는 이미지 이름에 태그를 추가하지 않았으므로 tagname 부분을 삭제할 수 있습니다.If you're copying the value from Docker Hub, you can drop the tagname portion, as you didn't add a tag to the image name. 태그를 지정하지 않으면 Docker에서 latest라는 태그를 사용합니다.If you don't specify a tag, Docker will use a tag called latest.

    docker push <username>/getting-started
    

    명령줄 대신 Docker 뷰의 이미지 섹션에서 이미지 태그를 마우스 오른쪽 단추로 클릭하고 푸시... 를 선택한 다음 레지스트리 연결... 을 선택하여 Docker Hub 를 수행할 수도 있습니다.Instead of the command line, you can also right-click on the image tag in the Images section of the Docker view, and choose Push..., then choose Connect registry... and then Docker Hub.

새 인스턴스에서 이미지 실행Run the image on a new instance

이제 이미지를 빌드하고 레지스트리에 푸시했으므로 이 컨테이너 이미지가 표시된 적이 없는 새 인스턴스에서 앱을 실행해 봅니다.Now that your image has been built and pushed into a registry, try running the app on a brand new instance that has never seen this container image! 이렇게 하려면 Play with Docker를 사용합니다.To do this, you will use Play with Docker.

  1. 브라우저에서 Play with Docker를 엽니다.Open your browser to Play with Docker.

  2. Docker Hub 계정으로 로그인합니다.Sign in with your Docker Hub account.

  3. 로그인한 후 왼쪽 사이드바에서 “+ 새 인스턴스 추가” 링크를 클릭합니다.Once you're logged in, click on the "+ ADD NEW INSTANCE" link in the left side bar. 링크가 표시되지 않으면 브라우저를 좀 더 넓게 만듭니다. 몇 초 후에 브라우저에서 터미널 창이 열립니다.(If you don't see it, make your browser a little wider.) After a few seconds, a terminal window will be opened in your browser.

    Play with Docker 새 인스턴스 추가

  4. 터미널에서 새로 푸시된 앱을 시작합니다.In the terminal, start your freshly pushed app.

    docker run -dp 3000:3000 <username>/getting-started
    

    이미지가 풀다운되어 결국 시작되는 것을 확인할 수 있습니다.You should see the image get pulled down and eventually start up!

  5. 3000 배지가 표시되면 클릭하고 앱에 수정 내용이 반영된 것을 확인합니다.Click on the 3000 badge when it comes up and you should see the app with your modifications! 축하합니다.Hooray! 3000 배지가 표시되지 않으면 포트 열기 단추를 클릭하고 3000을 입력할 수 있습니다.If the 3000 badge doesn't show up, you can click on the Open Port button and type in 3000.

요약Recap

이 섹션에서는 이미지를 레지스트리에 푸시하여 공유하는 방법을 배웠습니다.In this section, you learned how to share images by pushing them to a registry. 그런 다음 새 인스턴스로 이동하여 새로 푸시된 이미지를 실행할 수 있었습니다.You then went to a brand new instance and were able to run the freshly pushed image. 이 동작은 파이프라인이 이미지를 만들어 레지스트리에 푸시한 다음, 프로덕션 환경에서 최신 버전의 이미지를 사용할 수 있는 CI 파이프라인에서는 매우 일반적입니다.This is quite common in CI pipelines, where the pipeline will create the image and push it to a registry and then the production environment can use the latest version of the image.

이 동작이 이해가 되면, 지난 섹션의 끝 부분에서 앱을 다시 시작했을 때 todo 목록 항목이 모두 사라진 것을 떠올려 봅니다.Now that you've that figured out, recall that at the end of the last section, when you restarted the app, you lost all of your todo list items. 사용자 환경에 좋지 않으므로 다음에는 앱을 다시 시작해도 데이터를 유지할 수 있는 방법을 알아보겠습니다.That's obviously not a great user experience, so you'll learn next how you can persist the data across restarts!

다음 단계Next steps

자습서를 계속 진행합니다.Continue with the tutorial!