컨테이너

컨테이너 자원 할당 제한 컨테이너를 생성하는 run, create 명령어에서 컨테이너의 자원 할당량을 조정하도록 옵션을 입력할 수 있다. 옵션을 설정하지 않으면 자원을 무제한으로 사용하기 때문에 호스트에 무리가 가게 되면 다른 컨테이너까지 영향이 미칠 수 있기 때문에 설정하는 것이 좋다. docker inspect 명령어를 사용해 현재 컨테이너의 설정된 자원 제한을 확인할 수 있다. $ docker inspect mysql ... "HostConfig": { ... "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": null, "Pi..
컨테이너 내부에서 어던 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요하다. 도커는 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공한다. docker logs 명령어를 사용해 컨테이너의 표준 출력을 확인할 수 있다. $ docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ mysql:5.7 $ docker logs mysql 2022-12-27 10:19:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started. 2022-12-27 10:19:10+00:00 [N..
여러 기술들을 테스트를 하기 위해 Docker로 Centos나 Ubuntu를 설치하는 상황이 계속되다보니 항상 그때마다 찾아보기 귀찮아서 정리를 해보려고 한다. 1. Centos 이미지 pull 및 컨테이너를 실행 $ docker run --privileged -d --name centos centos:7 /sbin/init 버전과 컨테이너 명은 원하는 버전으로 바꾸면 된다. $ docker ps 2. centos 컨테이너 접속 $ docker exec -it centos bash 3. yum 업데이트 및 필요 Util 설치 $ yum update $ yum install yum-utils 4. Docker repository를 시스템에 등록 $ yum-config-manager --add-repo ht..
파드 내에 초기화만을 담당하는 컨테이너를 설정할 수도 있다. 그러면 초기화만을 수행하는 컨테이너와 요청을 처리하는 컨테이너를 별도로 개발하여 각각 재사용할 수 있다. 예를 들어 스토리지를 마운트할 때 '스토리지 안에 새로운 디럭터리를 만들고, 소유자를 변경한 후 데이터를 저장'하는 것과 같은 초기화 처리를 전담할 수 있다. Init-sample.yml apiVersion: v1 kind: Pod metadata: name: init-sample spec: containers: - name: main # 메인 컨테이너 image: ubuntu command: ["/bin/sh"] args: ["-c", "tail -f /dev/null"] volumeMounts: - mountPath: /docs # 마운..
· JPA
순수하게 J2SE 환경에서 JPA를 사용하면 개발자가 직접 엔티티 매니저를 생성하고 트랜잭션도 관리해야 한다. 하지만 스트링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 컨테이너가 제공하는 전략을 따라야 한다. 스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 이름 그대로 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다. 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 스프링 프레임워크를 사용하면 보통 비즈니스 로직을 시작하는 서비스 계층에 @Transactional 어노테이션을 선언해서 트랜잭션을 시작한..
· Spring
Prometheus, Grafana에 대한 것은 이전 블로그글에서 확인하면 된다. Spring Boot Project 생성 및 설정 Spring Boot Project(Gradle)를 생성하고 build.gradle에 의존성을 주입해준다. dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-core' implementation 'io.micrometer:micrometer-registry-prometheus'..
퍼시스턴스 볼륨 API 구현 예시 컨테이너를 지워도 데이터를 잃지 않기 위해서는 퍼시스턴트 볼륨을 사용해야 한다. 앞에 작성한 환경 변수 API 구현 예시에서 만든 my_daemon을 수정해서 퍼시스턴스 볼륨 API 예시를 구현해보자 외부 저장소를 마운트한 디렉터리에 데이터를 쓰도록 바꾸었다. 다시 이미지를 생성하고 컨테이너를 실행해보자 호스트상에 퍼시스턴트 볼륨으로 마운트할 디렉터리를 만든다. -v 호스트절대경로:컨테이너내경로로 볼륨의 path를 설정한다. 다른 터미널에서 컨테이너를 중지하고 다시 재기동 한다. COUNT가 이어서 출력되는것을 확인할 수 있다. 그럼 아예 컨테이너를 삭제 후 다시 컨테이너를 실행해보겠다. 삭제 후 컨테이너를 다시 생성해 시작해도 COUNT가 이어서 출력되는것을 확인 할 ..
환경 변수 API 구현 예시 이번에는 d5라고 하는 디렉터리를 만들고 Dockerfile과 my_daemon이라고 하는 2개 파일을 바탕으로 컨테이너를 개발할 것이다. FROM을 사용해 베이스 이미지로 apline을 지정했다. RUN에서는 apk add bash로 bash 셸을 추가했다. ADD로는 셸 스크립트 my_daemon을 루트 경로에 배치하고 CMD로 컨테이너가 기동할 떄 실행하게 했다. my_daemon은 컨테이너가 기동되면 실행되는 셸 스크립트다. 보통 자바나 파이썬으로 작성한 코드를 컨테이너로 만드는 경우가 많은데 이번에는 간단한 예를 위해 셸 스크립트를 사용했다. 환경 변수 INTERVAL이 없는 경우에는 3초 단위로 현재 시간과 카운트를 표준 출력(STDOUT)에 출력한다. 환경 변수 ..
컨테이너 API의 종류와 개요 컨테이너 API란 컨테이너를 블랙박스처럼 다룰 수 있게 해주는 인터페이스이다. 소프트웨어에서는 서로 다른 팀이 개발한 프로그램들을 연결하기 위해 서로 지켜야 하는 규격을 인터페이스라 한다. 따라서 API는 대상이 되는 프로그램을 블랙박스로 취급하여 다른 프로그램에서 호출할 수 있게 해준다. 이는 쿠버네티스 환경에서도 사용된다. 컨테이너 API는 몇 가지 종류가 있으며, 각각의 목적과 사용법이 다르다. 모든 API를 필수적으로 알고 구현해야 되는 것은 아니다. 애플리케이션의 특성에 맞게 적절한 API를 선택하여 구현하면 된다. 컨테이너 기동 컨테이너 내의 애플리케이션은 기동 시에 환경 변수나 실행 인자를 읽어서 그에 맞게 동작하게 만들 수 있다. 헬스 체크(쿠버네티스 환경) ..
컨테이너간 통신 및 연결 실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다. 호스트 내에서 접근 가능한 전용 네트워크를 통해 애플리케이션과 데이터베이스를 연결하는 것이 가능하다. 또한, 컨테이너를 호스트의 외부 네트워크에 공개하는 것도 가능하다. 컨테이너 간의 연결을 이용하는 애플리케이션 이미지가 도커 허브에는 다수 등록되어 있다. 이들 애플리케이션은 컨테이너를 기동하는 것만으로 사용할 수 있다. 애플리케이션 설명 연동하는 컨테이너 Rocket.Chat 슬랙(Slack)과 비슷한 채팅 애플리케이션 MongoDB 컨테이너와 연동 owncloud BOX나 DropBox 같은 파일 공유 애플리케이션 MySQL이나 MariaDB 등 컨테이너와 연동 Redmine 프로젝트 관리 애플리케이션 ..
beekei
'컨테이너' 태그의 글 목록