'docker'에 해당되는 글 32건

  1. 2020.08.26 [Docker] Docker Container 내 Terraform 설치
  2. 2020.07.21 [Java] jar 파일 내 resources 읽기 - ClassPathResource
  3. 2020.05.11 [Kibana] Docker Compose 실행 시 Permission 오류.
  4. 2020.04.16 [Logstash] Docker Compose 구성 하기.
  5. 2020.04.08 [Docker] Docker Compose TZ 설정
  6. 2020.04.07 [Elasticsearch] Docker Compose 실행 시 permission denied
  7. 2020.04.02 [Kibana] Docker Compose 구성 하기
  8. 2020.04.02 [Elasticsearch] Docker Compose 구성 하기
  9. 2020.04.01 [Docker] Docker Compose 로 Ubuntu 올리기
  10. 2020.04.01 [Beats] Metricbeat Docker Compose 기본 구성 하기

[Docker] Docker Container 내 Terraform 설치

Cloud&Container/IaC 2020. 8. 26. 08:26

아래와 같이 설치 하게 되면 0.11.x 버전이 설치가 됩니다.

Terraform 의 경우 syntax 가 버전에 따라 다른 부분이 있기 때문에 사용 하시는 버전에 맞추 설치 하시면 좋습니다.

 

RUN apk add terraform  

 

버전을 지정 해서 설치 하는 건 아래와 같이 하시면 됩니다.

RUN wget https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
RUN unzip terraform_0.13.0_linux_amd64.zip && rm terraform_0.13.0_linux_amd64.zip
RUN mv terraform /usr/bin/terraform

위에서 0.13.0 에 대한 부분은 변수로 빼서 사용을 하셔도 됩니다.

 

ENV terraform-version 0.13.0
...중략...
RUN wget https://releases.hashicorp.com/terraform/${terraform-version}/terraform_${terraform-version}_linux_amd64.zip

참고문서)

https://docs.docker.com/engine/reference/builder/

 

:

[Java] jar 파일 내 resources 읽기 - ClassPathResource

ITWeb/개발일반 2020. 7. 21. 20:23

제목에 있는 그대로 입니다.

 

[참고문서]

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/ClassPathResource.html

 

ClassPathResource 를 이용해서 구현 하면 됩니다.

// resourceFile 은 resources 를 제외한 path 와 filename 을 작성 합니다.

ClassPathResource resource = new ClassPathResource(resourceFile);

 

아래 예제 코드는 programcreek.com 에서 가져 왔습니다.

public static String getResourceAsString(String path) {
	try {
		Resource resource = new ClassPathResource(path);
		try (BufferedReader br = new BufferedReader(
				new InputStreamReader(resource.getInputStream()))) {
			StringBuilder builder = new StringBuilder();
			String line;
			while ((line = br.readLine()) != null) {
				builder.append(line).append('\n');
			}
			return builder.toString();
		}
	}
	catch (IOException e) {
		throw new IllegalStateException(e);
	}
}

이와 같이 구현을 한 이유는 로컬에서는 잘 되는데 jar 로 말았을 때는 file 을 찾지 못하는 에러가 발생을 해서 입니다.

:

[Kibana] Docker Compose 실행 시 Permission 오류.

Elastic/Kibana 2020. 5. 11. 14:15

kibana 를 docker-compose 를 이용해서 실행 할 때 설정 파일, kibana.yml 파일에 대한 permission 오류가 발생 할 때가 있습니다.

이 경우 처음 부터 kibana.yml 파일이 있는 위치에 permission 을 부여 해 주거나 docker-compose.yml 파일에서 아래와 같이 추가 하시면 문제를 해결 할 수 있습니다.

 

user: "1002:0"

 

- host 서버에서

$ id

uid=1002 gid=20

 

- container 에서 

$ id

uid=1000 gid=0

 

실행한 놈과 실행 된 놈의 user 가 달라서 발생 하는 오류 입니다.

권한을 주거나 user 를 맞춰 주시면 됩니다.

:

[Logstash] Docker Compose 구성 하기.

Elastic/Logstash 2020. 4. 16. 17:08

Elastic 공식 문서로는 아직 못본 것 같습니다.

기본 Docker 문서는 아래 문서를 참고 하시기 바랍니다.

 

[공식문서]

https://www.elastic.co/guide/en/logstash/current/docker.html

 

그러나 아예 예제가 없는 건 아닙니다.

Elastic 사의 github 에 들어가 보시면 참고 하실 수 있는 template 파일이 있습니다.

 

[github logstash-docker]

https://github.com/elastic/logstash-docker/tree/master/templates

 

위 템플릿 기반으로 logstash 만 설정해서 구성 하시면 쉽게 할 수 있습니다.

그 이외는 on premise 방식의 logstash 사용 방법과 크게 다른게 없습니다.

 

