Docker란?
개발자가 가볍고 휴대 가능한 컨테이너에서 애플리케이션 배포를 자동화할 수 있는 오픈 소스 플랫폼으로 새로운 OS를 설치하는 VM과 다르게 리눅스 환경에서 하나의 컨테이너를 어플리케이션(프로세스)개념으로 메모리에 올릴 수 있어 경량화가 가능하고 버전 관리 및 아키텍처 구성이 가능하다.
컨테이너란?
코드, 런타임, 시스템 도구 및 라이브러리를 포함하여 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 격리된 독립 실행형 실행 소프트웨어 패키지
→ 일관되고 재현 가능한 환경을 제공하므로 다양한 환경에서 애플리케이션을 더 쉽게 개발, 테스트 및 배포를 할 수 있도록 도와준다.
Dockerfile이란?
Docker 이미지를 빌드하기 위한 지침이 포함된 텍스트 파일로 docker build image 명령어를 사용할 때 구동되는 이미지 설정 파일이다. 어플리케이션이 빌드시 어떤 조건과 어떤 환경이 갖춰져야되는지 설정할 수 있다.
예시)
# Use a Java base image
FROM openjdk:11-jre
# Set the working directory
WORKDIR /app
# Copy the application jar file
COPY my-app.jar .
# Run the application
CMD ["java", "-jar", "my-app.jar"]
Docker Compose란?
다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구로 YAML 파일을 사용하여 Docker 애플리케이션에 필요한 서비스, 네트워크 및 볼륨을 정의한다. Docker Compose를 사용하면 모든 컨테이너, 네트워크 및 구성을 포함한 전체 애플리케이션 스택을 단일 파일로 정의할 수 있으므로 여러 서비스로 복잡한 애플리케이션을 쉽게 관리하고 배포 가능하다. 도커 파일도 함꼐 사용이 가능하다.
예시)
version: '3'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- db
- redis
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_DATABASE: mydb
redis:
image: redis:6.2
CICD With GitActions
추가적으로 도커 컴포즈 파일을 사용해서 깃액션즈를 통해 워크플로우 파일이 작성 가능하다. 이를 통해 인스턴스와 연결 후 CICD를 구성할 수도 있다. 물론 일반 서비스를 이용해서 구성하는게 편하긴 하지만 YAML 언어를 통해 설정하는 것이 백엔드의 기초적인 스킬이 아닐까
예시)
name: Docker Compose Build and Deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: your-docker-hub-username/your-image-name:${{ github.sha }}
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Docker Compose
run: |
sudo apt-get update
sudo apt-get -y install docker-compose
- name: Copy Docker Compose file
run: cp docker-compose.yml ./docker-compose.yml
- name: Start services with Docker Compose
run: docker-compose up -d
- name: Run tests or other deployment tasks
run: |
# Add your deployment tasks here, such as running tests or other scripts
- name: Stop services with Docker Compose
run: docker-compose down
'Cloud 관련 지식' 카테고리의 다른 글
AWS VPC 및 SubNet 구축 실습 (0) | 2023.06.26 |
---|---|
AWS Shield & WAF(Web Application Firewall) (0) | 2023.06.23 |
AWS ECS (0) | 2023.01.20 |