레이블이 가상화인 게시물을 표시합니다. 모든 게시물 표시
레이블이 가상화인 게시물을 표시합니다. 모든 게시물 표시

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에 올려 놓고 배포할 수 있다.



2017년 10월 18일 수요일

Docker와 Vagrant의 차이



가상 머신(Virtual Machine)과 Docker의 차이

VMWare 같은 Virtual Machine은 일반적으로 아래와 같은 구조를 가진다. Host OS 위에 Hypervisor가 올라가고 그 위에 Virtual Machine을 생성해서 하드웨어를 가상화한다. 그 가상 하드웨어 위에 새로운 Guest OS를 설치해서 사용한다.

일반적인 Virtual Machine 구성


Docker는 하드웨어를 가상화하지도 않고 다른 OS를 통째로 올리지도 않는다. Docker는 Linux Container(LXC)라는 개념으로 OS간의 차이를 저장한다. 하드웨어를 가상화하지 않기 때문에 퍼포먼스가 좋다. 리눅스에서만 동작한다. 라고 알았는데 Docker for Mac, Docker for Windows 라는 것도 있다고는 한다.


Docker 구성

Vagrant란?

Vagrant는 간소화된 VM 관리 서비스이다. Vagrant만 있다고 해서 VM을 생성하거나 하진 못한다. VMWare나 Virtual Box와 같은 Hypervisor를 설치한 후 VM 생성 및 OS 설치를 자동화 하는 것은 가능하다.
자세한 설명 : KTH 슬라이드 쉐어

Docker와 Vagrant의 차이

출처 : https://www.upguard.com/articles/docker-vs-vagrant