docker

이번엔 MySQL 컨테이너(DB 컨테이너)와 PHP 컨테이너(AP 컨테이너)를 컨테이너 네트워크로 연결해 보겠다. 1. 컨테이너 네트워크 작성 2. MySQL 서버 기동 -e 옵션으로 환경 변수 MYSQL_ROOT_PASSWORD를 저장했다. 이러한 환경 변수를 사용해 컨테이너를 개발하면 이미지의 재사용성이 좋아진다. 3. 애플리케이션 컨테이너 개발 파일 구조는 다음과 같다 php-example Dockerfile php index.php php-example 디렉터리에서 컨테이너 이미지를 빌드한다. 정상적으로 빌드가 되었다면 docker images로 생성된 이미지를 확인할 수 있다. 4. 컨테이너 실행 docker run [옵션] 리포지터리명[:태그]로 빌드한 이미지를 컨테이너로 실행할 수 있다. h..
컨테이너간 통신 및 연결 실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다. 호스트 내에서 접근 가능한 전용 네트워크를 통해 애플리케이션과 데이터베이스를 연결하는 것이 가능하다. 또한, 컨테이너를 호스트의 외부 네트워크에 공개하는 것도 가능하다. 컨테이너 간의 연결을 이용하는 애플리케이션 이미지가 도커 허브에는 다수 등록되어 있다. 이들 애플리케이션은 컨테이너를 기동하는 것만으로 사용할 수 있다. 애플리케이션 설명 연동하는 컨테이너 Rocket.Chat 슬랙(Slack)과 비슷한 채팅 애플리케이션 MongoDB 컨테이너와 연동 owncloud BOX나 DropBox 같은 파일 공유 애플리케이션 MySQL이나 MariaDB 등 컨테이너와 연동 Redmine 프로젝트 관리 애플리케이션 ..
Dockerfile 작성 모범 사례 컨테이너의 설계 철학에 맞게 이미지를 만들어야 생산성이 높아지고 운영 중 겪게 될 문제를 사전에 예방할 수 있다. 종래의 오케스트레이션 도구인 Ansible이나 Chef 등은 서버들의 목표로 하는 상태로 만든다는 사고 방식으로 동작한다. 그리고 그 동작 방식은 멱등성(Idempotence)에 기초하여 몇 번을 배포해도 한결같이 목표로 하는 상태로 만들어 준다. 이들 도구들은 서버의 기동이나 설정에 오랜시간 걸리는 것을 고려하여 만들어졌다. 도커의 경우는 Dockerfile에 운영체제와 의존 패키지를 기술하여 이미지를 만들면 굉장히 짧은 시간에 컨테이너를 기동/교체/종료할 수 있다. 그리고 이미지에는 운영체제와 패키지가 이미 모두 포함되어 있으므로 배포 시 추가적인 시간..
이미지 빌드의 개요 위 이미지는 컨테이너의 이미지를 만드는 과정을 표현한다. 도커 이미지를 만들기 위해서는 명령어 docker build [옵션] 경로|URL|-을 사용하면 된다. 베이스 이미지 선택 이미지를 만들 때 바탕이 되는 이미지를 베이스 이미지라고 한다. 베이스 이미지에는 리눅스의 공유 라이브러리, 동적 링크나 로드에 필요한 기초적인 파일들이 포함되어, 이를 기반으로 사용자의 이미지를 만들게 된다. 도커 허브에는 다양한 미들웨어나 프로그래밍 언어가 포함된 이미지가 등록되어 있다. 분류 공식 이미지 리눅스 배포판 alpine, busybox, ubuntu, centos, debian, fedora, amazonlinux, opensuse, oraclelinux 프로그래밍 언어 node, golan..
여러 터미널에서 조작하기 2개 이상의 터미널에서 하나의 컨테이너에 접속하여 작업을 수행하는 것도 가능하다. 이처럼 같은 컨테이너에 여러 터미널이 접속하여 작업하는 것이 가능하다. 인증 과정도 없기 때문에 가상 서버보다 더 편리하게 사용할 수 있다. 이때 보안을 위해 호스트 외부에서 접속은 막혀 있다. 또한 컨테이너 내에는 외부에서 로그인하기 위한 sshd를 기동시키지 말아야 한다는 의견도 있다. 로그인을 관리하지 않는 컨테이너 리눅스 서버에서는 w 명령어로 동시에 로그인한 다른 유저의 정보를 얻을 수 있다. 하지만 아무것도 출력되지 않는다. 이유는 컨테이너에 로그인을 통한 유저 인증 기능도 없고, 유저 자체를 관리하지 않기 때문이다. 리눅스는 기본적으로 멀티 유저용으로 개발되었지만 컨테이너는 싱글 유저용..
대화형 모드로 컨테이너 기동 및 정지 일반적인 리눅스 서버에서는 유저가 로그인에 성공하면 이어서 셸이 기동된다. 그러면 터미널을 통해 셸에 명령어를 전달하고 수행 결과가 터미널에 출력된다. 도커에서도 컨테이너에서 셸을 실행할 수 있다. 대화형 모드로 컨테이너 기동(docker run -it) 대화형 모드로 컨테이너를 기동하기 위해서는 docker run -it 리포지터리명:[태그] 셸 과 같이 명령어를 실행해야 한다. 여기서 옵션 -i는 키보드의 입력을 표준 입력(STDIN)으로 셸에 전달하고 옵션 -t는 유서 터미널 디바이스(pts)와 셸을 연결한다. 옵션 --name은 컨테이너의 이름을 지정할 수 있다. 이로써 셸은 터미널과 접속되어있다고 인식하여 셸의 프롬프트를 출력하게 된다. 우분투나 CentOS..
컨테이너의 생명 주기 컨테이너는 세 가지 상태를 가진다. 이미지 : 컨테이너의 모형이 되는 것으로 실행되기 전의 상태 실행 : 컨테이너 위에서 프로세스가 실행 중인 상태 정지 : 프로세스의 종료 코드, 로그가 보존된 채 정지한 상태 (1) docker pull(이미지 다운로드) 명령어 'docker pull 리포지터리명[:태그]'를 실행하면 원격의 리포지터리로부터 이미지를 다운로드 한다. (2) docker run(컨테이너 실행) 명령어 'docker run [옵션] 리포지터리명:태크 [커맨드] [인자]'는 지정한 이미지를 모형으로 컨테이너를 기동한다. 만약 로컬에 없으면 원격의 리포지터리에서 이미지를 다운로드하고 컨테이너를 실행한다. 기본값으로 설정된 원격 리포지터리는 도커 허드(Docker Hub)이..
컨테이너 환경 표시 도커 클라이언트와 서버 버전 표시 docker version 구체적인 환경 정보 표시 docker info 컨테이너의 3대 기능 기본이 되는 기능을 뽑자면 아래 3가지 기능이다. 1. 컨테이너 이미지 빌드 현 디렉터리에 있는 Dockerfile을 바탕으로 이미지를 빌드 docker build -t 리포지터리:태그 . docker image build -t 리포지터리:태그 . 로컬 이미지 목록 docker images docker image ls 로컬 이미지 삭제 docker rmi 이미지 docker image rm 이미지 로컬 이미지 일괄 삭제 docker rmi -f 'docker images -aq' docker image prune -a 2. 이미지의 이동과 공유 원격 리포지터..
서비스란? 쿠버네티스의 서비스는 클라이언트의 요청을 파드에 전달하는 역활을 담당한다. 이러한 서비스가 필요한 이유는 파드의 IP 주소가 기동할 때마다 바뀌기 때문이다. 그래서 파드에 접속해야하는 클라이언트는 서비스가 가지는 대표 IP를 사용해서 접속해야 한다. 서비스는 로드밸런서의 역활을 가지며, 클라이언트의 요청을 받기 위한 대표 IP 주소를 획득한다. 서비스의 이름은 내부 DNS에 등록되기 때문에 클라이언트는 서비스의 이름만으로 서비스의 IP 주소를 획득할 수 있다. 서비스는 실렉터(selector)에 지정된 라벨과 일치하는 파드 중 하나에게 요청을 전달한다. 더보기 파드는 기동될 때 라벨이나 IP 주소를 포함한 자신의 오브젝트 정보를 마스터 노드의 etcd에 등록한다. 그래서 서비스의 전송처를 결정..
쿠버네티스의 아키텍처 및 구성요소 쿠버네티스는 마스터와 노드로 구성된다. 쿠버네티스 클러스터를 구성하는 코어 프로세스(컨테이너) kubectl K8s 클러스터를 조작하기 위한 도구로 가장 비번하게 이용되는 커맨드 라인 인터페이스다. kube-apiserver kubectl 등의 API 클라이언트로부터 오는 REST 요청을 검증하고, API 오브젝트를 구성하고 상태를 보고한다. kube-scheduler 쿠버네티스의 기본 스케줄러이며, 새로 생성된 모든 파드에 대해 실행할 최적의 노드를 선택한다. 스케줄러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 높은 노드를 선택한다. kube-controller-manager 컨트롤러를 구동하는 마스터상의 컴포넌트 cloud-controller-man..
beekei
'docker' 태그의 글 목록 (4 Page)