컨테이너9 Docker resource constraints - 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 자원 할당 제한 - 출처: https://docs.docker.com/config/containers/resource_constraints/ - 개요 기본적으로 container는 자원 사용량에 제한이 없다. Docker는 docker run 명령어 option을 통해 memory, CPU를 얼마나 사용할지 설정하는 기능을 제공한다. 이런 기능들을 사용하기 위해서는 kernel이 Linux capabilities(프로세스의 권한을 제어하는 기능)을 제공해야 한다. docker info 명령어를 실행했을 때 kernel이 기능을 제공하지 않는다면 WARNING: No swap limit support와 같은 메시지를 보게될 수 있다. - Memory 실행.. 2023. 6. 18. Docker network 출처: 시작하세요! 도커/쿠버네티스 - 도커 네트워크 출처: https://docs.docker.com/engine/tutorials/networkingcontainers/ 출처: https://docs.docker.com/network/network-tutorial-standalone/ Docker network 구조 Docker network 구조를 간단한 그림으로 나타내면 아래와 같다. veth: Docker는 container를 생성할때마다 IP를 부여한다. 하지만 해당 IP는 docker가 설치된 host 에서만 사용가능하므로 외부와 연결해줘야 하는데 이를 위해 veth 라는 network interface를 container 마다 생성한다. docker0: 각 veth를 host의 eth0와 .. 2023. 6. 12. Docker volume 출처: 시작하세요! 도커/쿠버네티스 - 도커 볼륨 Docker volume은 왜 필요한가? mysql image로 container를 하나 생성했다고 가정해보자. 이 container는 Web 서버의 요청을 받아 새로운 정보를 계속 축적해나갈것이다. 즉 읽기 전용인 docker image를 기반으로 변경분이 docker container layer에 기록된다. 그런데 container를 재시작하면 어떻게 될까? 이전에 예제를 통해 확인해봐서 알겠지만 container layer의 정보는 초기화된다. 이렇게 되면 축적된 정보가 날아가게 된다. 이를 방지하기 위해 필요한것이 volume 이다. Host volume 공유 ~ % docker run -d \ --name wordpressdb_hostvolume.. 2023. 6. 11. Container application example 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 애플리케이션 구축 Container 구성 일반적으로 Service를 제공한다고 하면 여러 모듈로 구성되는 경우가 많다. 웹 어플리케이션을 아무리 간단한 형태라도 Web 과 DB 는 기본적으로 구성하는 경우가 많다. DB와 Web을 하나의 Container에 넣을 수도 있지만 각각 다른 Container로 관리하면 독립성이 보장되고 Version 관리가 쉬워지는 등 이점이 많다. Wordpress + DB Container 생성 wordpress를 들어본적이 있는지 모르겠다. wordpress는 널리 사용되는 웹사이트 제작도구이다. 이에 DB를 연동하여 블로그서비스를 구축해보자. ~ % docker run -d --name wordpressdb \ -e MY.. 2023. 6. 10. Container port 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너를 외부에 노출 Container는 VM과 마찬가지로 가상 IP주소를 할당받으며 기본적으로는 Docker NAT IP인 172.17.0.x를 할당받는다. 만약 ifconfig 명령어를 찾을 수 없다고 뜬다면 apt-get update, apt-get install net-tools 명령어를 차례대로 실행시킨 후 ifconfig 명령어를 사용한다. root@86058c0bec67:/# ifconfig eth0: flags=4163 mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 1.. 2023. 6. 10. Container 생성 및 삭제 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 생성 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 목록확인 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 삭제 Container 생성 docker run -it 명령어를 이용하면 container를 생성하고 해당 container에 접속할 수 있다. docker run -it 명령어는 세부적으로 아래 4단계를 거친다. local에 image가 없으면 repository로 부터 download (docker pull) container를 생성 (docker create) container를 시작 (docker start) container에 접속 (docker attach, 단, -it option 사용시) ~ % docker run -it ubuntu.. 2023. 6. 3. Image와 Container - 출처: https://docs.docker.com/get-started/overview/ Image Image는 Docker container를 생성하기 위한 일종의 읽기-전용의 지시 template 이라고 할 수 있다. image는 다른 image를 기반으로 하여 커스터마이징 되기도 한다. 예를 들어 ubuntu image를 기반으로 apache web server와 application 을 설치하고 application을 실행하기 위해 환경 설정을 하는식이다. Image를 만들기 위해서는 Dockerfile 을 만들고 image를 만들기 위한 절차를 기술해야 한다. Dockerfile 내의 각 절차는 image 내의 layer를 생성한다. Dockerfile을 변경하고 image를 다시 빌드하면 .. 2023. 5. 31. Kubernetes - Pod - 출처: Kubernetes in action - 파드 파드는 하나 이상의 컨테이너 그룹이다. 쿠버네티스는 컨테이너를 개별적으로 배포하지 않으며 컨테이너 그룹인 파드를 배포 및 운영한다. 파드에 속한 컨테이너 그룹은 하나의 워커 노드에 배포된다. 즉 파드 내의 컨테이너들은 각각 다른 워커 노드에 배포되지 않는다. 단순히 기술적인 관점에서는 여러 프로세스를 하나의 컨테이너에서 실행시킬 수 있다. 하지만 이 방법은 권고되지 않는다. 컨테이너는 단일 프로세스를 실행할 목적으로 설계되었다. (자식 프로세스를 생성하는 경우는 예외) 만약 단일 컨테이너에서 여러 프로세스를 실행하면 아래와 같은 문제가있다. 여러 프로세스가 로그를 동일 표준 출력에 기록하면 관리하기가 난해하다. 프로세스별로 재시작하는 매커니즘을 원.. 2022. 10. 9. Kubernetes - 개요 - 출처: Kubernetes in action - 모놀리스 to 마이크로서비스 과거에는 대부분의 시스템들이 모놀리스 형태였다. 하지만 점차 시스템들이 대형화되면서 모놀리스 시스템의 단점이 드러났다. 모놀리스 시스템은 해당 구성요소들이 너무 강하게 결합되어있기 때문에 시스템 구성요소의 일부분만 변경해도 전체 배포 과정을 거쳐야 한다. 또한 만약 시스템의 사용자가 많아지면 확장해야하기 마련인데 수직 형태의 증설(Scale up)은 CPU나 RAM을 2배로 올린다고 성능이 선형적으로 정확히 2배로 증가하지 않기 때문에 한계가 존재한다. 그래서 수평 형태의 확장(Scale out) 을 보통 선택하는데 어플리케이션 코드가 크게 변경되어야 하는 경우도 있어서 이 역시 쉽지 않다. 이를 극복하기 위해 나온 개념이 .. 2022. 10. 2. 이전 1 다음