현재 개인적으로 Harbor 를 사용하고 있다. 별로 중요하지 않은 프로젝트여서 크게 신경쓰지 않는 저장소인데, 그래도 이래저래 테스트를 하는데 유용하다. Harbor 를 사용하다가 새로운 버전이 출시되어서 어떻게 업데이트를 했는지를 기록으로 남겨둔다. Harbor Stop Harbor 를 정지 시켜야 한다. Harbor 는 Docker-compose 기반으로 작동됨으로 docker-compose 명령어를 이용해서 다음과 같이 정지를 시켜줘야 한다. Backup 혹시 잘못됐을때를 대비해 Backup 을 해준다. 디렉토리를 그냥 복사해주는 것으로 하면 된다. 새로운 버전 다운로드 Docker 명령어를 이용해서 새로운 버전의 harbor 이미지를 다운로드 한다. 데이터베이스 Migration 하기 기존의 데이터베이스를 […]
Gitlab 을 위한 opentofu 도커 이미지 제작
Gitlab 에서 사용할 opentofu 도커 이미지를 제작해보자. Gitlab 에서 Auto DevOps 를 이용할 경우에 Docker 이미지를 이용해서 Terraform 빌드, 배포 하는게 가능하다. 지금은 Terraform 을 위한 Docker 이미지만 존재하는데, Opentofu 를 위한 도커 이미지를 제작해서 사용할 수 있도록 이미지를 만들어 보자. Dockerfile Docker 빌드를 위해서 Dockerfile 이 있어야 한다. 다음과 같다. 내용을 보면 gitlab-terraform.sh 스크립트 파일이 있어야 한다. 이 파일은 실제 Gitlab 을 이용해서 CI/CD 를 할 경우에 실제로 사용하게 되는 스크립트 파일이다. Docker Build Docker 빌드는 다음과 같은 명령어로 […]
Docker, 클라이언트 TLS 인증서 설정
Docker 서버를 구축했으며, 도메인은 정식 도메인이 아닌 개인 도메인이며 인증서를 셀프 싸인 인증서를 만들어서 TLS 서버 설정을 했다고 치자. 이렇게 되면 Docker 가 TLS 를 이용해서 서버에 접속을 하기 위해서는 서버 TLS 인증서에 대응하는 클라이언트 인증서가 필요하게된다. Docker 클라이언트 인증서 Docker 는 클라이언트 인증서를 /etc/docker/certs.d 디렉토리에서 찾게 된다. 이 디렉토리에 Docker 레지스트리 서버 호스트 이름과 같은 이름으로 디렉토리를 생성하고 그 안에 클라이언트 인증서를 세팅하면 된다. 이러한 구조는 다음과 같다. 의외로 간단하다. 참고: Verify repository client with certificates
Traefik, Portainer, Registry 를 위한 Docker Compose
docker-compose.yml 파일 내용은 다음과 같다. 위와같이 내용을 작성하고 YAML 파일로 저장한다. 저장한 파일 이름이 docker-frontend.yml 이라고 한다면 이것을 이용해서 다음과 같이 docker stack 을 deploy 한다. stack 이 생성 정상적으로 생성되면 3개의 Service가 생성된다. 각각 Traefik, Portainer, Registry 이며 Portainer 는 Traefik 에 URI Reverse 로 연결된다. Portainer 의 URL 은 http://<IP>/portainer 이다. Registry 에 .htpasswd 파일은 다음과 같이 생성하면 된다. 위 내용은 Traefik 를 앞에 두고 뒤에 Portainer 를 /portainer URI 로 접속하도록 한다. registry 서비스는 Traefik 와 별도로 […]
Docker 네트워크 이해
Docker 를 단순한 빠르고 가볍게 애플리케이션을 구성하게 해주는 컨테이너(Container) 로만 이해하는 건 좁은 시각이다. Docker 는 이러한 컨테이너들을 위한 네트워크 환경도 제공하고 있다. 이것은 Docker 가 종합적인 IT 인프라를 제공할 수 있다는 것을 의미한다. Docker 네크워크 상태 Docker 를 호스트에 설치하면 우선적으로 다음과 같은 네트워크 장치가 하나 보인다. 컨테이너를 하나도 실행하지 않은 상태에서 단지 Docker 데몬이 실행만 되어도 이렇게 docker0 라는 네트워크 장치가 나타난다. 아이피는 172.17.0.1 이며 브로드캐스트(Broadcast) 가 172.17.255.255 인 것으로 봐서 docker0 장치가 속하는 네트워크 대역은 172.17.0.0/16 임을 […]
Docker 에 Volumes 추가 하기.
Docker 를 서비스 모드로 실행을 시키면 나중에 문제가되는게 하나 있다. 예를들어, MySQL 을 Docker 를 이용해서 서비스 모드로 실행시켰다고 치자. 그러면 MySQL를 위한 데이터 디렉토리 Container 내에 생성된다. 만일 MySQL을 패치된 버전으로 올리고 싶다면 어떻게 될까? 이럴 경우에 데이터 디렉토리를 Container 내에서 백업할 방법이 없다. 이를 위해서 Docker 에는 Data Volumes 을 추가 할 수 있다. Data Volumes 데이터 볼륨은 호스트 파일 시스템을 컨테이너에 마운트 하는 방법이다. 따라서 Container 가 중지되었거나 Container 를 삭제했다 하더라도 호스트 파일 시스템에는 Container 에서 […]
Docker 실행하기
Docker 를 설치하고 나면 이제 실행을 해야 한다. 우선, 원래 실행 방법은 다음과 같은 순서를 따른다. Docker 이미지 다운로드 다운로드 된 Docker 이미지를 가지고 Container 생성 Container 실행 Docker 이미지 다운로드는 pull 명령어를 이용하면 된다. Docker ps -a Docker 에서 실행중이거나 중지된 Container 의 목록을 보여 준다. Docker create -t -i imageId /bin/bash [ –name naming ] Docker Container 를 생성한다. -t 는 tty 를 할당하고 하게 -i 는 Interactive 를 말한다. 보통 -t, -i 옵션을 붙여서 -it 로 붙여서 […]
Docker Hub
Docker Hub Docker 는 컨테이너기반 애플리케이션 격리모드로 동작하도록 해준다. 기존의 Hypervisor 를 사용하는 가상화가 아닌 Docker Engine 이 각 애플리케이션을 격리해준다. 애플리케이션이라는 말은 운영체제를 포함한다. 이 컨테이너에서 운영할 각종 애플리케이션들이 있어야 하는데, 이런 것을 개개인이 만들어서 사용해야한다면 비용이 많이 들것이다. 예를들어 Ubuntu 16.04 를 Docker 에서 동작하기 위해서 Docker 컨테이너 환경에서 설치부터 해야한다면 가상화 시스템과 다를바가 없을 것이다. 그래서 많은 사람들이 사용할 애플리케이션을 미리 이미지로 구워서 필요한 애플리케이션이미지를 다운받아 각종 설정들과 함께 실행만 시키면 될 것이다. 이는 마치 리눅스 시스템에서 […]
Docker 기본 원리
Docker 는 Linux 의 Container 기술이다. 일단 Linux 에 해당하는 기술이라고 하는 이유와 함께 Container 를 위한 제반사항들에 대해서 알아본다. 과거에 Solaris 에 Zone 이라는 기술이 있었다. 가상화기술이 아니라 Container 기술이라고 소개가 되었던 기억이 있다. Solaris 9 에서 이전의 Solaris 8 을 Zone 이라는 기술을 이용해서 하나의 하드웨어에서 돌릴 수 있었다. Linux 진영에서는 Jail 이라고 해서 chroot 로 파일시스템을 격리하는 기술을 이용해 마치 독립된 하나의 운영체제처럼 사용했었다. 지금도 검색을하면 Jail 환경에서 웹서버를 돌리는 기술 문서가 나온다. 그러다가 Linux 진영에서 아예 […]