[챗GPT로 코딩 공부] Docker Compose를 활용한 CI/CD 구축기
내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jun 18, 2024
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.
1. EC2에서 Docker Compose를 사용하여 Docker 컨테이너 실행하기
GPT를 통해서 CD 과정의 Docker-Compose 및 Git Action 대한 답변을 받아보았습니다. Docker-Compose는 Docker Container 를 손쉽게 다룰 수 있도록 도와주는 기술입니다.
Q. CI/CD를 구축하려는데 Docker Hub 에 올리는 CI 과정은 이미 구축했고, CD 과정에서 EC2에 Docker Compose 를 받고 Docker Container를 실행하려는데 내가 이 과정을 잘 몰라. 그래서 Docker Compose 문법이랑, CD 에서 자주 쓰이는 Docker Compose 구조, 그리고 프로젝트 Root에 둔 Docker Compose 를 실행시키는 방법까지 설명해줘.
챗GPT는 GPT는 Docker Compose 의 기본 문법을 알려주며, CD에서 자주 쓰이는 Docker Compose 구조를 알려줬습니다. 하지만 한번에 너무 많은 걸 물어보니 엄청 상세히 답변하지 못해서 Docker Compose 문법에 대해서 더 자세히 알려달라고 했습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F83c75a39-3aba-4ba4-a792-7aefe4b07895%252F9c6163ce-0936-4596-9ea1-fe1ed3d71546%252FUntitled.png%3Ftable%3Dblock%26id%3D2ce016bb-9de6-4e77-a77d-751cc928e3c4%26cache%3Dv2&w=3840&q=75)
2. Docker Compose 문법
질문을 쪼개서 Docker Compose 문법에 대해서 더 자세히 알려달라고 했습니다.
Q. Docker Compose 문법에 대해서 더 정확하고 자세하게 알려줘
챗GPT는 version, services, 서비스 정의 옵션, volumes, networks, docker compose 파일 실행, 추가 명령어 등을 알려주었습니다. 그 중 다양한 옵션이 있는 서비스 정의 옵션의 주요 옵션들을 살펴보고 지나가겠습니다.
서비스 정의 옵션
서비스 정의에는 다양한 옵션이 있습니다. 주요 옵션들을 살펴보겠습니다.
1) image
컨테이너를 생성할 Docker 이미지를 지정합니다.
services: web: image: nginx:lates
2) build
dockerfile을 사용하여 이미지를 빌드합니다.
services: web: build:
3) ports
호스트와 컨테이너 간의 포트 매핑을 설정합니다.
services: web: ports: - "8080:80"
4) volumes
호스트와 컨테이너 간의 파일 시스템 경로를 매핑합니다.
services: web: volumes: - ./app:/var/www/html
5) environment
환경 변수를 설정합니다.
services: web: environment: - NODE_ENV=production - DB_HOST=db
6) depends_on
다른 서비스가 시작된 후에 해당 서비스를 시작하도록 합니다.
services: web: depends_on: - db
7) command
컨테이너 시작 시 실행할 명령을 지정합니다.
services: web: command: ["npm", "start"]
8) networks
서비스가 연결될 네트워크를 정의합니다.
services: web: networks: - frontend db: networks: - backend
3. Docker Compose에서 환경 변수 관리
GPT는 Docker Compose 의 문법을 상세히 설명해주고, 해당 답변을 보고 Docker Compose 파일을 작성하고 프로젝트에 적용하려고 했습니다.
하지만 여기서 문제가 발생했습니다. Docker Compose 내에 environment 라고 컨테이너에 적용될 환경 변수를 적는 란이 있는데 여기에 프로젝트에 들어갈 환경변수를 입력하면 그대로 외부에 노출이 되어 해킹 등의 위험성이 있었습니다. 그래서 아래와 같이 질문했습니다.
Q. Docker Compose environment 란에 환경 변수를 그대로 적으면 너무 위험하지 않아? 다른 방법 없어?
챗GPT는 환경 변수를 Docker Compose 파일의 environment 섹션에 직접 하드코딩하면 보안상의 문제가 발생할 수 있다고 했습니다. 이를 방지하기 위해 다음과 같은 방법들을 추천했습니다.
1) .env 파일 사용
2) 외부 환경 변수 사용
3) Docker secrets 사용 (주로 Docker Swarm에서 사용)
따라서 챗GPT가 만든 환경 변수 파일 방법에 따라 해당 파일을 ec2 내 디렉토리에 배치했고, 환경 변수 노출을 피할 수 있었습니다. 특히 알려준 방식 중 env_파일 문법과 env 파일 작성 방식을 활용해서 무사히 Docker Compose 작성을 마칠 수 있었는데요. .env파일에 대해 알아봅시다.
.env 파일
Docker Compose는 .env 파일에서 환경 변수를 자동으로 읽어들입니다. 이 파일을 Docker Compose 파일과 같은 디렉토리에 놓으면 됩니다.
예시
.env 파일:
DATABASE_URL=postgres://user:password@db:5432/mydatabase SECRET_KEY=mysecretkey
docker-compose.yml 파일:
version: '3' services: web: image: my-web-app:latest ports: - "80:80" environment: - DATABASE_URL - SECRET_KEY
이 방법을 사용하면 환경 변수 값이 .env 파일에 저장되고, Docker Compose 파일에는 변수 이름만 명시됩니다.
4. GitHub Actions 사용법
CI/CD 를 GitHub Actions를 통해 구현했기 때문에 Git Action 에 대한 사용법도 물어봤습니다. Github Actions는 GitHub에서 제공해주는 템플릿과 레퍼런스를 볼 수 있는 레포지토리들이 많아서 긁어온 다음 한 줄씩 설명을 요청했습니다.
Q. 이 부분 한 줄씩 어떤 식으로 돌아가는 건지 설명해줄 수 있어?
- name: Deploy to server uses: appleboy/ssh-action@v0.1.6 id: deploy with: host: ${{ secrets.SERVER_HOST }} username: ubuntu key: ${{ secrets.SERVER_KEY }} envs: GITHUB_SHA script: | sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }} docker-compose up -d docker image prune -f
![다음과 같은 답변을 도출했습니다.](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F83c75a39-3aba-4ba4-a792-7aefe4b07895%252F8afb98d7-d6cd-4bcd-8e87-c358d43d9017%252FUntitled.png%3Ftable%3Dblock%26id%3D33e31f6c-d924-43c7-a8a1-0ee1fd81ca38%26cache%3Dv2&w=3840&q=75)
GPT는 ssh 로 서버에 접속하고 액션 과정에서 전달되는 매개변수들을 설명해주어 Github Actions에서 쓰이는 문법 및 과정을 자세히 알 수 있었습니다.
해당 CI/CD 과정을 완성하고, 다시 한번 GPT 없이 여러 블로그의 레퍼런스들 및 공식문서를 보며 Docker Compose 에 대해서 공부를 했었는데 확실히 이해가 빠르게 됐었습니다. 약간 아쉬웠던 점은 볼륨 마운트라는 유용하게 쓰이는 기술을 (그때는 미처 몰랐어서) GPT가 해당 부분까지 알려주지 않았습니다. 다시 한 번 물어본다면 구현 유의 사항과 어떤 부분을 더 보강하면 좋을지 추가해서 물어 볼 예정입니다.
내일배움캠프가 여러분의 러닝메이트가 되어드리겠습니다
내일배움캠프의 많은 수강생들이 부트캠프 생활을 수료하고 현업에서 개발자로 활약하고 있습니다. 내일배움캠프는 모든 운영진이 교육, 특강, 12시간 밀착 케어, 찐한 관리, 인재 채용까지 열과 성을 다해 수강생들의 꿈을 지원하고 있습니다. 수많은 장애물을 넘을 수 있도록 내일배움캠프가 든든한 러닝메이트가 되어드리겠습니다. 내일배움캠프과 함께 여러분의 개발자 여정을 시작하세요.
CREDIT
글 | 조원호 내일배움캠프 수료생
편집 | 정효재 팀스파르타 에디터
취업 준비, 어디서부터 시작해야 할지 모르겠다면?
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
Share article
Subscribe to our newsletter