aws로 도커를 활용해서 배포해보기
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html
putty로 해서 터미널로 ec2 환경접속(방법은 위의 링크 활용)
putty 다운로드 링크 => https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
참조
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html
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
💡 해당 권한이 반영된 shell을 사용하려면 나갔다가 다시 들어와야 함!
Docker-compose 를 사용하여 배포하기
- docker-compose를 사용하여 배포하기 위해서는 아래 세가지가 필요!
1. docker-compose 실행파일 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. docker-compose.yaml 만들기
- 'vi docker-compose.yaml' 명령어 치기
-아래 파일 내용 추가
version: "3.9"
services:
flask:
image: ecec1023/docker-memo:version2
ports:
- "80:5000"
mongo:
image: mongo:latest
volumes:
- mongo:/data/db/
ports:
- "27017:27017"
volumes:
mongo:
-지금까지 입력한 문자들은 저장된 것이 아니므로 저장하고 vi를 종료해야한다. 현재 명령 모드이므로 ':wq'를 입력한다. (키보드의 콜론(:)을 누르고 w를 누르고 q를 눌렀다) 'w'는 저장하라는 명령이고 'q'는 종료하라는 명령이다. 이 상태에서 엔터키를 누른다.
중간에
docker build . -t ecec1023/my-favorite-star:latest 해서 빌드해주고
docker push ecec1023/my-favorite-star:latest 해서 푸쉬하기 해줘야함
3. docker-compose.yaml 실행하기 / docker-compose up -d 명령어
docker exec -it bash
apt-get update
apt-get install vim
중간정리 타임!
도커가 있을 때는
1. 도커설치
2. Docker-compose 설치
3. docker-compose.yaml을 서버에 올리고
4. docker-compose up -d 라는 명령어를 통해 도커 레지스트리로부터
도커 이미지를 다운받고, 그 이미지로부터 컨테이너를 docker-compose.yaml에 있는 형태로 실행이 되어서
서비스를 배포
만약 도커없이 제공하려면?!
1. 파이썬 설치부터 하고
2. pip install requirements.txt 도 해야하는데
로컬에 있는 txt파일을 서버로 올려줘야하는데
보통 SCP라는 명령어를 쓰거나, 윈도우에서는 FileZilla 같은 sftp라고해서
서버끼리 파일을 전송할 수 있는 프로토콜을 편하게 만들어주는클라이언트를 사용해서 파일 업로드
이후에 pip install -r requirements.txt 을 해야함.
3. Mongo를 설치(DB 설치)
yum이라는 패키지 매니저 시스템 파일생성
MongoDB패키지 다운받고, 실행
4.templates 이하 파일들이나, app.py 등도 2번처럼 올려준 다음에 실행이 가능
서비스를 하기 위해 세팅하는 환경이 복잡하고 여러 서버의 환경에 맞춰 다 세팅해줘야하는 게 매우 골머리 아픈 부분이라는 점이 다르다.
버전 업그레이드 시 바뀐 버전의 파이썬을 깔고 진행하는 등 번거롭고
라이브러리 업데이트 시 requirements.txt를 다시 올려서 pip install -r requirements.txt 진행
mongodb에서 mysql로 바꾼다든가 등등
그리고 결과적으로 새로운 OS로 이전을 한다면 위에서 사용했던 명령어들이 바뀌면서 다시 생성해야하는 경우도 있을 수 있는데 도커를 사용한다면 도커를 설치하는 부분까지만 찾아서 설치하고
도커명령어만 사용하면 편하게 서비스 제공이 가능!
CI/CD 개념정리! 필요성!
1.코드작성
2.작성한 코드가 잘 작동하는지 확인
3.확인이 되면 작성한 코드를 배포
도커를 통해 코드를 서비스 올리기
환경구축
-이미지 빌드해서 도커 레지스트리에 올려놓고
-도커레지스트리에 있는 이미지를 도커로 실행
테스트 코드작성 / 자동화된 테스트실행
도커 = 배포를 편하게 하기위해 사용
CI = 배포를 해도 괜찮은 상태인지 확인하기 위해 사용
CD = 반영된 소스코드가 실제 서비스에 반영되게 하는 것!
깃헙 레포만들면 나오는 파일올리기 명령어
git init
git status
git add .dockerignore Dockerfile 등등 파일이름들
git status로 추가된 거 체크
git commit -m "커밋 코멘트"
git branch -M main
git remote add origin git@<http 빼고 깃코드주소복사>
git push -u origin main
테스트코드 참고자료
https://www.educative.io/edpresso/5-reasons-why-testing-code-is-great
github action 의외의 자동화툴
Travis, Circle CI, Jenkins 등등
Workflows
: 자동화 하려고 하는 과정들Events
: workflow를 trigger되는 행동들Jobs
: 동일한 runner에서 실행하려고하는 여러개의 step의 모임Steps
: job을 구성하는 한개의 커맨드로 action이거나 shell command로 구성Actions
: 다른 곳에서 정의된 커맨드의 모음Runner
: Job이 실행되는 환경CI파이프라인
1. 테스트 코드 실행
2. docker image 빌드해서 docker hub에 푸쉬
github action은 .github/workflows/ 하위에 yaml 파일을 만들어야 함
-도커토큰을 이용해서 ci라인에 dockerhub에 푸쉬까지 연결
-남들이 만들어놓은 도커사용 액션 사용
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
build-image:
needs: [run-test-code]
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/docker-memo:latest
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
github action으로 cd 파이프라인 생성
1. docker-compose.yaml을 서버에 업로드
2. docker-compose up 명령어를 서버에서 실행해야함.
깃헙 액션에 필요한 두 가지
1. 서버 접속에 필요한 ssh key 등록
2. 서버에 접속할 수 있는 주소인 ip 등록
ssh -i ~/.ssh/sparta-docker.pem ec2-user@{public_ip}
sparta_like_star_docker
docker build . -t ecec1023/my-favorite-star:latest