# docker-compose.yml
version: "3"
services:
echo:
image: example/echo:latest
ports:
- 9000:8000
version: "3" => 파일의 내용을 해석하는 데 필요한 문법 버전
services 요소 아래의 echo => 컨테이너 이름 image => 어떤 이미지를 실행할 것인지, ports => 포트 포워딩
docker-compose.yml 을 사용하면 기존 docker 명령을 사용해 컨테이너를 실행할 때 매번 부여하던 옵션을 설정 파일로 관리할 수 있음
관리 기능의 진가는 여러 컨테이너를 실행할 때 발휘 됨.
Jenkins - CI/CD 기능을 제공하는 서버 어플리케이션
* CI/CD - 지속적 통합 및 제공/배포를 의미, 소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것이 목표
CI (Continuous Integration) : 코드 변경 사항을 공유 소스 코드 리포지토리에 자동으로 자주 통합하는 사례
CD (Continuous Delivery/Deployment) : 코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스
출처 : https://www.redhat.com/ko/topics/devops/what-is-ci-cd
CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이
CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.
www.redhat.com
version: "3"
services:
master:
container_name: master
image: jenkinsci/jenkins:2.142-slim
ports:
- "8080:8080"
volumes:
- ./jenkins_home:/var/jenkins_home
책에서 시키는 대로 작성하고 docker-compose up을 실행했는데 작동하지 않았다.
=> brew install cask docker-compose
다시 시도해 보았지만 결과는 이랬다.
error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
exec: "docker-credential-desktop.exe": executable file not found in $PATH
I got this error during docker build: => ERROR [internal] load metadata for docker.io/library/ubuntu:18.04 ...
stackoverflow.com
한 마디로 요약 하면
~/.docker/config.json 여기서 `credsStore`-> `credStore` 변경하면 된다.
고치고 나니까 작동 잘 되어서 이어서 작업했다.
젠킨스 접속은 성공했는데 플러그인 다운로드에 실패. 진짜 다 빨간불이 떠서 로그를 읽어봤다.
! master The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
해결방법 : platform을 명시한다.
version: '3.8'
services:
master:
container_name: master
image: jenkins/jenkins:lts
platform: linux/amd64
ports:
- 8080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
플랫폼을 명시함과 동시에 더 이상 젠킨스에 접근할 수가 없어서 image와 version 을 바꾸었다.
젠킨스 운영시 단일 서버로 운영하는 경우는 흔치 않음.
관리 기능이나 작업 실행 지시 -> 마스터 인스턴스
실제 진행 -> 슬레이브 인스턴스
마스터와 슬레이브가 소통하기 위해서 마스터 컨테이너에서 SSH 키 생성