Docker의 기본 동작

5125 단어 도커ubuntu18.04

소개



Docker 컨테이너가 어떻게 움직이는지 쉽게 정리한 것입니다.
주로 이쪽의 서적을 참고로 하고 있습니다.



Docker/Kubernetes 실습 컨테이너 개발 입문 Docker/Kubernetes를 활용한 컨테이너 개발 스타일을 익힌다!




소스 코드와 Dockerfile 준비



아래의 리포지토리에, 본고에서 소개하는 Docker의 기본 동작 확인용의 소스와 Dockerfile를 두고 있으므로
git clone하여 사용하십시오.
  • fumihachi94/hello_docker: docker 공부용

  • Go 언어의 코드로, 이하와 같은 거동을 하는 서버 어플리케이션으로서 동작합니다.
  • 8080 포트에 http 요청을 보내면 "Hello Docker!!"라고 응답합니다

  • 이 코드의 내용은 Docker/Kubernetes 실습 컨테이너 개발 입문의 2장에서 소개된 것과 거의 같습니다.
    …라고 할까 만마입니다(웃음)

    Docker 이미지 빌드



    소스 파일과 Dockerfile을 준비한 후 docker image build 명령으로 Docker 이미지를 만듭니다.
    다음 예제에서는 sample/echo라는 이미지 이름입니다. sample 는 네임스페이스이며 충돌 회피를 위해 네임스페이스를 추가하는 것이 좋습니다.
    $ docker image build -t sample/echo:latest .
    

    실행 결과
    Sending build context to Docker daemon  56.32kB
    Step 1/4 : FROM golang:1.13
    1.13: Pulling from library/golang
    376057ac6fa1: Pull complete 
    5a63a0a859d8: Pull complete 
    496548a8c952: Pull complete 
    2adae3950d4d: Pull complete 
    039b991354af: Pull complete 
    036abadca78f: Pull complete 
    0514917ef7dc: Pull complete 
    Digest: sha256:c56dbb28a169f9bccdf398dc9d4bc8d41463352843dbcf03b6ef2fb3472c1794
    Status: Downloaded newer image for golang:1.13
     ---> 84125009cb55
    Step 2/4 : RUN mkdir /echo
     ---> Running in 2fea51c650a5
    Removing intermediate container 2fea51c650a5
     ---> ec45bfb228d7
    Step 3/4 : COPY main.go /echo
     ---> f1692e49f33b
    Step 4/4 : CMD [ "go", "run", "/echo/main.go" ]
     ---> Running in 09eddbb7e969
    Removing intermediate container 09eddbb7e969
     ---> d8956f84209a
    Successfully built d8956f84209a
    Successfully tagged sample/echo:latest
    

    이미지 확인


    docker image ls 명령으로 작성된 이미지를 나열할 수 있습니다.
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    sample/echo         latest              d8956f84209a        4 minutes ago       803MB
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB <--以前作成したイメージ
    

    컨테이너 실행 $ docker container run sample/echo:latest 2020/06/07 09:10:44 start server Docker 컨테이너의 애플리케이션이 올바르게 실행되고 있는지 확인하기 위해, 다른 터미널에서 http 요청을 제출해 봅시다. 로컬 8080 포트가 공개되지 않아야 합니다. $ curl http://localhost:8080 curl: (7) Failed to connect to localhost port 8080: 연결이 거부되었습니다. 컨테이너 외부의 요청을 컨테이너 내에서 실행 중인 애플리케이션에 도달해야 합니다. 거기에 필요한 것이 포트 포워딩이 됩니다. 포트 포워딩 포트 포워딩을 사용하면 호스트 시스템의 포트를 컨테이너 포트에 연결하고 컨테이너 외부에서 오는 통신을 컨테이너 포트로 전달할 수 있습니다. 이제 포트 포워딩을 실행해 보겠습니다. 컨테이너를 한 번 중지 먼저 정지시키고 싶은 컨테이너의 CONTAINER ID 혹은 NAMES 를 docker container ls 로 확인합니다. $docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16af6b5417d7 sample/echo:latest "go run /echo/main.go" About an hour ago Up About an hour lucid_burnell CONTAINER ID 또는 NAMES로 컨테이너를 중지합니다. # ID로 중지하는 경우 $docker stop 16af6b5417d7 # NAMES에서 중지하는 경우 $docker stop lucid_burnell 포트 포워딩 호스트 측 9000 포트를 컨테이너 측 8080 포트로 포트 포워딩합니다. $ docker container run -d -p 9000:8080 sample/echo:latest http 요청 제출 9000 포트를 지정하여 http 요청을 보냅니다. 이번에는 Hello Docker!!와 응답이 돌아올 것입니다. $ curl http://localhost:9000 Hello Docker!! 컨테이너 삭제 $docker rm <ID or Name> 이미지 삭제 연습용 이미지를 만들었으므로 앞으로 필요하지 않으면 삭제해 주세요. 정리 정돈 소중! 컨테이너가 없는 이미지 삭제 $ docker rmi d8956f84209a 컨테이너가 있는 이미지 삭제(컨테이너도 삭제됨) $docker rmi -f d8956f84209a

    좋은 웹페이지 즐겨찾기