2018년 3월 7일 수요일

Ubuntu에 Docker 설치하고 AWS ECS와 연동하기

참고 사이트
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/registry/deploying/
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/installing.html
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/ECR_GetStarted.html
http://bluese05.tistory.com/51



Docker를 써봐야지 써봐야지 하다가 드디어 맘먹고 설치부터 원격 repository까지 설정해 봤다.

Ubuntu 16.04에 Docker 설치하기


혹시나 있을 구 버전의 docker를 제거한다.
$ sudo apt-get remove docker docker-engine docker.io

패키지 리스트 업데이트
$ sudo apt-get update

필요한 패키지 설치
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Docker 공식 GPG key 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

apt-key 핑크프린트 확인
$ sudo apt-key fingerprint 0EBFCD88

apt 소스 repository 추가
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

repository 추가 했으니 다시 업데이트
$ sudo apt-get update

docker 설치
$ sudo apt-get install docker-ce

정상 설치 확인
$ sudo docker run hello-world



AWS ECS(Elastic Container Registry) 생성하기

AWS 프리티어로 가입 후 12개월 동안 매달 500M까지 무료 이용 가능

1. AWS 콘솔 로그인
2. Elastic Container Service 서비스 접속
3. 리포지토리 탭 - 리포지토리 생성
4. 리포지토리 이름 작성
5. ECR용 계정 생성(IAM)
  a. IAM 서비스 접속
  b. 사용자 - 사용자 추가
  c. 사용자 이름 입력
  d. 액세스 유형
    - 프로그래밍 방식 액세스는 필수
    - AWS Management Console 액세스는 선택 사항
  e. 권한 설정
    - 기존 정책 직접 연결 : AmazonEC2ContainerRegistryFullAccess 중 알맞는 것 선택 권한은 더 축소하려면 FullAccess 말고 다른 것 선택
  f. 사용자 만들기
  g. 액세스키 보관을 위해 .csv 다운로드 하고 잘 보관하기


AWS ECS 접속하기


1. aws cli를 설치해야한다. (pip가 설치 안되어 있다면 먼저 설치한다.)
$ sudo apt-get install python-pip
$ pip install awscli --upgrade --user
2. 잘 설치 되었는지 버전 확인
$ aws --version
3. aws 접속을 위한 계정 설정
$ aws configure
4. 정보 입력하기
AWS Access Key ID [None] : 아까 다운 받은 csv 파일에서 확인
AWS Secrect Key [None] : 아까 다운 받은 csv 파일에서 확인
Default region name [None] : ECS 리포지토리탭에서 리포지토리 URI를 확인하면
  11111111.dkr.ecr.ap-northeast-2.amazonaws.com 형태로 되어 있는데
  그 중에서 ap-northeast-2에 해당하는 걸 입력하면 된다.
Default output foramt [None] : json
5. 로그인하기
$ aws ecr get-login --no-include-email --region [region]
docker login -u AWS -p XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e none https://XYZXYZXYZXYZ.dkr.ecr.xxxxxxx.amazonaws.com

6. 이런식으로 명령어를 반환하는데 이걸 그대로 복사해서 입력하면 aws ecr에 docker image를 push할 수 있게 된다.


기존 Docker Image 받아서 나만의 Docker Image 만들기

1. Ubuntu 16.04 기반의 container를 실행한다.



$ sudo docker run -i -t --name my_ubuntu ubuntu:16.04
해당 명령을 실행하면 ubuntu 16.04 이미지를 기본 repository(docker hub)에서 다운 받고 해당 이미지로 로컬에 컨테이너를 실행시키고, root 권한으로 shell을 실행한다.

2. 변경 사항 만들기 1 - 계정 새로 만들기(계정명이 ubuntu)
# adduser ubuntu
비밀번호 입력하고 나머지는 엔터로 넘기고 마지막에 y

3. 변경 사항 만들기 2 - 파일 생성
# su - ubuntu
$ cd ~
$ echo "Hello World" >> my_ubuntu
4. 컨테이너에서 빠져나오기
exit, exit 입력하고 원래 로컬의 ubuntu로 돌아온다.

5. 변경 된 사항으로 이미지 만들기
$ sudo docker ps -a
실행되었던 container 목록이 나온다. 우리는 my_ubuntu라는 container를 이미지로 만들 것이다. 이때 확인해야 될 것은 리포지토리 URI이다.
$ sudo docker commit -a "username" -m "my first commit" my_ubuntu 리포지토리URI:TAG

TAG 입력 시 1.0 형태로 입력하면 push가 안되는 것 같다. 그래서 first, second와 같이 하거나 v1 처럼 . 없이 입력해야 잘 된다. 입력 안할 경우에는 기본적으로 latest로 지정

**URI 확인하기
a. Elastic Container Service 서비스 접속
b. 리포지토리 - 생성한 리포지토리 이름 클릭
c. 푸시 명령보기 버튼 클릭
d. 아까 Docker를 설치한 ubuntu 서버에서 해당 명령을 따라하면 된다.

6. 생성 된 이미지 확인하기
$ sudo docker images
하면 image가 추가 된 것을 확인할 수 있다.


Docker Image AWS ECR에 push/pull 하기

1. push하기
$ sudo docker push 리포지토리URI:TAG
2. AWS 콘솔에서 직접 확인한다.

3. local에 저장되어 있는 이미지 지우고, esc의 이미지 받아와서 container 생성하기
a. 현재 존재하는 컨테이너를 확인해서 모두 지운다.
$ sudo docker ps -a
$ sudo docker rm my_ubuntu (나머지 컨테이너도 동일하게 삭제)
b. 현재 존재하는 이미지를 확인해서 모두 지운다.
$ sudo docker images
$ sudo docker rmi REPOSITORY:TAG
c. ECR에서 이미지를 받아서 컨테이너 생성
$ sudo docker run -i -t --name aws_my_ubuntu REPOSITORY:TAG
d. 변경 된 파일 있는지 확인
# tail /home/ubuntu/my_ubuntu
위에서  /home/ubuntu/my_ubuntu에 Hello World 문자열을 입력한 것이 있는지 확인한다.


이런 식으로 나만의 이미지를 만들어서 AWS에 올려 놓고 배포할 수 있다.



댓글 1개: