GitHub 구성 및 Docker 빌드
- python+Flask 또는 React를 통해 간단한 웹 어플리케이션을 작성
- 웹어플리케이션을 Docker로 빌드하여 DockerHub에 이미지 등록
- 소스코드를 GitHub에 등록
- 깃 브랜치와 브랜치 관리 전략을 수립
크게 4가지로 “메인 브랜치” “피처or토픽 브랜치” “릴리스 브랜치” 핫픽스 브랜치“로 구분된다.
중심이 되는 브랜치는 master와 deveplop으로 이루어진 메인 브랜치이다.
master : 배포가능한 상태만을 관리하는 브랜치
develop : 다음에 배포할 것을 개발하는 브랜치
Hotfit : 배포한 버전 긴급수정, master에서 분기
Release : develop에서 이번 버전에 포함되는 기능이 병합되었다면 QA를 위해 develop 브랜치에서 release를 생성, 버그 수정 및 오류 검토가 끝나면 develop브랜치에 병합후 배포가능한 상태가 되면 master에 병합
feature/topic : 기능을 개발하는 브랜치로 develop 브랜치에서 분기
평소에는 develop 브랜치를 기반으로 개발을 진행한다.
Git-flow와 다르게 흐름이 단순하여 role이 단순하고 master브랜치에 대한 role만 명확하다면 나머지 브랜치들에 대해서는 관여하지 않는다. 즉, hotfix브랜치나 feature브랜치를 따로 구분하지 않는다.
다만 우선순위가 다를뿐이고 pull request 기능을 사용하도록 권장하고 있다.
GitHub Flow전략은 수시로 배포가 일어나며, CI와 배포가 자동화 되어있는 프로젝트에 유용하다.
웹 어플리케이션이 주목적이 아니기 때문에 매우 간단하게 구현하였다.
docker를 사용하기위해서는 프로젝트에 dockerfile을 생성해서 거기에 docker를 어떻게 실행할지 설정을 작성해준다.
FROM python:3.8-slim-buster # docker내 기본 디렉토리 경로
WORKDIR /app
# docker내 필요한 패키지 내용 복사 및 설치
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m", "flask", "run", "--host=0.0.0.0"]
Dockerfile은 app.py파일과 같은 디렉토리에 위치시킨다. 해당 디렉토리를 Docker로 image화 시킬 때 Dockerfile이 활용되기 때문이다.
※ app.py파일은 flask를 이용한 웹어플리케이션이다.
이후 cmd창에서 도커명령어를 입력하여 docker image를 생성한다.
docker build —tag python-docker .
docker tag python-docker:latest python-docker:v1.0.0
처음에 그냥 빌드하면 태그가 default인 lastest로 생성된다.
우리가 별도로 태그를 지정해주기 위해서는 2번째 명령어로 생성해주면 된다.
위처럼 생성된 이미지로 도커를 실행하면 브라우저로 접속해서 확인할 수 있다.
기존의 docker run python-docker:v1.0.0으로 하면 해당주소가 로컬포트랑 별도로 네트워킹이 격리되어 실행되기 때문에 접근이 불가능하다. 때문에 —publish 태그를 추가하여 로컬포트와 컨테이너 포트를 맵핑시켜서 로컬주소로 접속할 경우 컨테이너로 이어지도록 실행한다.
Docker에는 Github처럼 DockerHub가 존재한다.
DockerHub를 통해서 우리가 생성한 image를 저장, 관리할 수 있다.
먼저 docker hub에서 repo를 생성해준다.
그리고 DockerHub에 image를 업로드하기 위해서는 repository의 이름과 image의 이름이 같아야한다. 때문에 이미지의 태그를 변경시켜줄 필요가 있다.
docker tag python-docker:v1.0.0 {image이름}/docker-test:v1.0.0
※ repo의 이름은 docker-test
push작업이 완료되면 repo에 image가 업로드 된 모습을 볼 수 있다.
참고
본 글쓴이의 경우 컴퓨터가 wsl2를 지원하지 않는 Window10 Home 버전이었기에 별도의 방법으로 wsl2를 설치하여 docker를 설치 해야만 했다. 만약에 docker가 설치가 안된다면 OS버전을 확인하고 window라면 wsl2를 지원하는 버전인지 확인해야한다.
[참고] https://forbes.tistory.com/542
[참고] https://blog.nachal.com/1691