컨테이너 내부에서 어떤 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요합니다. 어플리케이션 레벨에서 로그가 기록되도록 개발해서 별도의 로깅 서비스를 쓸 수도 있지만 도커는 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공합니다. 이번 포스트에서는 도커 컨테이너 로깅에 대해 정리하겠습니다. json-file 로그 사용하기 json-file 로그 명령어 $ docker logs [Container Id or Name] docker logs 명령어를 사용하면 컨테이너의 로그를 확인할 수 있습니다. --tail 옵션 -> 컨테이너의 로그가 너무 많아 읽기 힘들다면 --tail 옵션을 사용하여 마지막 로그 줄부터 출력할..
이번 포스트에서는 도커 볼륨을 다루는 방법을 정리하겠습니다. 위의 그림에서 보면 컨테이너 계층과 이미지 계층으로 나누어져 있는 것을 볼 수 있습니다. 보통 우리가 도커 이미지를 빌드할 때 docker build -t app [경로] 명령어를 실행하면 Dockerfile이라는 명세서를 기반으로 도커 이미지가 빌드가 됩니다. 이 이미지는 레이어 구조로 되어있는데, Dockerfile 내에 작성되어있는 여러 명령어들이 순차적으로 레이어가 쌓이듯이 저장된다고 보면 됩니다. 예를 들어, 우분투 이미지를 Base로 사용한다고 하면 Layer 1: Base 우분투레이어 설치 Layer 2: 우분투 운영체제에서 필요로하는 패키지들을 설치(ex. apt-get으로 패키지 설치하는 내용) Layer 3: 패키지를 설치(..
이번 포스트에서는 도커 네트워크에 대해 정리하겠습니다. 도커 네트워크 구조 기본적으로 도커를 호스트 운영체제에 설치하면 여러가지 네트워크 드라이버들이 설치되며 IP 주소를 순차적으로 할당하고 도커 컨테이너를 실행할 때 사용하고 싶은 네트워크 드라이버를 선택할 수 있습니다. 기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당합니다. 확인해보기 위해 아래의 명령어로 컨테이너를 생성해줍니다. $ docker run -it ubuntu:focal 그리고 컨테이너 내부에서 ifconfig 명령어로 컨테이너의 네트워크 인터페이스를 확인하겠습니다. 위 스크린샷을 보면 lo 네트워크 인터페이스와 eth0 네트워크 인터페이스가 각각 172.17.0.1과 172.17.0.2가 할당된 것을 확인할 수 ..
이번 포스트에서는 SSH 방식으로 통신하는 젠킨스 Slave(Agent) 노드를 추가하는 방법을 정리하겠습니다. Jenkins Slave(Agent) 노드에 SSH 키 설정하기 Master 노드에서 Slave 노드에 접속해서 사용하기 위해서는 Master노드와 Slave 노드가 SSH 통신을 할 수 있도록 만들어 주어야 합니다. 그러므로, Slave 노드에 SSH 키 생성을 하는 것 부터 시작하겠습니다. 1. 홈 디렉토리에 .ssh 디렉토리를 생성 # ~/.ssh 디렉토리 생성(이미 존재한다면 생략) $ mkdir ~/.ssh 먼저, 연결할 Slave 노드의 터미널에서 mkdir 명령어로 홈 디렉토리에 .ssh 디렉토리를 생성해줍니다. 2. SSH 키 쌍 생성하기 # SSH 키 페어 생성 $ ssh-ke..
이번 포스트에서는 Annotation Processor에 대해 정리해 보겠습니다. Annotation Processor란? Annotation Prcoessor란 소스 코드에 붙어있는 어노테이션 정보를 읽어서 컴파일 단계에서 컴파일러가 java 파일 혹은 바이트 코드를 생성하여 새로운 소스 코드를 생성할 수 있는 기능을 제공하는 javac(Java Compiler)에 내장된 도구입니다. 여기서 컴파일될 때 어떤 프로세서가 동작할지 결정하는 것은 프로세서를 찾는 'Service Loader'라는 기능의 도움으로 수행됩니다. Annotation Processing 원리 Annotation Processing은 javac에 의해 여러 round에 걸쳐서 동작합니다. 첫 번째 라운드는 컴파일이 사전 컴파일 단계..