0513_Docker_Docker Compose : Wordpress 배포, AWS ECR/ECS : 웹 서비스 배포

HYOJU DO·2022년 5월 13일
0

Docker

목록 보기
3/3
post-thumbnail

Docker Compose : Worpdress


작업 디렉토리 : ~/compose/wp

docker-compose.yaml

version: "3"

services:
  wp-db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpadm
      MYSQL_PASSWORD: P@ssw0rd
    volumes:
      - wp-db-vol:/var/lib/mysql
    networks:
      - wp-net

  wp-web:
    depends_on:
      - wp-db
    image: wordpress:5-apache
    restart: always
    environment:
      WORDPRESS_DB_HOST: wp-db # 서비스 디스커버리 
      WORDPRESS_DB_USER: wpadm
      WORDPRESS_DB_PASSWORD: P@ssw0rd
      WORDPRESS_DB_NAME: wordpress
    ports:
      - "80:80"
    volumes:
      - wp-web-vol:/var/www/html
    networks:
      - wp-net

volumes:
  wp-db-vol:
  wp-web-vol:

networks:
  wp-net:

🌟 서비스 디스커버리 : 자체 내부 DNS 서비스를 실행하여 이름별로 서비스를 라우팅


컨테이너 생성

docker compose up -d
[+] Running 5/5
 ⠿ Network wp_wp-net       Created                                                                                         0.1s
 ⠿ Volume "wp_wp-db-vol"   Created                                                                                         0.0s
 ⠿ Volume "wp_wp-web-vol"  Created                                                                                         0.0s
 ⠿ Container wp-wp-db-1    Started                                                                                         0.9s
 ⠿ Container wp-wp-web-1   Started                                                                                         2.8s

컨테이너 삭제

docker compose down -v
[+] Running 5/5
 ⠿ Container wp-wp-web-1  Removed                                                                                          1.4s
 ⠿ Container wp-wp-db-1   Removed                                                                                          1.7s
 ⠿ Volume wp_wp-web-vol   Removed                                                                                          0.1s
 ⠿ Network wp_wp-net      Removed                                                                                          0.4s
 ⠿ Volume wp_wp-db-vol    Removed                                                                                          0.1s

🎈 반드시 -v 옵션을 함께 사용하여 wordpress volume까지 삭제


AWS에 컨테이너 이미지 업로드 후 웹 서비스 실행


AWS IAM 생성 및 AWS CLI 설치

  1. AWS IAM 계정 생성 (프로그래밍 방식)
    Registry에 이미지 push는 명령어로만 가능 ➜ 프로그래밍 권한 필요
    administrator 그룹을 생성하고 생성한 사용자를 해당 그룹에 포함 시키기
  2. Docker VM에 AWS Command 설치
    AWS Registry에 이미지 push 시, AWS 권한 필요
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ sudo apt -y install unzip
$ unzip awscliv2.zip
$ sudo ./aws/install
  1. aws 명령 인증 구성
$ aws configure 

ECR (Elastic Container Registry)

Repository 생성

  • Private 레포지토리로 생성
    -> IAM에 의해 관리

  • 유일한 이름 으로 설정

  • 이미지 스캔 : 활성화 (비용 발생)

Registry 인증

작업 디렉토리 : ~

  1. 인증 토큰 검색하고 레지스트리에 대해 Docker Client 인증
$ aws ecr get-login-password --region us-east-1 | 
docker login --username AWS --password-stdin [레포지토리 이름]
WARNING! Your password will be stored unencrypted in /home/vagrant/.docker/config.json.
...
Login Succeeded
  1. Docker 이미지 빌드
    (이미 빌드 된 이미지가 존재하는 경우 생략 가능)
docker build -t [레포지토리 이름] 📌확인
  1. 빌드 된 이미지에 태그 지정
docker tag [이미지명]:[태그] [레포지토리명]:[태그]

이미지를 AWS 리포지토리로 푸시

docker push [레포지토리명]:[태그]

➕ digest : 빌드 중 자동으로 생성되며 변경할 수 없는(불변) ID -> 매번 동일한 이미지 다운로드 가능

ECS (Elastic Container Service)

  • Fargate : 여러 개의 컨테이너 클러스터링하는 완전 관리형(serverless) 서비스
    -> Swarm, k8s, Mesos 와 비슷한 기능
  • ECS Anywhere -> 📌 강의 다시 확인

클러스터 생성

이름지정 : mycontainer-cluster
네트워킹 : Default (이 실습은 변경하지 않고 진행)
인프라 : Fargate 자동 설정

태스크 정의 생성

1단계 : 태스크 정의 및 컨테이너 구성
태스크 정의 패밀리 : pyweb-task2
컨테이너

  • 컨테이너 세부정보
    • 이름 : pyweb
    • 이미지 url : [repository url:tag]
    • 포트 매핑 : 해당 웹서비스 이미지의 기본 포트
      (ex. Django - 8000, Flask - 5000)

2단계 : 환경, 스토리지, 모니터링 및 태그 구성
앱 환경 : AWS Fargate
운영체제 : Linux/X86_64
태스크 크기 : .25v CPU, 1GB 메모리 (현재 제일 작은 사이즈로 지정)
태스크 역할 : 없음 (원래 지정해줘야 함)

클러스터 서비스 배포

배포구성

  1. 애플리케이션 유형
  • 서비스 : 중지 및 다시 시작할 수 있는 장기 실행 컴퓨팅 작업
    ➜ -d 로 실행하는 서비스 (wp, db 등)
  • 태스크 : batch 작업
    ➜ 서비스를 시작하면 언젠가 종료되어야하는 서비스
  1. 태스크 정의
    패밀리 : [ 앞서 생성한 태스크정의 ]
    서비스 이름 지정
    원하는 태스크 갯수 == 원하는 컨테이너 수
    ➜ 로드밸런싱 가능
    ➜ 원하는 서비스 관련 보안 그룹 미리 설정해서 생성!!

cloudwatch에서 로그 그룹 삭제!! (비용 발생)


웹 페이지 접속

웹 브라우저에서 태스크 정의 public IP/서비스 포트번호 로 접속



profile
Be on CLOUD nine! ☁️ ( 수정 예정 == 📌)

0개의 댓글