1. GitLab 소개와 가입
- Gitlab 은 기본적으로 AWS 클라우드처럼 인터넷 서비스다. 그래서 인터넷 서비스라서 가입을 해야 사용가능함.
- GitLab 은 세계에서 가장 널리 사용하는 CI/CD 툴 중 하나. GitLab 프로젝트를 만들고 Git 기반으로 소스코드를 관리하고, 자동으로 Docker 어플리케이션을 빌드하게 된다.
2. Gitlab 프로젝트 설정
3. Gitlab 을 이용한 Docker 어플리케이션 빌드
- Docker 어플리케이션 빌드를 해서 나오는 결과로 Docker Image가 만들어짐.
4. Docker Image 를 ECR 저장소에 push
- 만들어진 Docker Image를 사용하기 위해서는 저장소에 저장을 해야 하는데, ECR 이라고 하는 Docker 저장소에 push를 하게 될 것. ECR은 AWS에서 제공하는 Docker Image 저장소이다. Docker Hub의 클라우드 서비스 버전이라고 생각하면 된다.
- AWS의 Docker Image 저장소인 ECR에 push 하여 AWS에 배포하기 위한 준비를 마치게 된다.
5. Gitlab 을 이용해서 ECR push 자동화
- Gitlab 을 이용해서 ECR에 빌드하고 푸쉬하는 것들을 자동화를 해보게 된다. 실질적인 CI/CD를 하는 첫 단추!
6. Docker 어플리케이션 테스트
- ECR에 올라가있는 Docker Image를 이용해서 Docker 어플리케이션을 테스트하게 될 것이다. 잘 실행되는지 테스트.
+------------------+
| 1. 코드 작성 |
| (개발자가 코드를 |
| 작성합니다.) |
+------------------+
|
v
+------------------+
| 2. GitLab 저장소 |
| (코드를 GitLab에 |
| push 합니다.) |
+------------------+
|
v
+------------------------+
| 3. CI/CD 빌드 |
| (GitLab이 자동으로 |
| Dockerfile을 읽고 Docker |
| Image를 생성합니다.) |
+------------------------+
|
v
+------------------------+
| 4. Docker Image 생성 |
| (실행파일, 라이브러리, |
| 설정파일 등을 포함한 |
| 패키지가 완성됩니다.) |
+------------------------+
|
v
+------------------------+
| 5. Docker Image 업로드 |
| (AWS ECR로 Docker |
| Image를 push합니다.) |
+------------------------+
|
v
+------------------------+
| 6. AWS 클라우드 배포 |
| (ECR에서 Docker Image를 |
| 기반으로 Container를 |
| 생성하여 서비스를 실행) |
+------------------------+
|
v
+------------------------+
| 7. 사용자 서비스 제공 |
| (사용자가 Container를 |
| 통해 서비스에 접속합니다.)|
+------------------------+
개발자는 코드를 만들게 된다.
이 코드를 git 저장소에 push하게 될 거다.
(여기서는 git 저장소로 Gitlab을 사용할 것 - Gitblab은 CI/CD 툴이고 git 저장소까지 함께 포함하고 있다)
Gitlab에서 build 과정을 거쳐서 Docker Image가 만들어지게 된다.
Docker Image는 패키지라고 했다.
그러니까 패키지가 되려면 실행파일이 복사가 되어야 할 것이고, 라이브러리들도 필요할것이고, 설정 파일들 config도 있어야 할 것이고, 인터넷 서비스라면 HTML과 CSS와 Image나 영상파일도 필요할 수 있을 것이고, 네트워크 서비스니까 port와 같은 네트워크 정보들도 필요하게 될 것.
패키지는 이런 정보들을 가지고 있는데, 이러한 정보들을 이용해서 패키지를 만들어라, 하는 어떤 지시하는, 명령하는 설정 파일이 있어야 하는데 그러한 설정 파일이 Dockerfile 이라고 보면 된다. Dockerfile 은 '이러한 것들을 카피해서 어떤 port로 실행해라' 라는 정보들을 담고 있다. 나중에 Docker 명령을 이용해서 build를 하게 되면 Docker가 Dockerfile 의 내용을 해석해서 Docker Image를 만들게 된다. 패키지를 만들게 되는것이다.
이 과정을, GitLab을 이용해서 자동으로 실행하게 될 것이다.
이렇게해서 Docker Image가 만들어지게 되면, 이제 Docker Image로부터 Container를 만들 수 있게 된다.
Container를 만들게 되면, 사용자들은 Container에 연결해서 서비스를 할 수 있는 상황이 된다.
Container는 port까지를 전부 다 포함하고 있는 완전한 서비스니까, 게다가 실행 파일, 라이브러리, 설정파일들, 기타 여러 정적 파일들을 포함하고 있으니까 그 자체로 완전한 서비스가 가능하다.
Docker Image는 Docker 외부에 있는 Cloud Docker Image 저장소(ECR)로 copy, push를 할 수 있다. ECR에 push가 되면은 ECR을 이용해서 AWS 클라우드로 Docker Image 어플리케이션을 배포할 수 있는 환경이 되는 것.
개발과 배포 흐름: GitLab, Docker, 그리고 AWS로의 여정
소프트웨어 개발자는 코드를 작성하여 이를 관리하고 배포하기 위한 여러 단계의 프로세스를 거칩니다. 이 글에서는 GitLab, Docker, 그리고 AWS를 활용해 코드를 완전한 서비스로 배포하는 과정을 설명합니다.
1. 코드 작성 및 Git 저장소 관리
개발자가 작성한 코드는 git 저장소에 업로드(push)됩니다.
이 과정에서 GitLab을 저장소로 사용하며, GitLab은 코드 저장소뿐만 아니라 CI/CD(지속적 통합 및 배포) 도구로도 활용됩니다.
2. GitLab을 통한 빌드 및 Docker Image 생성
GitLab은 코드를 빌드(build)하여 Docker Image를 생성합니다.
Docker Image란?
Docker Image는 실행 파일, 라이브러리, 설정 파일, 그리고 정적 파일(HTML, CSS, 이미지 등)까지 포함한 패키지입니다.
Docker Image의 특징
- 독립적인 실행 환경을 제공.
- 네트워크 서비스의 경우 포트 정보까지 포함.
이 모든 정보를 담기 위해서는 Dockerfile이라는 설정 파일이 필요합니다.
3. Dockerfile: Docker Image 제작 지침서
Dockerfile은 다음과 같은 내용을 명시합니다.
- 어떤 파일을 복사할 것인지.
- 네트워크 포트 설정.
- 이미지가 실행될 때 수행할 명령어.
Docker 명령어를 통해 Dockerfile을 해석하여 Docker Image가 생성됩니다.
4. 자동화: GitLab CI/CD 파이프라인
이 빌드 과정을 GitLab의 CI/CD 파이프라인을 통해 자동화합니다.
- 코드 변경 사항이 push되면, GitLab이 자동으로 Docker Image를 생성합니다.
5. Docker Image에서 Container 생성
Docker Image가 준비되면 이를 기반으로 Container를 생성할 수 있습니다.
Container란?
Container는 실행 가능한 완전한 서비스입니다.
- 실행 파일, 라이브러리, 설정 파일, 정적 파일 등이 모두 포함.
- 네트워크 포트까지 설정되어 사용자와 직접 연결 가능.
6. Docker Image의 클라우드 저장 및 배포
Docker Image는 클라우드 기반 Docker 저장소(ECR)로 push됩니다.
- ECR (Elastic Container Registry): AWS에서 제공하는 Docker Image 저장소.
- 이후 ECR에서 AWS 클라우드 환경으로 Docker Image를 배포하여 서비스로 제공됩니다.
결론
GitLab, Docker, 그리고 AWS를 활용하면 코드를 작성하는 단계에서부터 완전한 서비스로 배포하는 단계까지 모든 과정이 자동화되고 효율적으로 관리됩니다. 이 프로세스는 안정적이고 신속한 서비스를 가능하게 합니다.
GitLab 가입 후 Git 저장소 생성을 해보자.
가입은 끝! 가입 할 때부터 Group, Project 명을 입력하고 끝나면 바로
"동료를 초대"하라는 창이 뜬다. 협업 툴이다보니까 당연한 것 같긴 하다.
새로운 프로젝트 생성! (create blank project)
그리고 나서 터미널에서 코드를 작성할거니까 clone 할 수 있도록 연결할 수 있는 뭔가가 필요!
clone 을 하려고 하면 연결을 해야 하는데, 프로젝트를 만들때 private 으로 보통 만든다. (회사에서 프로젝트를 할 때 외부에서 접근할 수 있도록 public을 하는게 아니라 회사 내에서만 접근해야 하니까 private)
그래서 SSH key 가 있어야 한다.
터미널에서 rsa type 의 ssh key를 생성 generate를 해야 한다.
그러면, 자세히 읽어보면, 숨겨진 폴더인 .ssh 에서 id_rsa 라는 게 생긴다고 말해주고 있다.
그러면, id_rsa, id_rsa.pub 이 있는데, pub 은 술먹는 펍이 아니라, public key 라는 걸 의미하는 것 같다.
그러니까, GitLab에 ssh key add 를 해줘야 하는데, 저 public key 를 넣어야 한다.
파일의 내용을 확인하려면 cat id_rsa.pub
등록 완료!
이제 flask-app 에서 clone with SSH 를 통해서 할거니까 가보자!
클론이 완료되었다~
이제 text.txt 만들어서 그걸 push까지 해보는 걸 해보자!
git add
git commit
git push
이 순서대 해야 한다.
대신 처음할때는 좀 더 연결이 필요해보인다
굿!