본문 바로가기

Docker

[Docker] 깃 패키지로 컨테이너 관리하기

이미지를 만들고 도커 허브로 Push & Pull 하는 것까지 해봤다.

그런데 한가지 생기는 욕심은 아무래도 버전 관리를 깃으로 할텐데, 깃으로 코드도 관리하면서 우리 프로젝트에 사용될 컨테이너도 같이 관리하고 싶은 것이다.

 

그래서 깃 패키지라는 것에 대해 알아봤다.

 

순서는 아래와 같다. (믿고보는 유익한 생활코딩ㅎㅎ)

 

1. Github 에서 내 프로필 클릭

2. Settings 메뉴 클릭

3. 좌측 사이드바에서 Developer settings

4. Personal Access Token 클릭

5. Generate New Token 버튼 클릭

6. Note 에 간단히 토큰 사용 용도 작성

7. Expiration (토큰 유효기간) 설정

8. 권한 체크 (write:packages, delete:packages)

9. Generate token 클릭

10. 토큰 복사 (여기서 페이지를 벗어나면 다시는 토큰을 확인할 수 없다)

 

그리고 터미널로 들어간다.

터미널에서 도커 로그인을 해야하는데, GitHub Container Registry 로 로그인을 할 것이다.

이때 아까 발급 받은 토큰이 필요한데, 이 토큰을 매번 입력해주기에는 번거롭기 때문에 zsh 환경변수로 저장해놓을거다.

환경변수에 저장하지 않는 다면 아래 코드로 로그인이 가능하다.

docker login ghcr.io -u [USERNAME] -p [TOKEN]

 

하지만 우리는 환경변수를 사용하는 똑똑한 방법으로 로그인을 할 것이다.

아래 명령어를 입력한다.

vim ~/.zshrc

그리고 파일의 제일 밑에 다음 코드를 추가한다.

export CR_PAT=[TOKEN]

이제 이 명령어로 로그인이 가능하다.

echo $CR_PAT | docker login ghcr.io -u [USERNAME] --password-stdin

 

여기까지 하면 로그인에 성공했다.

이제 커밋을 하고 푸쉬를 해보자.

 

ubuntu 라는 이미지를 푸쉬해보는 예시

docker run -it --name my-ubuntu ubuntu
docker commit my-ubuntu ghcr.io/[USERNAME]/my-ubuntu:1.0
docker push ghcr.io/[USERNAME]/my-ubuntu:1.0

 

여기서 가장 중요한건 ghcr.io 과 [USERNAME] 부분이 틀리면 푸쉬하지 못한다.

ghcr.io 로 깃 패키지에 푸쉬한다는 것을 인식하고 USERNAME 으로 소유자, 즉 푸쉬할 위치를 인식한다.

 

여기까지하고 다시 깃 허브의 내 프로필로 가서 packages 를 누르면 방금 푸쉬한 컨테이너가 올라와 있다.

기본적으로 Private 으로 올라오는데 Package Setting 으로 가서 Public 으로 변경할 수 있다.

 

그리고 가장 중요한거!

스크롤을 좀더 내리면 레포지토리랑 연동할 수 있는 기능이 있다.

Connect Repository 를 누르면 소유자가 같은 레포지토리에 한해서 연동이 가능하다.

 

이렇게 깃 레포지토리와 도커 컨테이너를 한 번에 관리할 수 있게되었다.

굉장히 뿌듯하다ㅎㅎ

다음에는 팀원들이 쉽게 이미지를 받아오고 알맞은 옵션으로 컨테이너를 실행할 수 있도록 도커 컴포즈에 대해서 공부를 해봐야겠다.

 

 

[부록 : 오늘 새로 알게 된 것]

1. 컨테이너의 옵션(볼륨 마운트, 포트 포워딩)은 컨테이너를 커밋할 때 함께 올라가지 않는다.

 

2. 컨테이너를 종료 후 재실행 할때는 컨테이너의 옵션이 여전히 남아있다.

 

3. docker container ls -a 명령어랑 docker ps -a 명령어는 같다.

 

4. docker container run [container name] 을 하면 컨테이너가 실행되는 줄 알았는데 [container name] 이라는 이미지로 컨테이너가 생성된다. 애초에 docker container run 이라는 명령어는 없나보다. (그동안 이것 때문에 참 많은 오해를 했었다)

 

5. 컨테이너를 실행할 때 기본적으로 실행되는 커맨드를 지정해줄수 있다. (이거는 Dockerfile 작성 방법에 대해 다시 자세하게 복습해봐야겠다)

 

6. 실행할 커맨드가 없는 컨테이너를 실행하면 실행과 동시에 종료된다. -it 옵션을 이용해 컨테이너에 접속해서 계속 실행 상태를 유지할 수는 있으나 exit 명령어로 나가면 종료된다. 그런데 컨테이너 종료 후 재실행을 하면 exit 명령어로 컨테이너를 나가도 컨테이너가 유지된다.

 

7. docker exec -it [container name] /bin/sh 로 접속하면 일반적인 shell 이 나온다. 그런데 /bin/sh 대신 /bin/bash 로 입력하면 글자에 예쁘게 컬러가 입혀진 shell 이 나온다.

 

8. 컨테이너 실행 옵션을 컨테이너 명 뒤에 적으면 에러가 발생한다. (어찌보면 당연할지도...)

'Docker' 카테고리의 다른 글

[Docker] 이미지를 만들어보자  (0) 2021.10.28
[Docker] 도커를 써보자  (0) 2021.10.20