AmazonECR 및 EC2를 사용하여 AWS에서 Docker 이미지를 빠르게 이동

6802 단어 DockerAWS
ECR(EC2 Container Registry)에 등록된 Docker 이미지는 EC2에서 컨테이너로 시작하기 전에 프로세스를 써 봅니다.
ECS도 대체로 검증이 끝났고 서비스 측은 그쪽을 이용할 예정이지만 기초를 되돌아본다는 뜻을 정리했다.

Docker


한 달 동안 도커를 만지작거렸지만, 여전히 손 옆에 있는 개발 환경에서 활동하는 것들, 다른 환경에서 그렇게 행동하는 것은 없는 장점이다.
지금까지 개발환경 OK→ST를 처음부터 다시 만들기→정식 공연도 같은 일을 해왔지만, 호스트 쪽에서 Docker 엔진을 넣었을 뿐, 실제 과정은 그렇게 개발환경의 물건을 이식할 수 있는 곳이 상당히 덥다.이런 인상.

할 일


ECR 사용 준비ECR에 Docker 이미지 등록EC2 제작EC2에서 ECR에서 pull로 나오는 Docker 컨테이너 설정

이른바 ECR


공식 이름 EC2 Container Registry
Amazon에서 제공하는 완전 관리 Docker 컨테이너 레지스트리입니다.
ECS(EC2 Container Service) 및 EB(Elastic Beanstalk)를 쉽게 설계할 수 있는 Docker 이미지 관리 솔루션

ECR로 뭐가 좋아요?

  • EC2 실례에만 IAMrole를 부여하면 EC2 측에서 번거로운 인증을 하지 않고 docker 이미지를 사용할 수 있다
  • S3은 백엔드이므로 가용성이 높음
  • 자동 암호화,https통신,안전성도 안심
  • ECR 사용 준비(로컬에서 구현)


    참조AWS Command Line Interface 설치 AWS CLI를 휴대용 시스템에 설치합니다.
    기본적으로 AWS CLI 를 통해 수행됩니다.

    1. 창고 만들기 및 확인

    $aws ecr create-repository --repository-name tst-shnagai
    {
        "repository": {
            "registryId": "xxxxx",
            "repositoryName": "tst-shnagai",
            "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxxx:repository/tst-shnagai",
            "createdAt": 1496229520.0,
            "repositoryUri": "xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai"
        }
    }
    
    
    GUI의 관점에서 볼 때 창고는 ECS 서비스의'창고'로 사용할 수 있다

    2.ecr 입장


    세션이 12시간이라서 다음날 끝날 것 같아요.
    ## これで一発
    
    $ $(aws ecr get-login --region ap-northeast-1)
    Flag --email has been deprecated, will be removed in 17.06.
    Login Succeeded
    
    ## $()の式展開を使わない場合
    
    $ aws ecr get-login --region ap-northeast-1
    docker login -u AWS -p eyJwYXlsb2FkIjoicURLTkxCTFhobUJuSTRxSDRNSUFBOEprc0txSnVuTVgrdzRzNkl4NU5rRDUxM0N...
    ### 標準出力の結果を貼り付けてログイン
    $ docker login -u AWS -p eyJwYXlsb2FkIjoicURLTkxCTFhobUJuSTRxSDRNSUFBOEprc0txSnVuTVgrdzRzNkl4NU5rRDUxM0N...
    Login Succeeded
    

    ECR에 Docker 이미지 등록(로컬 시스템에서 구현)


    수중에 있는 어떤 Docker 인상을ECR에 push하는 절차
    손 옆에 Docker에 대한 인상을 ECR에 표시한 후 ECR에 push

    1. docker tag 명령으로 표시


    이번에는 예를 들어 수중에 있는'appache td'라는 docker 이미지에 대해 ECR의 규칙에 따라 이름으로 표시한다
    ## 元々のイメージ
    $ docker image list |grep apache_td
    apache_td                                                         latest              2c42dd3f5e5c        13 days ago         1.4GB
    
    ## タグ付けを実施
    $ docker tag apache_td:latest  xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest
    
    ## imageIDは変わらないので、下記のような検索するとapache_tdがECRに対応したイメージとしてタグ付けされたことがわかる
    $ docker image list |grep 2c42dd
    xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai     latest              2c42dd3f5e5c        13 days ago         1.4GB
    apache_td                                                         latest              2c42dd3f5e5c        13 days ago         1.4GB
    

    2. ECR에서 1로 표시된 Docker Image push

    $ docker push xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest
    The push refers to a repository [xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai]
    47d1cbb6b480: Layer already exists
    ...
    latest: digest: sha256:14b7a5d491fa694c00f026bbc6c6cd09e0ddc63d0e586569a0de42a8ce7ec5d1 size: 2411
    
    
    GUI에서 서명과 눌린 날짜와 시간을 확인하고 이미지가 무사히 향상되었는지 확인합니다

    이제 ECR에서 Docker 이미지에 로그인하면 완료!!

    EC2 인스턴스 생성하기


    1. 일반적인 상황에 따라 EC2 실례를 만든다. (OS는 기본적으로awscli를 포함하는amazon linux라면 비교적 쉽다)


    IAMRole에 대해서만 [AmazonEC2 Contaainer Registry ReadOnly] 정책 제공

    2. docker 설치


    AWS의 공식 문서에만 따라 하기 때문에 명령만 나열합니다
    Docker 설치
    ec2-user에서 docker 명령은sudo 없이도 사용할 수 있습니다.
    $ sudo yum update -y
    $ sudo yum install -y docker
    $ sudo service docker start
    ### ec2-userでsudoなしでdockerコマンドを打てるようにするため
    $ sudo usermod -a -G docker ec2-user
    ###再ログイン
    $ docker info
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 17.03.1-ce
    

    EC2에서 ECR에서 pull로 나오는 Docker 컨테이너 설정(EC2에서 구현)


    1. ECR 진입


    IAMRole 없이 로그인을 통해 팝업
    $ $(aws ecr get-login --region ap-northeast-1)
    Login Succeeded
    

    2. ECR에서pull Docker 이미지

    ## ECRにアップロードしたイメージをpull
    $ docker pull xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest
    latest: Pulling from tst-shnagai
    996fe98f55d8: Pull complete
    ...
    e6b377ddca6e: Pull complete
    Digest: sha256:14b7a5d491fa694c00f026bbc6c6cd09e0ddc63d0e586569a0de42a8ce7ec5d1
    Status: Downloaded newer image for xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest
    
    ## 手元のイメージとして登録されたことを確認
    $ docker image ls
    REPOSITORY                                                      TAG                 IMAGE ID            CREATED             SIZE
    xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai   latest              2c42dd3f5e5c        13 days ago         1.4 GB
    

    3. docker 컨테이너 시작


    pull 그림에서 용기 시작하기
    ## ホストの8080ポートにマッピングするtestという名前のコンテナを起動する
    $ docker run -d --name test -p 8080:80 xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest
    dbbb74b6ebe95666d356250de8310c19403078f53e020069e9a6d10e479b2873
    
    ## -lオプションで最後に起動したコンテナを表示
    $ docker ps -l
    CONTAINER ID        IMAGE                                                                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
    dbbb74b6ebe9        xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tst-shnagai:latest   "/bin/sh -c '/bin/..."   4 seconds ago       Up 4 seconds        0.0.0.0:8080->80/tcp   test
    
    ## 動作確認として、ホストの8080に対してcurlでリクエストしてみる
    $ curl localhost:8080
    version 1.2
    

    총결산


    일반적으로 AWS에서 ECR을 사용하여 docker 컨테이너를 시작하는 프로세스입니다.docker를 손으로 만지는 사람이라면 특별히 걸려 넘어지지 않는 내용이라고 생각해요.
    ECS는 기본 운용(해당 발언에서 EC2 이후라고 부른다)을 추상화하고, 클러스터라는 EC2 합체에 ELB, 오토스케일링 등을 부착해 사용하는 서비스이기 때문에 이를 제대로 이해하지 못하면 진전에 큰 차이가 있다는 인상을 준다.
    배후에서 무엇을 하고 있는지 이해하는 것이 중요하다.

    좋은 웹페이지 즐겨찾기