본문 바로가기

dev/DOCKER

(19)
docker log rolling json 도커 컨테이너 로그에 rolling을 설정할 수 있습니다. rolling을 설정하지 않으면 로그 파일이 무한정 커지는 단점이 발생합니다. 이렇게 되면 로그를 확인하는 데 불편함이 있기 때문에 로그 rolling을 적용해야 합니다. 위의 화면은 nginx에 로그 rolling을 적용하고 있고 옵션은 다음과 같습니다. --log-driver=json-file: 로깅 드라이버를 json-file로 설정하고 있습니다. --log-opt max-size=1m: 로그 파일의 최대 크기를 1MB로 지정하고 있습니다. --log-opt max-file=3: 로그 파일의 최대 파일 수를 3개로 지정하고 있습니다. 3개를 넘어가게 되면 오래된 로그파일을 삭제합니다. nginx 컨테이너의 로그파일을 조회하면 앞에서 설정한 ..
docker install redis docker로 redis 설치하는 방법입니다. alpine 버전 이미지가 아닌 최신 공식 이미지를 다운받아서 진행하면 메모리 오버 커밋이나 실행 권한이 부족하다는 오류가 발생합니다. 그래서 alpine 버전 이미지를 다운받아서 진행했습니다. alpine 버전 redis 이미지를 검색합니다. alpine 버전 redis 이미지를 다운받습니다. 이미지 다운받았는지 확인합니다. 컨테이너를 생성해서 실행하면 정상적으로 올라온 것을 확인할 수 있습니다. 컨테이너에 bash가 없을 수 있기 때문에 접속하려고 하면 오류가 발생할 수 있습니다. 그런 경우 bash가 아닌 sh를 사용하면 컨테이너에 접속할 수 있습니다. 컨테이너 내부에 있는 redis 서버에 접속하여 정보를 확인합니다. 해당 글에 대한 정보는 아래 링크..
Docker Kafka Cluster 설치 docker-compose로 zookeeper와 kafka를 각각 3대 구성으로 kafka 클러스터 설치하는 방법입니다. docker-compose.yml 파일을 아래와 같이 작성합니다. 1라인: docker-compose 버전으로 3.5로 지정합니다. 2라인: docker-compose로 실행할 서비스(컨테이너) 목록입니다. 3라인: docker-compose로 실행되는 zookeeper 서비스인데 이름은 zk1입니다. 4라인: zookeeper 컨테이너 이미지 정보입니다. 5라인: 컨테이너가 중단되는 경우 자동으로 재시작하는 옵션입니다. 6라인: 컨테이너 내부에서만 사용되는 hostname을 zk1으로 설정합니다. 7라인: 컨테이너 이름을 zk1으로 설정합니다. 8~9라인: 컨테이너 외부포트와 내부포..
docker network 도커 네트워크는 도커 컨테이너를 연결하고 통신할 수 있는 가상 네트워크로 크게 bridge, host, none 3가지 유형으로 나뉩니다. bridge는 다시 기본 네트워크와 사용자 정의 네트워크로 나뉘는데 기본 네트워크는 따로 지정하지 않으면 도커에서 사용되는 디폴트 네트워크입니다. 사용자 정의 네트워크는 사용자가 직접 생성하고 관리하는 네트워크로 특정 컨테이너가 기본 네트워크가 아닌 다른 네트워크를 사용해야 하는 경우 필요한 네트워크입니다. 컨테이너가 외부와 직접 통신할 수 없기 때문에 포트포워딩이 필요합니다. host는 컨테이너가 현재 host PC의 네트워크 환경을 그대로 사용하는 것으로 외부와 통신해야 되는 경우 포트포워딩 없이 바로 컨테이너와 통신할 수 있습니다. none은 컨테이너가 네트워크..
Dockerfile 작성 프로세스로 실행하던 어플리케이션을 도커로 실행해야 하거나 기존 도커 이미지를 수정해서 빌드해야 되는 경우 Dockerfile을 사용하면 됩니다. Dockerfile은 도커 이미지를 빌드하는 텍스트 파일입니다. 예시로 프로세스로 실행한 스프링 부트 어플리케이션을 도커 이미지로 빌드하겠습니다. vi 편집기로 Dockerfile을 생성하고 위와 같이 작성합니다. FROM은 Dockerfile에서 사용할 베이스 이미지로 생성될 이미지의 기본 토대라고 생각하시면 됩니다. COPY는 Dockerfile이 있는 디렉토리의 Test.jar 파일을 이미지 내부로 복사하는 것입니다. 원본 파일의 경로는 현재 Dockerfile 디렉토리를 기준으로 하고 있으므로 원본 파일의 full 경로를 작성하면 에러가 발생합니다. EN..
docker log 파일 확인 도커 로그를 "docker logs -f"명령어를 통해서 실시간으로 확인할 수 있지만 오래된 로그를 "docker logs -f"로 확인하기에는 무리가 있습니다. 도커에서 컨테이너의 로그를 따로 저장하고 있는데 "docker inspect --format='{{.LogPath}}' 컨테이너명"으로 로그 파일 위치를 조회할 수 있습니다. 예시로 tomcat 컨테이너를 조회했는데 /var/lib/docker/container/ 디렉토리 밑에 있는 것을 확인할 수 있습니다. tomcat 컨테이너의 로그 파일을 vi로 조회하면 위와 같이 기존 로그를 확인할 수 있습니다. 오래된 로그를 확인하거나 로그 파일을 백업해야 되는 경우 참고하면 좋을 거 같습니다.
docker commit 현재 사용중인 docker 컨테이너를 이미지로 변환하려면 docker commit을 사용해야 합니다. 예제로 사용하기 위해 nginx을 docker 컨테이너로 생성합니다. nginx 컨테이너를 생성할 때 volume 옵션을 추가했는데 그 이유는 컨테이너를 이미지로 변환할 때 volume 옵션도 포함되는지 확인하기 위해서입니다. 컨테이너 내부에 volume 옵션으로 설정한 nginx.conf 파일을 맞는지 확인하고 volume옵션 말고 파일도 docker commit에 포함되는지 확인하기 위해 컨테이너 내부에 test.txt 파일을 생성합니다. 현재 실행 중인 nginx 컨테이너를 종료하고 docker commit으로 nginx 컨테이너를 이미지로 변환합니다. docker commit을 사용하려면 "doc..
docker cp docker 컨테이너와 호스트 pc 사이에 파일이나 디렉토리를 복사하려면 docker cp를 사용하면 됩니다. 위 예제는 nginx 컨테이너에 있는 index.html 파일을 호스트 pc로 복사하는 예제로 docker cp "원본 파일/디렉토리" "대상 파일 디렉토리" "원본 파일/디렉토리"을 "대상 파일 디렉토리"로 복사한다고 생각하면 됩니다. 컨테이너를 가리킬 때는 "컨테이너명:컨테이너 파일/디렉토리" 이렇게 사용해야 합니다. 반대로 호스트pc에서 docker 컨테이너로 복사하는 것도 가능합니다.