git workflows를 작성하면서 새롭게 알게 된 내용이 있어 정리해보려고 한다.
우선 내가 생각했던 pipe-line을 적어보자면 아래와 같다.
run : |
echo "${{secrets.PEM_KEY}}" > ~/xxx.pem // 깃헙에 저장된 펨키를 xxx.pem파일로 저장함
chmod 600 ~/xxx.pem // 권한변경
mkdir -p ~/.ssh // .ssh라는 디렉토리 생성
ssh-keyscan -H ${{secrets.PUBILC_DNS}} >> ~/.ssh/hosts // ssh 공개키를 .ssh디렉토리에 있는 hosts 파일에 추가
ssh -o StricHostKeyChecking=no -i ~/xxx.pem userName@${{secrets.PUBILC_DNS}} // 처음 연결시 경고메세지 방지
echo "${{secrets.TOKEN}}" | docker login ghcr.io -u ${{gitgub.actor}} --password-stdin // 도커 로그인
docker run -d --name test-container -p 80:80 Image:TagName // 컨테이너를 만든 뒤 실행
docker ps // 컨테이너 목록조회
docker stop container_Id // 컨테이너 중지
docker ps // 컨테이너 목록조회
위와 같이 처음에 authorized_keys에 pem키를 등록하기 위해 터미널에서 키를 조회하여 값을 복사했다. 그리고 해당하는 파일에 넣었다.
그런 다음에 보안을 위해 권한을 변경하고 새롭게 만든 디렉토리에 공개키를 담은 파일을 만들었다.
이후 ssh에 접근하여 서버에 접속을 하고 git packages를 통해 이미지를 내려받았다.
내려받은 이미지로 컨테이너를 만든 뒤 만들어졌나 조회를 하고, 만들어졌다면? 중지를 한다. 마지막으로 다시 중지가 됐는지 목록 조회를 하는 파이프라인을 만들어 구성하였다.
git action으로 해당하는 브랜치로 push를 하였는데 처음에는 docker stop [컨테이너 아이디] 로 하였다.
내 예상은 한 줄 한 줄 적으며 특정 브랜치로 push를 했기때문에 성공할꺼라 생각했지만,
이렇게 오류가 발생하는 것이였다. 내가 잘못적었나? 하여 그대로 목록조회를 한 컨테이너 아이디를 복사를 해서 붙여넣었는데 똑같은 오류가 계속 발생했다.
내가 알기론 컨테이너를 중지할 때 컨테이너의 아이디와 이름으로 중지를 할 수 있는데... 그러면 이름으로 한다면 중지가 될까? 하고 컨테이너 이름으로 중지를 했다.
결과는
성공이였다.
그 이유는?
docker에서는 컨테이너마다 각각의 컨테이너들을 독립적으로 보며 해당하는 ID도 독립적이다. 그렇기에 삭제를 하거나 재실행을 하거나 동일한 이미지로 새로운 컨테이너를 생성하는 경우에는 이전 컨테이너와는 다른 ID가 생성이 되는 것이다.
그렇다면 컨테이너 ID로 할 수 있는 방법은?
CONTAINER_ID=$(컨테이너 생성 실행명령어) 이렇게 매개변수를 활용하여 ID를 저장하여 사용할 수 있다.
docker ps -q 를 통해 실행 중인 컨테이너의 ID를 가져온 뒤 매개변수에 저장하여 사용한다면 원래하려고 했던 방식으로 할 수 있었다.
하지만 하면서 느낀 점은 그냥 컨테이너의 이름으로 명령어를 입력하는게 더 편한 것 같다.
'리액트' 카테고리의 다른 글
리눅스 명령어로 파일생성하기 (0) | 2025.01.10 |
---|---|
React Context (0) | 2025.01.03 |
supabase (1) | 2025.01.02 |
react useHook - useRef (0) | 2025.01.01 |
프론트 FSD Pattern 에 대해서 (0) | 2024.12.31 |