반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- fargate
- docker
- AWS
- eks
- KISA
- security
- CICD
- docker-compose
- cloud trail
- devop
- 클라우드 보안
- Network
- IAC
- ECS
- cloiud
- kubernetes
- VPN
- devops
- secretmanager
- zerotrust
- VPC
- CI/CD
- git
- saa-c03
- docekr
- 보안
- Container
- client-vpn
- DevSecOps
- cloud
Archives
- Today
- Total
Devsecops로 발전하는 엔지니어
Gitlab CI/CD를 이용한 ECS배포 -2 본문
반응형
📁 GitLab 프로젝트 구조

1. Multi-container TaskDefinition
→ ecs 한개당 mysql, wordpress두개를 컨테이너로 업데이트 하기 위한 과정
- WordPress 컨테이너 (공식 이미지)
- MySQL 8.0 컨테이너
- Bridge 네트워크 모드 with links
- 볼륨 마운트로 MySQL 데이터 영속성
{
"family": "devops-test-task",
"networkMode": "bridge",
"containerDefinitions": [
{
"name": "devops-test-container",
"image": "wordpress:latest",
"links": ["mysql"],
"environment": [
{"name": "WORDPRESS_DB_HOST", "value": "mysql:3306"}
]
},
{
"name": "mysql",
"image": "mysql:8.0",
"environment": [
{"name": "MYSQL_ROOT_PASSWORD", "value": "root123"}
]
}
]
}
DB정보의 경우 .env 파일내부에 따로 기록 한다.
2. Gitlab-ci.yml파일 작성
stages:
- build
- deploy
variables:
AWS_DEFAULT_REGION: ap-northeast-2
ECR_REGISTRY: ECRARN 기재
ECR_REPOSITORY: docker-test
IMAGE_TAG: $CI_COMMIT_SHA
build:
stage: build
image: docker:24.0.5
services:
- docker:24.0.5-dind
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- apk add --no-cache python3 py3-pip
- pip3 install --break-system-packages awscli
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REGISTRY
script:
- echo "Building WordPress Docker image..."
- docker build -t $ECR_REPOSITORY:$IMAGE_TAG docker/wordpress-repo
- docker tag $ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- docker tag $ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
- echo "Pushing images to ECR..."
- docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
- echo "Build and push completed!"
only:
- main
deploy:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache python3 py3-pip jq
- pip3 install --break-system-packages awscli
script:
- echo "Deploying WordPress + MySQL multi-container to ECS..."
- echo "Registering task definition..."
- TASK_DEF_ARN=$(aws ecs register-task-definition --cli-input-json file://multi-container-task-def.json --region $AWS_DEFAULT_REGION --query 'taskDefinition.taskDefinitionArn' --output text)
- echo "Task definition registered - $TASK_DEF_ARN"
- echo "Updating ECS service..."
- aws ecs update-service --cluster devops-test-cluster --service devops-test-service --task-definition $TASK_DEF_ARN --force-new-deployment --region $AWS_DEFAULT_REGION
- echo "Multi-container deployment completed!"
- echo "WordPress will be available at <http://ALB주소>"
only:
- main
~
3. Gitlab내부에 세팅
- Setting → CI/CD → Variables에 Aws정보들 삽입
4. Docker-compose.yml파일 작성
version: '3.8'
services:
wordpress:
build: .
container_name: wordpress-local
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME:-wordpress}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER:-wordpress}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD:-wordpress}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX:-wp_}
WORDPRESS_DEBUG: ${WORDPRESS_DEBUG:-false}
volumes:
- ./wp-content:/var/www/html/wp-content
- wordpress_data:/var/www/html
depends_on:
- db
networks:
- wordpress-network
db:
image: mysql:5.7
container_name: wordpress-db
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
MYSQL_DATABASE: ${WORDPRESS_DB_NAME:-wordpress}
MYSQL_USER: ${WORDPRESS_DB_USER:-wordpress}
MYSQL_PASSWORD: ${WORDPRESS_DB_PASSWORD:-wordpress}
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- wordpress-network
volumes:
wordpress_data:
db_data:
networks:
wordpress-network:
driver: bridge
~
local에서 docker compose up -d 로 제대로 실행 되는지 확인하는게 바로 배포하기 이전에 좋다.
git add .
git commit -m "add the gitlab ci"
git push origin main
git push 되면 아래의 이미지 로직으로 배포 처리 진행이 된다.

반응형
'Devops' 카테고리의 다른 글
| Istio Service Mesh 완벽 가이드: Gateway 404 에러 해결 여정 (0) | 2025.10.16 |
|---|---|
| ECS Multi-container CI/CD 파이프라인 구축 삽질기: 실수에서 배운 교훈 (1) | 2025.09.04 |
| Gitlab CI/CD를 이용한 ECS배포 -1 (1) (0) | 2025.09.03 |
| Blue/Green 배포 (6) | 2025.08.28 |
| 🌐 AWS EC2 + GitHub Actions + Docker 기반 CI/CD 구축기 (1) | 2025.06.18 |