0509 docker 3

Ada·2022년 5월 9일
0

Playdata-Cloud

목록 보기
17/21

즐거운 연휴를 끝내고 월요일이 시작되었다.

이수진 강사님이 떠나시고 설규환 강사님께서 새로 오셨다.


  • 대부분의 이미지는 리눅스를 기반으로 하고있다.

  • 컨테이너는 하나의 프로세스를 실행하도록 한다.

  • 가상화는 격리된 환경을 제공한다.

[Docker 기본구조]

  • Docker Client
  • Docker Host
    • Engine
    • Container Runtime(containerd, runC)
    • image registry
  • Registry
    • Docker Hub
    • Private Registry(직접 구성, AWS, GCP...)

[컨테이너 구동을 위한 리눅스 기반기술]

  • cgroup (제한, 자원의 적절한 할당)
  • namespace (격리) :
    PID(Process), Network, UID(User ID), Mount, UTS(Hostname), IPC
  • chroot

[이미지 관리 (docker image)]

  • 이미지 다운로드 (pull)
  • 이미지 목록 확인 (ls)
  • 이미지 삭제 (rm)

[컨테이너 관리(docker container)]

  • 생성(create) - 시작(start) - 중지(stop) - 삭제(rm)
  • docker container run / docker run (create+start)
  • 컨테이너 생성 및 시작 시 주요 옵션
    -i, --interactive : Interactive, 표준입출력(STDIN,STDOUT) 채널을 오픈 (컨테이너에 직접 연결 할 때 사용)
    -t, --tty : TTY, Terminal, 사용자가 터미널을 사용하여 연결할 수 있도록
    -d, --detach : 백그라운드(run) 실행
    -a, --attach : 포그라운드(start) 실행
    -n, --name : 컨테이너 이름 지정
  • 컨테이너 동작중 중지, 재시작, 일시정지 등 가능
    stop, restart, pause, unpause
  • 실행중인 컨테이너 제어
    docker attach : 현재 컨테이너의 메인 프로세스에 연결
    docker exec : 별도의 프로세스를 실행하여 연결 /bin/sh, /bin/bash
    docker logs : 컨테이너의 로그 확인
    docker top : 컨테이너 내 프로세스 확인

[볼륨]

  • Bind Mount
  • Docker Volume
  • tmpfs (tmpfs는 수많은 유닉스 계열 운영 체제의 임시 파일 스토리지 기능을 일컫는 이름이다. 마운트된 파일 시스템처럼 보이지만 영구적인 기억 장치가 아닌 휘발성 메모리에 저장된다. 가상 디스크 드라이브처럼 보이면서도 디스크 파일 시스템을 호스팅하는 램 디스크와 구조가 비슷하다.)

참고) 컨테이너 전체 삭제(실행중+중지상태)
$ docker rm -f (dockerpsaq)(docker ps -aq) docker rm -f docker ps -aq

[도커 네트워크]

  • Docker에서는 기본적으로 컨테이너가 사용할 수 있는 Bridge를 제공(docker0)
  • docker0는 172.17.0.0/16 네트워크 주소를 사용 (내부망 IP)
  • 기본 docker0 bridge를 사용할 경우는 veth를 생성하여 사용
  • 기본 bridge 이외에도 다양한 유형의 네트워크 사용 가능

[ Docker에서 사용할 수 있는 네트워크 유형]

1) Bridge: 기본적으로 생성된 docker0 브리지를 사용하여 컨테이너의 외부 연결 제공. 사용자가 직접 생성 가능

2) Host: Docker Host의 네트워크 설정을 그대로 사용

3) Null : 네트워크 인터페이스를 사용할 필요가 없는 컨테이너에 사용

4) macvlan : 호스트의 네트워크와 동일한 위치에 가상 네트워크 인터페이스를 생성
Bridge 와 Host 의 중간

macvlan 사용시 필요조건 : Promiscuous mode 활성화

5) overlay : 컨테이너 클러스터 환경에서 사용

6) container : 다른 컨테이너의 네트워크 설정을 공유

[ 사용자에 의한 Docker Network 개체 생성 ]

$ docker network create --driver=[TYPE][NETWORK이름]

Bridge

예시$ docker network create --driver bridge mybridge1

예시$ docker network create --driver

1) bridge --subnet 192.168.200.0/24 --gateway 192.168.200.1 mybridge2
옵션
--driver: 사용할 네트워크 유형 선택
--subnet: bridge 내부에서 사용할 네트워크 IP 범위
--gateway: bridge 내부에서 외부로 패킷을 보내기 위한 경로. subnet 범위 내

macvlan
$ ip link set enp0s8 promisc on // promiscuous mode 활성화
$ docker network create --driver=macvlan
예시$ docker network create --driver

2) macvlan --gateway 192.168.56.1 --subnet 192.168.56.0/24 --ip-range 192.168.56.192/26 -o parent=enp0s8(이름설정) mymacvlan
옵션
--gateway : 동일
--subnet : 동일
--ip-range : 실제 컨테이너의 NIC에 할당할 IP주소의 범위
-o parent : 호스트 시스템의 NIC중 macvlan으로 연결할 네트워크를 사용중인 NIC

네트워크 설정 변경(실행중인 컨테이너의 네트워크 변경)
docker network connect
docker network disconnet

[ 사용자 생성 Bridge의 특징 ]

  • network-alias 기능이 제공
  • 내부적인 DNS가 생성 (기본 docker0 브리지에는 없음)

컨테이너 이름을 사용한 주소 확인 : /etc/hosts 파일에 반영됨
--link <컨테이너명>[:별칭]
(cat /etc/hosts 로 확인)
(docker run -dit --name os3 --link os1 centos -> os3를 사용할 때 os1 은 이름으로 접속 가능하도록 설정, web 과 db 서버를 나눌 때 좋다)
(docker run -it --name os5 --link os1:db centos -> db 라는 이름으로 연결 가능)
(현재 존재하고있는 os 로만 연결 가능)

DNS를 사용한 주소 확인 (별도의 bridge 생성 시)

  • 따로 설정하지 않아도 컨테이너 이름을 사용한 이름 변환 가능
  • 각 bridge 내 DNS 서버 동작 (127.0.0.11)
    DNS 서버 설정 확인 : /etc/resolv.conf

network-alias

  • 해당 이름을 사용하는 다수의 컨테이너를 지정

network-alias 를 지정한 컨테이너 실행

$ docker run -d --name web1 --network mybridge1 --network-alias websvc httpd
$ docker run -d --name web2 --network mybridge1 --network-alias websvc httpd
$ docker run -d --name web3 --network mybridge1 --network-alias websvc httpd

$ docker cp index1.html web1:/ur/local/apache2/htdocs/index.html

테스트용 컨테이너 생성

$ docker run -it --rm --network mybridge1 travelping/nettools

테스트

$ nslookup web1.
$ nslookup web2.
$ nslookup web3.
$ nslookup websvc.

컨테이너 이름 관련 옵션

  • docker run 실행 시 --hostname 옵션: 컨테이너의 hostname 지정
$ docker run --hostname test-centos --rm -it centos
  • docker run 실행 시 --dns 옵션: 컨테이너 내부에서 사용할 DNS 지정
$ docker run --dns 8.8.8.8 --rm -it centos
$ cat /etc/resolv.conf

$ docker network connect bridge os7
$ docker exec os7 ip a s

-> inet 172.17.0.5/16

$ docker network disconnet mybridge1 os7

-> 연결 해제

profile
백엔드 프로그래머

0개의 댓글