도커

save나 export와 같은 방법으로 이미지를 단일 파일로 추출해 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 많다면 이미지를 파일로 배포하기 어렵다. 또한 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적이다. 이를 해결하는 방법은 도커 허브(Docker Hub)를 사용하거나 도커 사설 레지스트리(Docker Private Registry)를 사용하는 방법 등 여러 가지가 있다. 레지스트리 컨테이너 실행 도커 사설 레지스트리를 사용하면 개인 서버에 저장소를 생성할 수 있다. 이 레지스트리는 컨테이너로서 구현되므로 이에 해당하는 도커 이미지가 존재한다. $ docker run -d --name myregistry -p 5000:5000 --restart=al..
save나 export와 같은 방법으로 이미지를 단일 파일로 추출해 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 많다면 이미지를 파일로 배포하기 어렵다. 또한 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적이다. 이를 해결하는 방법은 도커 허브(Docker Hub)를 사용하거나 도커 사설 레지스트리(Docker Private Registry)를 사용하는 방법 등 여러 가지가 있다. 도커 허브 사이트에서 이미지를 검색할 수 있고, 해당 이미지에 대한 정보도 확인이 가능하다. 도커 허브 저장소 생성 도커 허브에 이미지를 올리기 위해 로그인 후 저장소를 생성한다. 기본적으로 비공개(Private) 저장소가 아니라면 모든 사용자들이 읽기 권한을 가지게 된다. 비공개..
모든 컨테이너는 이미지를 기반으로 생성되므로 이미지를 다루는 방법은 도커 관리에서 빼놓을 수 없는 부분이다. 이미지의 이름을 구성하는 저장소, 이미지 이름, 태그를 잘 관리하는 것뿐만 아니라 이미지가 어떻게 생성되고 삭제되는지, 이미지 구조는 어떻게 돼 있는지 등을 아는 것 또한 중요하다. 도커 허브(Docker Hub) 도커 허브(Docker Hub)는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들과 이미지를 쉽게 공유할 수 있다. 대부분의 이미지는 도커 허브에서 공식적으로 제공하거나 다른 사람들이 도커 허브에 이미 올려놓은 경우가 대부분이라서 애플리케이션 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있는데..
도커 네트워크 구조 도커는 컨테이너에 내부 IP를 순차적으로 할당하는데, 이 IP는 컨테이너를 재시작할 때마다 변경될 수 있다. 이 내부 IP는 도커가 설치된 호스트, 즉 내부 망에서만 쓸 수 있는 IP이므로 외부와 연결되어야 한다. 도커는 각 컨테이너에 외부와의 네트워크를 제공하기 위해 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성하는데 이름이 veth로 시작한다. veth 인터페이스는 사용자가 직접 생성할 필요는 없으며 컨테이너가 생설될 때 도커 엔진이 자동으로 생성한다. 도커가 설치된 호스트에서 ifconfig나 ip addr과 같은 명령어로 네트워크 인터페이스를 확인하면 실행 중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된 것을 확인할 수 있다. $ ifconfig docker..
만약 도커로 데이터베이스 컨테이너를 실행해 애플리케이션을 구동한다 했을 때 해당 데이터베이스 컨테이너가 삭제된다면 데이터도 삭제가 되고 복구할 수 없게 된다. 이런 경우에 데이터를 유지를 위한 몇 가지 방법이 있는데 그중 가장 활용하기 쉬운 방법이 볼륨 활용이다. 볼륨을 활용하는 방법은 여러 가지가 있다. 1. 호스트 볼륨 공유 호스트 볼륨 공유는 호스트화 컨테이너의 볼륨을 공유하는 것이다. 만약 MySQL 컨테이너를 사용해 애플리케이션을 구동한다 했을 때 호스트와 MySQL에서 데이터를 저장하는 볼륨을 공유할 수 있다. $ docker run -d \ --name mysql \ -e MYSQL_DATABASE=sample \ -e MYSQL_ROOT_PASSWORD=password \ -v /home/..
여러 기술들을 테스트를 하기 위해 Docker로 Centos나 Ubuntu를 설치하는 상황이 계속되다보니 항상 그때마다 찾아보기 귀찮아서 정리를 해보려고 한다. 1. Centos 이미지 pull 및 컨테이너를 실행 $ docker run --privileged -d --name centos centos:7 /sbin/init 버전과 컨테이너 명은 원하는 버전으로 바꾸면 된다. $ docker ps 2. centos 컨테이너 접속 $ docker exec -it centos bash 3. yum 업데이트 및 필요 Util 설치 $ yum update $ yum install yum-utils 4. Docker repository를 시스템에 등록 $ yum-config-manager --add-repo ht..
윈도우를 사용한다면 전 블로그글을 확인하고 실행 환경을 구축해야한다. 파드 실행 kubectl run 명령어를 입력하고 결과가 표시될 때까지의 흐름은 다음과 같으며 도커 명령어와 비슷하다. kubectl이 쿠버네티스에게 명령을 전달한다. 노드에 이미지가 없으면 원격 리포지터리(Docker Hub)에서 다운로드 한다. 노드의 containerd가 컨테이너를 실행한다. kubectl이 터미널에 메시지를 표시한다. 쿠버네티스의 특징 중 하나는 개인의 PC, 퍼플릭 클라우드, 온프레미스의 모든 환경에서 동인할 kubectl 명령어로 조작할 수 있다는 점이다. 따라서, 미니쿠베를 잘 익혀두면 5,000대 규모의 클러스터(버전 1.11 기준)도 다룰 수 있다. 파드는 쿠버네티스에서 컨테이너를 실행하는 최소 단위이다..
퍼시스턴스 볼륨 API 구현 예시 컨테이너를 지워도 데이터를 잃지 않기 위해서는 퍼시스턴트 볼륨을 사용해야 한다. 앞에 작성한 환경 변수 API 구현 예시에서 만든 my_daemon을 수정해서 퍼시스턴스 볼륨 API 예시를 구현해보자 외부 저장소를 마운트한 디렉터리에 데이터를 쓰도록 바꾸었다. 다시 이미지를 생성하고 컨테이너를 실행해보자 호스트상에 퍼시스턴트 볼륨으로 마운트할 디렉터리를 만든다. -v 호스트절대경로:컨테이너내경로로 볼륨의 path를 설정한다. 다른 터미널에서 컨테이너를 중지하고 다시 재기동 한다. COUNT가 이어서 출력되는것을 확인할 수 있다. 그럼 아예 컨테이너를 삭제 후 다시 컨테이너를 실행해보겠다. 삭제 후 컨테이너를 다시 생성해 시작해도 COUNT가 이어서 출력되는것을 확인 할 ..
환경 변수 API 구현 예시 이번에는 d5라고 하는 디렉터리를 만들고 Dockerfile과 my_daemon이라고 하는 2개 파일을 바탕으로 컨테이너를 개발할 것이다. FROM을 사용해 베이스 이미지로 apline을 지정했다. RUN에서는 apk add bash로 bash 셸을 추가했다. ADD로는 셸 스크립트 my_daemon을 루트 경로에 배치하고 CMD로 컨테이너가 기동할 떄 실행하게 했다. my_daemon은 컨테이너가 기동되면 실행되는 셸 스크립트다. 보통 자바나 파이썬으로 작성한 코드를 컨테이너로 만드는 경우가 많은데 이번에는 간단한 예를 위해 셸 스크립트를 사용했다. 환경 변수 INTERVAL이 없는 경우에는 3초 단위로 현재 시간과 카운트를 표준 출력(STDOUT)에 출력한다. 환경 변수 ..
컨테이너간 통신 및 연결 실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다. 호스트 내에서 접근 가능한 전용 네트워크를 통해 애플리케이션과 데이터베이스를 연결하는 것이 가능하다. 또한, 컨테이너를 호스트의 외부 네트워크에 공개하는 것도 가능하다. 컨테이너 간의 연결을 이용하는 애플리케이션 이미지가 도커 허브에는 다수 등록되어 있다. 이들 애플리케이션은 컨테이너를 기동하는 것만으로 사용할 수 있다. 애플리케이션 설명 연동하는 컨테이너 Rocket.Chat 슬랙(Slack)과 비슷한 채팅 애플리케이션 MongoDB 컨테이너와 연동 owncloud BOX나 DropBox 같은 파일 공유 애플리케이션 MySQL이나 MariaDB 등 컨테이너와 연동 Redmine 프로젝트 관리 애플리케이션 ..
beekei
'도커' 태그의 글 목록