[실행방법]

$ docker-compose up -d

 

이와 같이 실행 하시면 background 로 자동 실행 됩니다.

 

[docker-compose.yml 예제]

version: '3.7'
services:
  logstash:
    image: docker.elastic.co/logstash/logstash:7.6.2
    volumes:
      - ./examples/logstash.conf/:/usr/share/logstash/pipeline/logstash.conf
    network_mode: bridge
:

[Docker] Docker Compose TZ 설정

Cloud&Container/IaC 2020. 4. 8. 09:14

docker-compose tz 설정

 

Case 1)

volumes:
  - "/etc/localtime:/etc/localtime:ro"
  - "/etc/timezone:/etc/timezone:ro"


Case 2)

environment:
  - TZ=Asia/Seoul

 

:

[Elasticsearch] Docker Compose 실행 시 permission denied

Elastic/Elasticsearch 2020. 4. 7. 15:54

docker compose 실행 시  permission denied 에러 경험을 하실 수 있습니다.

아래와 같은 방법으로 문제를 해결 할 수 있으니 환경에 맞게 적용 해 보면 좋을 것 같습니다.

 

docker-compose.yml)

    volumes:
      - /elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
      - /elasticsearch/data:/usr/share/elasticsearch/data:rw
      - /elasticsearch/logs:/usr/share/elasticsearch/logs:rw

 

Case 1)

$ chmod 777 /elasticsearch/data

$ chmod 777 /elasticsearch/logs

 

Case 2)

- docker-compose.yml 안에 uid, gid 를 설정

user: "1002:0" # uid 는 host user 로 설정, gid 는 container group 으로 설정

 

Elasticsearch 의 경우 docker 로 구성 하시면 Container 내부에서 1000:0 으로 실행 됩니다.

즉, uid 1000(elasticsearch), gid 0(root) 가 됩니다.

그래서 bind mount 의 경우 host 에서의 권한과 container 에서의 권한을 잘 맞춰 주셔야 합니다.

 

$ id -u username

$ id -g username

$ docker exec -it container-name /bin/bash

 

그럼 즐거운 Elastic 되세요.

:

[Kibana] Docker Compose 구성 하기

Elastic/Kibana 2020. 4. 2. 08:28

Kibana를 Docker로 구성 하기 위한 docker-compose.yml 내용을 살펴 봅니다.

 

참고문서)

 

https://www.elastic.co/guide/en/kibana/current/docker.html

 

docker-compose.yml)

version: '2.2'
services:
  ${KIBANA-SERVICE-NAME}:
    image: docker.elastic.co/kibana/kibana:7.6.2
    container_name: ${KIBANA-SERVICE-NAME}
#    depends_on:
#      - ${ES-SERVICE-NAME}
    ports:
      - 5601:5601
    expose:
      - 5601
    environment:
      ELASTICSEARCH_HOSTS: http://host.docker.internal:9200
    networks:
      - ${NETWORK-NAME}

networks:
  ${NETWORK-NAME}:
    driver: bridge

위 설정은 host 에서 Elasticsearch 를 Standalone 으로 띄우고 Kibana 를 컨테이너로 실행 시킨 후 연동 하도록 한 것입니다.

접속은 아래와 같이 하면 됩니다.

- http://localhost:5601

 

만약, docker-compose.yml 파일 내 Elasticsearch 와 Kibana 를 모두 구성해서 띄우실 때는 아래 설정을 맞춰 주면 됩니다.

- depends_on : 섹션에서 Elasticsearch 실행 후 Kibana 가 실행 되도록 구성

- network 구성은  같은 걸 사용하도록 하고 bridge 로 설정

- kibana 에서 elasticsearch 를 찾기 위해 host.docker.internal 이 아닌 ${ES-SERVICE-NAME} 으로 변경

 

또는 다른 인스턴스에 Elasticsearch 가 구성이 되어 있다면,

- environment: 섹션에서 host.docker.internal 이 아닌 Elasticsearch가 구성된 인스턴스의 DNS나 IP로 변경

하시면 됩니다.

 

 

 

 

:

[Elasticsearch] Docker Compose 구성 하기

Elastic/Elasticsearch 2020. 4. 2. 07:49

Elasticsearch 를 Single Node 로 구성 하기 위한 docker-compose.yml 내용을 살펴 봅니다.

 

참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

 

docker-compose.yml)

