web service를 docker로 실행
Hangman web service를 github를 통해 docker image로 docker hub에 upload
사전 준비
- github 계정
- docker hub 계정
- docker가 설치 되어있음
- 본인 github 계정 아래 존재하는 hangmean repo
전체 과정
- hangman_web이라는 repo의 main에 code가 merge될 때 마다 다음을 수행함
- 테스트 수행
- docker image 빌드
- docker image를 docker hub로 푸시
hangman program
- hangmang 프로그램을 flask를 사용하여 웹으로 노출
- 포트번호는 어디든 바인딩 가능하며 실행할 때 지정
- flask 관련 모듈 설치 필요
실행 방법
- python3 -m flask run --host=0.0.0.0 --port=4000
Repo 구성

- app.py
- flask의 메인 함수가 있고 커맨드라인으로 받은 포트에 바인드하고 요청이 들어오기를 기다림
- requirements.txt
- pip install -r requirements.txt
- 이는 flask 모듈들을 설치함
- test.py
- app.py에 있는 코드의 유닛 테스트 로직이 들어가 있음. CI/CD 구성 시 실행이 되게 구성할 예정
실습 - 테스트
https://labs.play-with-docker.com/
여기서 가상서버 띄우기




실습 - 서비스를 docker image로 구성하기
앞서 살펴본 hangman 서비스를 docker image로 만들고 docker hub에 올리고자 함.
왜 image로 구성하려고 하는가?
- docker 컨테이너 내부 프로세스가 오픈한 포트번호는 바깥 프로세스에서는 접근할 수 없음. (host process 브라우저에게는 안보임)

세팅 방법
- docker run 수행시 -p 옵션 사용
- docker run -p 4000:4000 image_name

- mapping 하는 것 (port mapping)
- docker 컨테이너를 실행할 때 포트 맵핑을 통해 호스트 운영체제 단에서 접근되는 포트를 컨테이너쪽에서 포워드 해줘야함.
image build

docker 컨테이너 실행
- 포트 포워딩 고려
docker run -p 4000:4000 papalio/hangman
docker hub push

docker login
docker push dockerhub_accountID/hangman
결과

잘 올라갔다.