AI 웹 개발 과정/Docker

Docker 실무 - 3주차

만 기 2022. 7. 11. 10:03

 

AWS를 사용해서 실제서비스 배포하기

 

1. AWS EC2 인스턴스 생성

  • Amazon Linux 2 AMI 선택
  • 인스턴스 유형 선택 - t2.micro
  • 보안그룹 규칙 추가 - HTTP 유형으로 포트 80번, 0.0.0.0/0 
  • 키페어 생성

2. AWS EC2 인스턴스 접속하기

 

Download PuTTY: latest release (0.77)

This page contains download links for the latest released version of PuTTY. Currently this is 0.77, released on 2022-05-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

 

PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결 - Amazon Elastic Compute Cloud

프라이빗 키의 암호는 추가 보호 계층입니다. 프라이빗 키가 노출되더라도 암호 없이 사용할 수 없습니다. 암호문 사용의 단점은 인스턴스에 로그온하거나 인스턴스에 파일을 복사하기 위해 사

docs.aws.amazon.com

 

3. Amazon linux docker 설치

 

Amazon ECS에서 사용할 컨테이너 이미지 생성 - Amazon Elastic Container Service

Amazon ECS에서 사용할 컨테이너 이미지 생성 Amazon ECS는 작업 정의에 Docker 이미지를 사용하여 컨테이너를 시작합니다. Docker는 사용자가 컨테이너에서 분산 애플리케이션을 구축, 실행, 테스트 및

docs.aws.amazon.com

  • docker 설치하기
    • sudo yum update -y
      sudo amazon-linux-extras install docker -y
  • Docker 서비스 실행하기
    • sudo service docker start
  • Docker 상태 확인하기
    • service docker status
  • sudo 없이 docker를 사용하기
    • sudo usermod -a -G docker ec2-user
    • PuTTy exit 후 다시접속

 

4. Docker-compose 를 사용하여 배포하기

  1. docker-compose 실행파일 설치
  2. docker-compose.yaml 만들기
    • yaml 을 만들때 vi docker-compose.yaml 입력 후 a 눌러서 끼워넣기가 뜨면 yaml 코드 입력한다.
    • vi 는 파일을 생성하거나 수정하는 커맨드이다.
    • vi 에서 코드 입력 후 esc 누르고 :wq 입력하여 빠져나온다.
    • 비정상적으로 종료했을때 vi -r docker-compose.yaml 로 다시 복구할 수 있다.
    • 또한 ls -all 로 임시파일을 확인한 후에
    • rm .docker-compose.yaml.swp 로 임시파일을 삭제해준다
  3. docker-compose.yaml 실행하기
    • ERROR: manifest for dnwnmin/docker-memo:version3 not found: manifest unknown: manifest unknown
    • .yaml 코드의  image 를 dnwnmin/docker-memo:version1 (레포지토리 네임) 으로 변경하였더니 실행.
  4. EC2 public_ip 로 접근해보기

*** PuTTy 에서 vi docker-compose.yaml 입력후 a 눌러서 수정

 

 

* CI / CD

 

Continuous Integration : 여러 개발자들이 함께 개발을 하는 과정에서 코드가 잘 작동 하는지를 확인하는 것

  • 배포를 하기 전에 이 배포를 해도 괜찮은 상태인지 확인하기 위해서 CI를 사용
  • 테스트 코드 작성
  • 자동화된 테스트 실행

Continuous Deployment : 반영된 소스코드가 실제 서비스에도 자동으로 반영이 되게 하는 것

  • 도커를 사용하면 Continuous Deployment 과정이 더 쉽고 빠르게 진행
  • Events 특정이벤트 발생했을때
    • ex) on: push 
  • Workflows 어떤 작업
    • ex) Job: run unit tests (Job 끼리 순차적으로)
      • ex) action check out (Job 안에서 action 사용가능)
    • Runner : Job들은 독립적으로 Runner 라는 컨테이너에서 실행된다.
  • .gitgub/workflows/workflow.yaml 생성

 

github action 구조

  1. Workflows: 자동화 하려고 하는 과정들
    • 한개 또는 여러개의 job으로 구성되며, event에 의해서 시작됩니다.
    • 빌드, 테스트, 릴리즈, 배포 등의 작업이라고 생각하면 됩니다.
  2. Events : workflow를 trigger되는 행동들
    • push, pull request, cronjob 등이 있음.
  3. Jobs: 동일한 runner에서 실행하려고하는 여러개의 step의 모임
  4. Steps: job을 구성하는 한개의 커맨드로 action이거나 shell command로 구성됩니다.
  5. Actions: 다른 곳에서 정의된 커맨드의 모음
  6. Runner: Job이 실행되는 환경

 

 

github action을 사용하여 CI 파이프라인 구축하기

 

1. pip install pytest

2. app.py 의 기능 분리 (flask API코드 와 기능 코드)

3. 기능 test 코드 작성

4. 테스트코드 실행 

pytest

5. github 에 레포지토리 생성하고 푸쉬

6. github action 사용

 

Learn GitHub Actions - GitHub Docs

Managing issues and pull requests

docs.github.com

 

7. main branch에 push할 때 test를 하게 만들기

.github/workflows/ 하위에 yaml 파일을 만들기

name: ci-pipeline
on:
  push:
    branches:
      - main
jobs:
  run-test-code:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
        with:
          python-version: "3.8"
      - run: pip install -r requirements.dev.txt
      - run: pytest
  • 깃 커밋 푸쉬 하고 레포지토리 Actions 에서 확인

8. main branch에 push할 때 docker image를 빌드하고 push 하게만들기

도커 Access token 받기

https://hub.docker.com/settings/security

Access token을 생성한 뒤 클립보드에 복사

 

github repository에서 settings를 누른 뒤, 왼쪽 메뉴에서 secret

  1. DOCKERHUB_TOKEN : dockerhub에서 생성한 token
  2. DOCKERHUB_USERNAME: docker hub username

 

9. github action을 사용하여 CD 구축하기

서버 접속에 필요한 ssh key 등록

서버에 접속할 수 있는 주소 Private IP 등록


 

3주차 숙제

 

1. AWS EC2 인스턴스 생성

2. Docker hub에서 Repository 생성

3. git hub 에서 repository 생성 후에 push 

4. git hub repository - settings - secrets 추가

  • DOCKERHUB_USERNAME
  • DOCKERHUB_TOKEN  (dockerhub - Account Settings - security - New Access Token)
  • HOST  (ec2 인스턴스 퍼블릭 ipv4 주소)
  • PRIVATE_KEY  (.pem | pbcopy)

5. 서버에 접속 

  • ssh -i ~/Downloads/sparta-docker.pem ec2-user@퍼블릭 ipv4 주소

6. docker 설치

  • install docker amazon linux 2
  • install docker-compose amazon linux 2

7. docker-compose.yaml 파일 수정

services:
  my-favorite-star:
    image: dnwnmin/my-favorite-star:latest
    port:
    - 80:5000

 

8. 서버에 docker-compose.yaml 코드 넣기

  • vi docker-compose.yaml
  • docker-compose up -d    
  • dnwnmin/my-favorite-star:latest 이미지가 없으므로 에러발생

9. (venv)이미지 생성 후 dockerhub 에 push

  • docker build . -t dnwnmin/my-favorite-star:latest
  • docker push dnwnmin/my-favorite-star:latest
  • dockerhub repository 에서 확인

10. docker-compose up -d   실행

11. 퍼블릭 ipv4 주소 로 진입해서 서비스 확인

12. mongo DB의 데이터를 넣어주기 (09:33)