version: '2.2'
services:
  ${ES-SERVICE-NAME}:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: ${ES-SERVICE-NAME}
    environment:
      - node.name=${NODE-NAME}
      - cluster.name=${CLUSTER-NAME}
      - discovery.type=single-node
      - discovery.seed_hosts=${NODE-NAME}
      - path.data=/usr/share/elasticsearch/data
      - path.logs=/usr/share/elasticsearch/logs
      - bootstrap.memory_lock=true
      - http.port=9200
      - transport.port=9300
      - transport.compress=true
      - network.host=0.0.0.0
      - http.cors.enabled=false
      - http.cors.allow-origin=/https?:\/\/localhost(:[0-9]+)?/
      - gateway.expected_master_nodes=1
      - gateway.expected_data_nodes=1
      - gateway.recover_after_master_nodes=1
      - gateway.recover_after_data_nodes=1
      - action.auto_create_index=true
      - action.destructive_requires_name=true
      - cluster.routing.use_adaptive_replica_selection=true
      - xpack.monitoring.enabled=false
      - xpack.ml.enabled=false
      - http.compression=true
      - http.compression_level=3
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc:
        soft: 1024000
        hard: 1024000
      nofile:
        soft: 1024000
        hard: 1024000
    sysctls:
      net.core.somaxconn: 65000
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cat/health || exit 1"]
      interval: 30s
      timeout: 30s
      retries: 3
    restart: always
    volumes:
      - ${NAMED-VOLUME-DATA}:/usr/share/elasticsearch/data:rw
      - ${NAMED-VOLUME-LOG}:/usr/share/elasticsearch/logs:rw
#      - ${FULL-PATH-DATA}:/usr/share/elasticsearch/data:rw
#      - ${FULL-PATH-LOG}:/usr/share/elasticsearch/logs:rw
    ports:
      - 9200:9200
      - 9300:9300
    expose:
      - 9200
      - 9300
    networks:
      - ${NETWORK-NAME}

volumes:
  ${NAMED-VOLUME-DATA}:
    driver: local
  ${NAMED-VOLUME-LOG}:
    driver: local

networks:
  ${NETWORK-NAME}:
    driver: bridge

 

Single Node 로 구성 하기 위해 중요한 설정은

- environment: 섹션에서 discovery.type=single-node 

입니다.

 

만약, Clustering 구성을 하고 싶다면 위 설정을 제거 하고 아래 세개 설정을 작성 하시면 됩니다.

- cluster.initial_master_nodes=# node 들의 private ip 를 등록 합니다.
- discovery.seed_hosts=# node 들의 private ip 를 등록 합니다.

- network.publish_host=# 컨테이너가 떠 있는 host 의 private ip 를 등록 합니다.

 

path.data 에 대한 구성을 복수로 하고 싶으실 경우

- volumes: 섹션에서 named volume 을 여러개 설정 하시거나

- bind mount 설정을 구성 하셔서 

적용 하시면 됩니다.

 

위 docker-compose.yml 을 기준으로 single node 구성과 cluster 구성을 모두 하실 수 있습니다.

 

  • ${....} 는 변수명 입니다.
    • 본인의 환경에 맞춰 작명(?) 하셔서 변경 하시면 됩니다.
:

[Docker] Docker Compose 로 Ubuntu 올리기

Cloud&Container/IaC 2020. 4. 1. 20:41

docker-compose.yml)

version: '3.7'
services:
  ubuntu-mac:
    image: ubuntu:18.04
    container_name: ubuntu-mac
    stdin_open: true
    tty: true
    command: [/bin/bash]

or

$ docker run --rm --name ubuntu-mac -ti ubuntu:18.04 /bin/bash

 

:

[Beats] Metricbeat Docker Compose 기본 구성 하기

Elastic/Beats 2020. 4. 1. 20:38

대부분 올라온 예제가 docker-compose.yml 내 ELKB 구성을 한방에 해서 사용을 하게 되어 있는데,

하고 싶은건 metricbeat 만 컨테이너 기반으로 올려서 agent 형태로 사용하고 다른 노드에서 실행 되고 있는

- Elasticsearch 와

- Kibana 로

통신 하게 하고 싶어서 기록해 봅니다.

 

특별한 내용은 전혀 없습니다.

 

참고문서)

https://www.elastic.co/guide/en/beats/metricbeat/current/running-on-docker.html

 

docker-compose.yml)

version: "3.7"
services:
  metricbeat:
    image: docker.elastic.co/beats/metricbeat:7.6.2
    user: root
    environment:
      - ELASTICSEARCH_HOSTS=http://host.docker.internal:9200
      - KIBANA_HOST=http://host.docker.internal:5601
    network_mode: "host"
    ports:
      - 9200:9200
      - 5601:5601

 

$ docker-compose up -d

 

위 구성은 host 장비에 Elasticsearch 와 Kibana 가 실행 되고 있고,

Metricbeat 를 컨테이너로 실행 시키고 host 장비를 모니터링 하기 위한 구성입니다.

즉, Metricbeat 를 컨테이너 기반의 Agent 로 사용 하는 거라고 보면 될 것 같습니다.

 

관련 문서는 아래 참고 하세요.

https://www.elastic.co/guide/en/beats/metricbeat/current/running-on-docker.html#monitoring-host

 

: