본문 바로가기

Docker13

Dockerfile (개인 프로젝트) 엄청 경량화된 리눅스인 alpine 이미지를 이용해서 httpd 만들면 기존 httpd 이미지보다 용량을 작게 해서 만들 수 있다. 이렇게 이미지를 수정하여 내가 딱 필요한 부분을 최적화하여 다시 만들어내는 능력은 유용할 것이다. Dockerfile Docker 는 이미지를 Dockerfile 의 명령어들을 읽고 그에 맞게 자동으로 빌드한다. Dockerfile 은 주어진 이미지를 빌드하는데 필요한 모든 커맨드가 텍스트 형식으로 담긴 파일이다. Docker 이미지는 Dockerfile 명령어의 결과로 만들어진 읽기 전용의 레이어들로 구성되어 있다. 읽기 전용의 레이어이기 때문에 이전 레이어에서 변경된 내용이 있다면 다음 레이어가 되어 그 위에 쌓이게 된다. 다음 Dockerfile 을 살펴보자. FROM.. 2022. 12. 21.
LXC (개인 프로젝트) LXC(LinuX Containers) LXC(LinuX Containers)는 단일 리눅스 시스템에 동작하고 있는 프로세스를 격리시켜 각 프로세스마다 독자적인 리눅스 시스템 환경을 구축하는 것을 의미한다. 일반적으로 가상화는 Hypervisor라는 논리적 플랫폼을 이용해 하나의 Host OS 위에 여러 Guest OS를 구동하는 기술이다. 이와 달리 LXC는 하나의 리눅스 시스템에서 프로세스들을 격리시켜 독자적인 시스템환경을 구축한다. 즉, 리눅스 컨테이너에서 가상화된 프로세스들은 모두 리눅스 시스템을 호환해야 한다. (출처: 엑스테일즈) Docker는 LXC 기반으로 만들어진 CRI (Container Runtime Interface)다. 하지만 이 둘은 차이점이 있다. 구조 LXC 와 Docker의.. 2022. 12. 19.
HAProxy - Multi LoadBalancing Docker + HAProxy + WEB(httpd,nginx) HAProxy에서 다중 port를 활용하여 Multi LoadBalancing 을 구현해 보겠다. 사실 Proxy서버는 WEB서버랑 분리되어 있는 것이 맞지만 편의상 안에 들어가 있게 설계해 보겠다. HAProxy에 대한 자세한 설정 글은 이전 글을 참조하자. https://raid-1.tistory.com/54 설계도는 다음과 같다. WEB 페이지는 Docker Container로 실행되는 a와 n 두쌍이 존재한다. a1 컨테이너와 a2 컨테이너가 로드밸런싱하고 n1 컨테이너와 n2 컨테이너가 로드벨런싱 하는것이다. Container 구성 설계도에 따라 Docker 1번 머신에서 설정한다. pull httpd pull nginx docke.. 2022. 12. 13.
Docker : Link Container간의 통신에 사용되는 --link옵션에 대해서 실습한다. Docker : Link 필요성 - Container는 IP를 동적(DHCP)으로 받아오기 때문에 항상 동일한 IP를 사용한다는 보장이 없다. - 서로 다른 두 개 이상의 Container 통신에서 문제가 발생할 수 있음. - link는 Container의 IP가 변경되어도 통신이 유지되도록 하는 기능. - Container 내부의 /etc/hosts에 기록 - Container의 이름에 따른 IP가 변경되어도 추적 가능 - Container의 이름이 변경되는 경우에는 추적 불가 link 실습 a1~3 컨테이너를 만들어 본다. docker run -itd --name a1 alpine docker run -itd --name a2 .. 2022. 12. 9.
Docker : Network Docker 에서 사용하는 대표적인 네트워크는 크게 3가지로 분류된다. 1. Bridge 2. Host 3. None Docker : Network 네트워크 어뎁터 검색 # docker network ls bridge 어뎁터는 VMware의 NAT카드랑 비슷한 역할을 한다. null 네트워크 카드는 네트워크 연결이 안 된 상태다. 악성 코드 등을 동적으로 분석할 때 사용한다. ip a bridge 어뎁터는 ip address에선 docker0으로 표현돼있다. 참고로 아래쪽의 veth3c28920@if24 는 m1 컨테이너를 하나 만들어서 생성된 로컬쪽 ip 정보다. docker exec m1 ip a 이름을 잘 보면 로컬 ip add와 m1 컨테이너의 포트가 서로 매핑 되는 것을 확인할 수 있다. 브릿지.. 2022. 12. 9.
Volume / bind mount ( Container Data 공유) Volume / bind mount 원래 컨테이너의 생명주기와 컨테이너 안의 데이터는 생명주기가 똑같다. 컨테이너를 삭제하면 내부 데이터는 사라지게 된다는 뜻이다. 이를 막기 위해 Docker에서 관리하는 Volume 기능을 통해 외부에 데이터를 따로 저장한다. 이렇게 외부에 저장되는 데이터는 다른 컨테이너에 갖다 붙일 수도 있고, 여러 컨테이너가 데이터를 공유할 수도 있다. 1. Container Data 공유의 필요성 - Docker의 Life Cycle과는 관계없이 Container의 Data를 보관 - Host의 Data를 Container와 공유해야 경우 2. Docker에서는 두 가지 방법을 제공한다. - Volume : docker가 직접 volume을 관리함 - bind-mount : Ho.. 2022. 12. 9.