티스토리 뷰

이미지

  • 컨테이너를 생성할 때 필요한 요소
  • 이미지는 여러 계층으로 된 바이너리 파일로 존재
  • 읽기전용
  • [저장소이름]/[이미지이름]:[태그]

컨테이너

  • 이미지로 컨테이너를 생성
  • 독립된 파일시스템과 격리된 시스템자원 및 네트워크를 사용할 수 있는 독립된 공간
  • 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지게 됨
  • 컨테이너에서 무엇을 하든 원래 이미지에는 영향을 주지 않음
  • 가상 IP 주소를 할당받음. 172.17.0.x 의 IP를 순차적으로 할당
  • 컨테이너를 삭제하면 컨테이너 계층에 있던 정보도 삭제됨

도커 명령어

Docker-compose

docker-compose up -d
# -d, --detach : background 로 실행
# up : start or restart all the services defined in a docker-compose.yml

docker-compose start
# start : start existing container for a service (새로운 컨테이너를 생성하지 않음)
# useful only to restart containers that were previously created, but were stopped

docker-compose restart
# restart: restarts all stopped and running services

docker-compose run
# overrides the command defined in the service configuration
# 이미 실행되고 있는 포트가 있다면, 포트충돌이 날 수 있다.
# 컨테이너를 생성하고 실행하는 역할

docker-compose down -v
# -v, --volume: 연결되었던 volume 을 같이 삭제한다.
# Stops containers and removes containers, networks, volumes, and images created by up.

도커 사용

  • ctrl + P, Q : 컨테이너를 정지하지 않고 셸에서 빠져나옴
  • create: 컨테이너를 생성만 하고 컨테이너로 들어가진 않음
  • start : 컨테이너 실행
  • attach: 컨테이너 내부로 들어감
  • ps: 정지되지 않은 컨테이너 목록확인

도커 옵션

포트

  • 포트 바인딩
  • [호스트포트]:[컨테이너포트]
-p 8080:80/tcp
-p <host_port>:<docker_port>/<type>
# 호스트에서 tcp 8080 포트로 들어오는 모든 것은 도커내의 80 포트에 매핑시킨다.

볼륨

  • 컨테이너의 데이터를 영속적으로 활용가능
  1. 호스트와 볼륨을 공유 가능
    • 호스트와 디렉토리를 공유한다면, 완전 같은 디렉토리이다.
    • 원래 존재하던 호스트의 디렉토리의 볼륨을 공유하면, 컨테이너의 디렉토리가 덮어씌워짐
    • 호스트의 디렉토리를 컨테이너의 디렉토리에 마운트하는 구조
  2. 볼륨 컨테이너를 공유를 공유하는 방법도 있음
  3. 도커 자체에서 제공하는 도커 볼륨도 있음

네트워크

  • 컨테이너에 내부 IP를 순차적으로 할당하는 구조
  • 내부 IP 는 도커 내부망이므로 외부와 연결될 필요가 있음
  • 기본적으로 docker0 브리지를 통해 외부와 통신
  • 도커에는 외부와 연결할 수 있는 여러 네트워크 종류가 있음. 그중의 하나가 bridge
  • 도커 내부에도 내장DNS 를 가짐
  • docker-compose 에서는 기본적으로 브리지 타입의 네트워크를 생성

브리지(bridge)

  • 사용자 정의 브리지를 새로 생성해 각 컨테이너에 연결하는 구조

환경(environment)

  • 도커 내부에서 사용할 환경설정을 key:value 형태로 넣을 수 있음

기타

  • 도커의 로그는 json 형식으로 저장된다.
  • 도커의 로그는 컨테이너별로 로컬에 저장된다. (/var/lib/docker/containers/{containerId}/{containerId}.log)
  • 컨테이너는 프로세스를 추상화 한 것이다.

ELK 적용하며 배우는 도커

# 도커 버전
version: '3.2'

# 서비스들
services:
    # 서비스이름
  elasticsearch:
        # 가져올 이미지
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
        # 볼륨 마운트
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
        # 포트 바인딩
    ports:
      - "9200:9200"
      - "9300:9300"
        # 컨테이너 내부에서 사용할 환경설정
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      ELASTIC_PASSWORD: password
      # Use single node discovery in order to disable production mode and avoid bootstrap checks.
      # see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
      discovery.type: single-node
        # 네트워크 설정
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      - "5044:5044"
      - "5000:5000/tcp"
      - "5000:5000/udp"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
        # 의존성 여부 (elasticsearch)
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./kibana/config/kibana.yml
        target: /usr/share/kibana/config/kibana.yml
        read_only: true
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch
# 네트워크 설정
networks:
  elk:
    driver: bridge

volumes:
  elasticsearch:

참고

'우아한테크코스 > 레벨3' 카테고리의 다른 글

[마무리] 레벨3, 팀프로젝트 회고  (0) 2021.08.24
[Spring] 사용자인증과 ArgumentResolver, Interceptor  (0) 2021.08.23
CORS  (0) 2021.08.21
Flyway: DB migration  (0) 2021.08.19
[꿀팁] ssh config 설정하기  (2) 2021.08.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함