CI/CD (AWS EC2 환경)
JENKINS + DOOD로 도커 이미지 배포
EC2에서 도커 컨테이너 안에서 도커를 사용을 할려고 하여서 검색을하여서
/var/run/docker.sock:/var/run/docker.sock을 마운트에 추가해주면 된다.
docker run -d --name jenkins \
-v /var/run/docker.sock:/var/run/docker.sock \
-v jenkins:/var/jenkins_home \
-p 8080:8080 my-jenkins:0.1
하지만 컨테이너 안에서 docker 명령어를 실행하면 없는 명령어라고 뜬다.
구글에서 찾아보니 docker 명령어를 사용만 하는 docker-ce-cli를 설치를 해야한다고 한다.
apt-get install docker-ce-cli
하지만 설치가 안된다.
원인은 도커 컨테이너 안에서 docker-ce-cli 설치하기 전에 레포지토리를 설정 해줘야했다.
(software-properties-common 설치를 안하면 add-apt-repository를 못쓴다)
apt-get install apt-transport-https ca-certificates software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test"
apt-get update
apt-get install docker-ce-cli
설치를 하면 에러가 뜬다.
lsb_release -cs 명령어를 쳐보면
아래와 같이 떴는데 나는 bookworm인데 위의 https://download.docker.com/linux/ubuntu/dists/ 들어가면 없다.
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
그래서 우분투로 강제로 지정해서 설치 했다.
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu cosmic stable
위의 레포지토리를 추가 하고 업데이트 다시 해주고 설치하니깐 된다
apt-get update
apt-get install docker-ce-cli
플러그인 설치가 안되는데 EC2 인스턴스 껐다가 키니깐 됐다.
CI/CD 설정
#bin/bash
#docker image의 첫 tag를 읽고 다음 버전의 image를 생성
docker build --tag hwanghero/jenkins-test:$(docker images | awk '($1 == "hwanghero/jenkins-test") {print $2 += .01; exit}') .
#docker hub에 push 하기위해 login
docker login -u "id" -p "token"
#docker hub에 push
docker push hwanghero/jenkins-test:$(docker images | awk '($1 == "hwanghero/jenkins-test") {print $2; exit}')
#tag가 latest인 image를 최신 버전을 통해 생성
docker tag hwanghero/jenkins-test:$(docker images | awk '($1 == "hwanghero/jenkins-test") {print $2; exit}') hwanghero/jenkins-test:latest
#latest를 docker hub에 push
docker push hwanghero/jenkins-test:latest
#버전 관리에 문제가 있어 latest를 삭제
docker rmi hwanghero/jenkins-test:latest
#bin/bash
#docker hup에서 pull하기 위해 login 합니다.
#sudo docker login -u "docker id" -p "docker password"
container_id=$(docker ps | awk '/app.jar/ {print $1}')
if [ -n "$container_id" ]; then
docker stop "$container_id"
echo "컨테이너를 정지시켰습니다."
else
echo "해당하는 컨테이너가 없거나 결과가 없습니다."
fi
#tag를 지정하지 않고 pull 하여 docker hub에서 latest를 가져옵니다.
docker pull hwanghero/jenkins-test
#docker run을 통해 image를 실행합니다.
#-d : 백그라운드 실행, --rm : 컨테이너 안의 프로세스가 종료되면 컨테이너를 자동으로 삭제, -p 80번 포트 열기
docker run -d --rm -p 80:80 hwanghero/jenkins-test
예제는 EC2 인스턴스 2개로 하는건데 내가 1개로 해서 재배포시에 jenkins 서버에서 docker 컨테이너를 못꺼서 수동으로 꺼줘야하는 이슈가 있는데
도커 컨테이너 bash가 아닌 EC2 인스턴스 bash에서 컨테이너를 꺼줘야한다.
참고 사이트
ubuntu18 doker설치 관련 에러(repository 문제)
ubuntu18에 doker설치 중 doker 레파지토리를 지정하는 명령어 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 실행 후 sudo apt-get update && sudo apt-cache search docker-ce 도
kooremo.tistory.com
https://askubuntu.com/questions/1030179/package-docker-ce-has-no-installation-candidate-in-18-04
"Package 'docker-ce' has no installation candidate" in 18.04
I'm following the official Docker installation guide for docker-ce on Ubuntu. When I get to sudo apt install docker-ce I get E: Package 'docker-ce' has no installation candidate: $ sudo apt-get u...
askubuntu.com
'항해99' 카테고리의 다른 글
항해99 주특기 프로젝트 (5일차) (0) | 2024.01.17 |
---|---|
항해99 주특기 프로젝트 (4일차) (0) | 2024.01.17 |
항해99 주특기 프로젝트 (2일차) (0) | 2024.01.13 |
항해99 주특기 프로젝트 (1일차) (0) | 2024.01.12 |
항해99 주특기 대기 (2일차) (0) | 2024.01.11 |