Docker machine을 사용해보기

Docker machine이란?



AWS, GCP, 사쿠라 클라우드 등에 Docker Engine을 설치하는 도구입니다.
Docker Engine은 Docker 호스트를 조작하기위한 명령 등을 포함합니다.
docker-machine 명령을 사용하여 Docker 호스트를 만들고 관리합니다.

환경


  • MacBookPro
  • Catalina
  • Docker for Mac
  • VirtualBox

  • Docker 호스트 만들기



    docker-machine은 가상 시스템에 Docker 호스트를 만듭니다.
    이번은 명시적으로 가상화 드라이버를 지정하고 있습니다만, 특히 조작 대상을 지정하지 않으면 VirtualBox가 됩니다.
    --driver 는 설치 대상의 지정, default 는 작성하는 Docker 호스트에 붙이는 명칭입니다.
    % docker-machine create --driver virtualbox default
    
    ~ 略
    

    Docker 호스트의 상태 확인



    docker-machine ls를 사용하여 Docker 호스트의 상태를 확인할 수 있습니다.
    드라이버가 virtualbox가 되고 상태가 Running입니다.
    % docker-machine ls                                
    NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
    default   -        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.12 
    

    생성된 호스트에는 tinycorelinux라는 경량 OS가 설치되어 있으며 Docker Engine 설치 및 시작이 자동으로 수행됩니다.

    Docker 호스트에 연결하기 ①



    docker-machine env를 실행하면 대상 호스트를 구성하는 명령이 표시됩니다.

    환경 변수를 설정하는 export 명령이 열거되었습니다.

    Run this command to configure your shell 과 같이, 기재의 eval ~ 로부터 시작되는 커멘드를 실행하면 정리해 환경 변수의 설정을 할 수 있습니다.
    % docker-machine env default
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/Users/hogehoge/.docker/machine/machines/default"
    export DOCKER_MACHINE_NAME="default"
    # Run this command to configure your shell: 
    # eval $(docker-machine env default)
    
    % eval $(docker-machine env default)
    
    % echo $DOCKER_HOST
    tcp://192.168.99.100:2376 
    

    작성한 호스트가 ACTIVE가 되어, hello-world 컨테이너를 기동할 수 있었습니다.
    % docker-machine ls                 
    NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
    default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.12  
    
    % docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    b8dfde127a29: Pull complete 
    Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    Docker 호스트에 연결하기 ②



    ssh로 연결하여 가상 머신에서 실행 중인지 확인합니다.
    본 느낌 로컬에서 실행한 것 같은 감각이 된다고 생각하므로, 작성한 Docker 호스트에 ssh 접속해 확인합니다.
    % docker-machine ssh default
       ( '>')
      /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
     (/-_--_-\)           www.tinycorelinux.net
    %
    

    tinycorelinux의 아스키 아트가 표시되었습니다.
    프로세스 목록을 살펴 보겠습니다.
    $ docker ps -a                                                 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    c8492503fce5        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                       inspiring_keldysh
    

    Exited가 되어 방금 시작한 hello-world 컨테이너를 확인할 수 있습니다.

    Nginx에서 웹페이지를 게시해 보기



    이번에는 nginx 컨테이너를 시작하여 웹 페이지를 게시해 보겠습니다.

    Nginx 이미지 가져오기 및 컨테이너 시작



    -d는 분리 모드에서 백그라운드에서 시작됩니다.
    -p 로 호스트와 컨테이너의 포트를 매핑 합니다.
    그런 다음 시작할 이미지 이름을 지정합니다.
    % docker run -d -p 8000:80 nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    45b42c59be33: Pull complete 
    8acc495f1d91: Pull complete 
    ec3bd7de90d7: Pull complete 
    19e2441aeeab: Pull complete 
    f5a38c5f8d4e: Pull complete 
    83500d851118: Pull complete 
    Digest: sha256:f3693fe50d5b1df1ecd315d54813a77afd56b0245a404055a946574deb6b34fc
    Status: Downloaded newer image for nginx:latest
    bedf940d9670fab2e2d99a95d812ac6750aaf35772cc35c9048a82d9c0712c2a
    
    

    IP 주소는 docker-machine env default 를 실행했을 때에도 표시되고 있었습니다만, 아래의 커멘드로 확인 가능합니다.
    % docker-machine ip                     
    192.168.99.100
    

    브라우저에서 아래에 액세스해 봅니다.
    192.168.99.100:8000
    

    이런 화면이 나오면 OK입니다.



    Docker 호스트 중지


    % docker-machine stop default
    Stopping "default"...
    Machine "default" was stopped.
    

    STATE가 Stopped가 되어, Nginx의 화면도 표시되지 않게 되었습니다.
    % docker-machine ls                     
    NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
    default   -        virtualbox   Stopped                 Unknown
    



    Docker 호스트 시작


    % docker-machine start default
    Starting "default"...
    (default) Check network to re-create if needed...
    (default) Waiting for an IP...
    Machine "default" was started.
    Waiting for SSH to be available...
    Detecting the provisioner...
    Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
    

    STATE가 Running이 되었습니다.
    % docker-machine ls           
    NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
    default   *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.12   
    

    Active로 만든 Docker 호스트와의 연결 해제



    docker-machine env 에 -u 옵션을 붙여 실행하면, 설정한 환경 변수를 삭제하기 위한 명령이 표시됩니다.
    % docker-machine env -u
    unset DOCKER_TLS_VERIFY
    unset DOCKER_HOST
    unset DOCKER_CERT_PATH
    unset DOCKER_MACHINE_NAME
    # Run this command to configure your shell: 
    # eval $(docker-machine env -u)
    

    이 작업을 수행합니다.
    % eval $(docker-machine env -u)
    

    ACTIVE에서 '*'가 사라졌습니다.
    % docker-machine ls            
    NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
    default   -        virtualbox   Stopped                 Unknown   
    

    좋은 웹페이지 즐겨찾기