본문 바로가기

아키텍처 Architecture/Software Architecture

금융IT와 MSA - 4. 도커 실습 - github

1편 : 왜 필요한가?

https://subbak2.tistory.com/46

2편 : SAGA 패턴

https://subbak2.tistory.com/96

3편 : 도커 실습 - 설치 & 가동

https://subbak2.tistory.com/103

 

 

1. 도커 컨테이너 github으로 버전 관리하기 - 현재 시스템 

 기본적인 도커 설치, 컨테이너 실행을 해봤으니 github을 통해 버전 관리를 해보기로 했다.

 

도커 컨테이너를 통해 MySQL 이중화 구성을 먼저 해놨고, 

이때 사용한 도커 이미지를 활용하기로 했다.

https://subbak2.tistory.com/106

 

[MySQL] DB 이중화 1) Replication

Oracle은 RAC라는 공유DB클러스터 기능을 제공해 어느정도 규모가 있으며, 안정성을 추구하는 기업의 DBMS로 널리 쓰이고 있다. 쉽게 말하면 여러 개의 WAS 인스턴스를 LOAD BALANCING 하는 것과 동일하게

subbak2.tistory.com

 

위 시스템을 요약하면 노트북에 있는 Master DB가 

외장 SSD에 Docker로 실행 중인 Slave DB에 실시간 Replication이 되는 구조이다.

기존 시스템

 

여기에 Slave DB의 컨테이너 이미지를

github에 특정시점의 image를 올려 다른 PC 도커에 특정시점 스냅샷 이미지를 마이그레이션 해봤다.

 

 

 

2. WSL을 통해 윈도우에서 바로 Linux 사용하기

 

기존에 외장 SSD에서 도커 실행을 할때는 VMware를 통해 Ubuntu를 돌리고 

그 위에 도커를 실행시켰는데, 이번에는 WSL(Windows Subsytem for Linux)을 활용해봤다. 

 

https://docs.microsoft.com/windows/wsl/about

 

Linux용 Windows 하위 시스템이란?

다양한 버전 및 이를 사용하는 방법을 포함하여 Linux용 Windows 하위 시스템에 대해 알아봅니다.

docs.microsoft.com

 

요약하면 가상머신 없이 Windows에 바로 Ubuntu를 설치하는 것인데, 

절차도 간단하고 성능도 더 쾌적한 느낌이었다.

 

윈도우 파워쉘에서 아래 스크립트만으로 설치가 완료되어 재부팅 후 우분투를 바로 이용할 수 있었다.

wsl --install

특이한 점은 VMware의 경우 network망이 달라서 동일한 port를 이용해 서비스를 제공할 수 있었는데, 

WSL의 경우 포트를 공유하기 때문에 다른 포트를 이용해야한다.

 

Ex> Windows에서 3306 포트를 통해 MariaDB를 사용중이라면, 

VMware에서는 3306 포트 사용 가능, WSL Ubuntu에서는 3306 포트 사용 불가능.

 

* docker에서 서비스 실행시에도 Windows 방화벽을 open해야한다.

 

 

 

3. Docker에서 github으로 이미지 push 하기

1) github에서 token 발급받기

github에서 로그인 후 Settings → Developer settings → Personal access tokens 로 

접속을 위한 토큰을 발행했다.

repo, packages의 권한을 부여했다.

 

2) docker에서 github container registry 로그인하기 

-- 1. 깃헙 id로 로그인하기
docker login ghcr.io -u {깃헙 id}

-- 2. password 입력
방금 발행한 tocken 입력

docker는 super user 권한으로 실행해야해서 sudo su 를 하고 시작했다.

subbak2는 깃헙 id이고 password에 github settings에서 발급받은 token을 입력하면, 

Login Succeeded가 뜬다.

 

3) docker에서 github container registry로 push 하기

-- 1. 이미지에 태그 붙이기
docker tag {image id} ghcr.io/{github id}/{패키지이름}:버전명

-- 실제 실행 코드 ( docker images -a 로 image id 확인 가능)
root@ubuntu:/home/jack# docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mariadb       latest    d462573d8688   3 weeks ago    410MB
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB

root@ubuntu:/home/jack# docker tag d462573d8688 ghcr.io/subbak2/mariadb:lts
-- 2. push하기 
docker push ghcr.io/{github id}/mariadb:lts

-- 실제 실행 코드
docker push ghcr.io/subbak2/mariadb:lts

 

4) github packages에서 push된 image 확인

- 설정마다 다를 수 있는데 기본 Private으로 push됐다.

 

4. Docker에서 github으로 이미지 pull 하기

1) docker image pull

push된 image를 눌러보면 친절하게 어떻게 하라고 나온다.

 

push할때와 마찬가지로 settings에서 발급받은 tocken을 통해 로그인 해주고 

아래처럼 실행하면 된다.

-- 1. 깃헙 id로 로그인하기
docker login ghcr.io -u {깃헙 id}

-- 2. password 입력
방금 발행한 tocken 입력
-- 2. pull script
docker pull ghcr.io/{github id}/{package name}

-- 실제 실행한 코드
docker pull ghcr.io/subbak2/mariadb:lts

 

2) docker image 확인, 실행

--1. docker image id 확인
docker images

--2. 확인한 image id를 통해 실행
docker run -d -p {port}:{port} -e MYSQL_ROOT_PASSWORD={pw}--name mariadb {image id}

-- 실제실행. 포트 3306, root pw : mariadb로 실행할 경우
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mariadb --name mariadb d462573d8688

 

--3. container id 확인 후, mysql 접속
docker ps

-- container id 확인

--4. 접속
docker exec -it {container id} mysql -u root -p

 

 

* 기타

- WSL을 활용해 docker를 실행할 경우 docker desktop을 통해 gui로 편하게 관리할 수 있다.

https://docs.microsoft.com/ko-kr/windows/wsl/tutorials/wsl-containers

 

- Dockerhub가 아닌 Github을 사용한 이유는, 정책은 계속 변화하겠지만 dockerhub의 경우 6개월 이상 push, pull 하지 않으면 image가 삭제되기 때문에 github을 사용했다.

 

 

 

* 참고자료

https://ggingmin.notion.site/Ch-4-d71b88a1a1fb47e4b9f93dabf012a179

 

Ch 4. 도커 이미지

4. 도커 이미지

ggingmin.notion.site

https://qiita.com/leechungkyu/items/f95998506d45feb15393

 

GitHub Container Registry에 도커 이미지 Push 하기 - Qiita

TL;DR Docker Hub 정책 변경으로 오는 11월1일부터 지난 6개월간 Push나 Pull이 없던 이미지는 삭제된다고 합니다. 백업 차원에서 GitHub의 Packages에 도커 이미지를 Pus...

qiita.com

 

반응형