
if(kakao)2022 이게 돼요? 도커 없이 컨테이너 만들기를 정리해봅니다. 저는 ubuntu server 22.04 환경에서 실습을 진행했습니다. 컨테이너 왜 쓸까? 다양한 서버 환경. 서버의 사양, OS 종류, 설치 환경 운영 비용 증가. 애플리케이션이 동작하는 환경 별로 대응이 어려움 서버 환경에 구애 받지 않을 수 있을까? 앱 전용 환경 만들기 패키징 격리 자원 할당 애플리케이션의 전용 환경을 제공합니다. 컨테이너의 사용 요건 리눅스 기술 런타임(컨테이너 관리 도구) 쿠버네티스 실습 환경 구축 root 사용자로 /tmp 디렉토리 밑에서 실습을 진행합니다. sudo -Es cd /tmp # 필요 패키지 설치 apt-get update \ && apt-get -y install gcc \ && a..

레플리카셋(Replica Set): 일정 개수의 포드를 유지하는 컨트롤러 레플리카셋을 사용하는 이유 쿠버네티스의 기본 단위인 포드는 여러 개의 컨테이너를 추상화해 하나의 애플리케이션으로 동작하도록 만드는 컨테이너 묶음이다. 실제로 외부 사용자의 요청을 처리해야 하는 마이크로 서비스 구조의 포드라면 스웜 모드처럼 여러 개의 동일한 컨테이너를 생성한 뒤 외부 요청이 각 컨테이너에 적절히 분배될 수 있어야 한다. 쿠버네티스에서는 기본 단위가 포드이기 때문에 동일한 여러 개의 포드를 생성해 외부 요청을 각 포드에 분배하는 방식을 사용해야 한다. apiVersion: v1 kind: Pod metadata: name: my-nginx-pod-a spec: containers: - name: my-nginx-con..

쿠버네티스를 시작하기 전에 도커 스웜 모드와 비교해서 쿠버네티스만이 가지는 고유한 특징들을 살펴보자. 모든 리소스는 오브젝트 형태로 관리된다. 도커 스웜 모드에서 컨테이너의 묶음을 표현하기 위해 서비스라는 것을 사용했는데 이것도 컨테이너 리소스의 집합을 정의한 것이기 때문에 일종의 오브젝트라고 볼 수 있다. 그러나 쿠버네티스는 이러한 개념을 더욱 폭넓고 세밀한 단위로 사용한다. 예를 들어 쿠버네티스에서는 컨테이너의 집합(Pods), 컨테이너의 집합을 관리하는 컨트롤러(Replica Set), 심지어 사용자(Service Account), 노드(Node)까지도 하나의 오브젝트로 사용할 수 있다. 쿠버네티스에서 사용할 수 있는 오브젝트는 kubectl api-resources 명령어를 사용해 확인할 수 있다..

가장 기초가 되는 도커 컨테이너를 다루기 위해 도커 엔진을 공부했고, 여러 대의 도커 엔진을 효율적으로 관리하기 위해 도커 스윔의 개념과 사용 방법을 다뤘다. 그리고 여러 종류의 컨테이너를 YAML 파일로 선언적으로 정의해 생성할 수 있는 도커 컴포즈의 사용 방법 또한 알아봤다. 이러한 프로젝트들의 개념을 한군데로 모아 사용할 수 있는 더욱 훌륭한 프로젝트가 바로 쿠버네티스다. 그리스어로 조타수라는 뜻의 쿠버네티스는 오늘날 사실상 표준으로 사용되고 있는 컨테이너 오케스트레이션 도구이다. 쿠버네티스는 도커 스웜 모드처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어 준다는 점은 같지만, 세부적인 기능을 더욱 폭넓게 제공하고 있다. 쿠버네티스의 장점 서버 자원 클러스터링, 마이크로서비스 구조의 컨테이너 ..

도커 데몬 도커의 구조 $ which docker $ ps aux | grep docker 컨테이너나 이미지를 다루는 명령어는 /usr/bin/docker/에서 실행되지만 도커 엔진의 프로세스는 /usr/bin/dockerd 파일로 실행된다. 이는 docker 명령어가 실제 도커 엔진이 아닌 클라이언트로서의 도커이기 때문이다. 도커의 구조는 크게 두 가지로 나뉜다. 하나는 클라이언트로서의 도커이고, 다른 하나는 서버로서의 도커이다. 실제로 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체는 도커 서버이고, 이는 dockerd 프로세스로서 동작한다. 도커 엔진은 외부에서 API 입력을 받아 도커 엔진의 기능을 수행하는데, 도커 프로세스가 실행되어 서버로서 입력을 받을 준비가 된 상태를 도커 데몬이라고 이..

도커 컨테이너 다루기 컨테이너를 외부에 노출 컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당 받는다. 기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당한다. 아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근할 수 있다. 외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0의 IP와 포트를 호스트의 IP와 포트에 바인딩해야 한다. 컨테이너에 아파치 웹서버를 설치하고 외부에 노출해보자. $ docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04 -p 옵션은 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 설정한다. 호스트포트:컨테이너포트 형식으로 쓰면된다. $ ..