본문 바로가기

Docker

도커 컴포즈 도커 컴포즈 여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 한다. 매번 run 명령어에 옵션을 설정해 CLI로 컨테이너를 생성하기보다는 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있다면 더욱 편리하다. 이를 위해 도커 컴포즈는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다. 도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다. 도커 컴포즈 설치 도커 컴포즈는 따로 설치를 해줘야 한다. 아래 명령어로 curl 을 통해 설치를 하고 chmod +x로 실행권한을 부여한다. sudo .. 더보기
도커 스웜 도커 스웜 도커 스웜은 여러 대의 도커 서버를 하나의 클러스터로 만들어 컨테이너를 생성하는 여러 기능을 제공한다. 스웜 모드는 마이크로서비스 아키텍처 애플리케이션을 컨테이너로 구축할 수 있도록 도와줄 뿐만 아니라 서비스 장애에 대비한 고가용성과 부하 분산을 위한 로드밸런싱 기능 또한 제공 하고 있다. 스웜 모드는 매니저 노드와 워커 노드로 구성돼 있다. 워커 노드는 실제로 컨테이너가 생성되고 관리되는 도커 서버이고 매니저 노드는 워커 노드를 관리하기 위한 도커 서버이다. 하지만 매니저 노드도 워커 노드의 역할을 수행할 수 있다. 도커 스웜 모드 클러스터 구축 docker swarm init 명령어를 입력해 매니저 역할을 할 서버에서 스웜 클러스트를 시작한다. docker swarm init --adver.. 더보기
도커 데몬 모니터링 도커 데몬 모니터링 도커 데몬에서 어떤일이 일어나고 있는지 가장 확실하고 정확하게 알아내는 방법은 도커 데몬을 디버그 옵션으로 실행하는 것이다. 디버그 모드는 도커 데몬을 실행할 때 -D 옵션을 추가해서 사용할 수 있다. 하지만 원하지 않는 정보까지 많이 출력되며 도커 데몬을 포그라운드 상태로 실행해야 하는 단점이 있음으로 다른 데몬 모니터링 방법을 사용하는 것이 권장 된다. events, stats, system df events events는 도커 데몬에 어떤 일이 일어나고 있는지를 실시간 스트림 로그로 보여준다. docker events docke system events 도커 데몬에서 실행되는 명령어의 결과를 로그로 출력하는데 도커 클라이언트에서 입력하는 모든 명령어가 출력되는 것은 아니다. at.. 더보기
도커 파일 이미지 생성하는 방법 아무것도 존재하지 않는 이미지(우분투, CentOS 등)로 컨테이너를 생성 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인 컨테이너를 이미지로 커밋(commit) 도커는 이러한 일련의 과정을 손쉽게 기록하고 수행할 수 있는 빌드 명령어를 제공하며 이러한 작업을 기록한 파일의 이름을 DockerFile이라 한다. 도커 파일 도커 파일 예시 # vi Dokerfile FROM ubuntu:14.04 MAINTAINER me LABEL "purpose"="practice" RUN apt-get update RUN apt-get install apache2 -y ADD test.html /var/www/html WORKDIR /var/www/html RUN .. 더보기
도커 이미지 관리 도커 이미지 도커 이미지는 기본적으로 도커 허브(Docker Hub)라는 곳에 있다. 도커 허브에서 이미지 찾는 법은 docker search 명령어를 사용한다. ### 도커 허브에서 우분투 이미지 찾는 법 docker search ubuntu 도커 이미지 생성 도커 이미지는 컨테이너에서 바로 생성할 수 있다. docker run -it --name commit_test ubuntu:14.04 echo test_first! >> first 위 명령어로 first라는 파일이 있는 컨테이너를 생성한다. 기본 ubuntu:14.04 이미지에서 컨테이너를 실행해 first라는 파일을 생성한다. 변경사항이 있는 컨테이너를 docker commit 명령어로 컨테이너를 이미지로 만든다. docker commit [O.. 더보기
컨테이너 자원 할당 제한 도커 컨테이너 자원 할당 컨테이너를 생성하는 명령어에서 컨테이너의 자원 할당량을 조정하도록 옵션을 입력할 수 있다. 이미 실행 중인 컨테이너의 자원 제한을 변경하려면 docker update 명령어를 사용한다. ### 자원 제한을 변경하려면 update명령어 사용 docker update --cpuset-cpus=1 centos ubuntu 컨테이너 메모리 제한 docker run -d --memory="1g" --name memory_1g nginx 컨테이너가 사용하는 메모리를 위 명령어 같이 제한할 수 있다. 최소 메모리는 4MB이다. 컨테이너 내에서 동작하는 프로세스가 컨테이너에 할당된 메모리를 초과하면 컨테이너는 자동으로 종료된다. Swap 메모리는 메모리의 2배로 설정되지만 별도로 지정할 수 있.. 더보기
도커 네트워크 도커 네트워크 구조 도커는 컨테이너에 내부 IP를 순차적으로 할당하며 컨테이너를 재시작할 때마다 변경될 수 있다. 이 내부 IP는 호스트 즉 내부 망에서만 쓸 수 있음으로 외부와 통신하려면 따로 연결을 해줘야 한다. 이 과정은 호스트에 veth...라는 네트워크 인터페이스를 생성함으로써 이뤄진다. 도커는 생성된 컨테이너에 외부와의 네트워크를 제공하기 위해 가상 네트워크 인터페이스를 호스트에 생성하는데 이 인터페이스가 veth로 시작된다. 컨테이너의 eth0 인터페이스는 호스트의 veth ... 라는 인터페이스와 연결됐으면 veth 인터페이스는 docker0 브리지와 바인딩돼 외부와 통신할 수 있다. 컨테이너를 생성하면 기본적으로 docker0 브리지를 통해 외부와 통신 할 수 있지만 여러 네트워크 드라이.. 더보기
도커 볼륨 도커 볼륨이란 도커 컨테이너를 삭제하면 컨테이너 계층에 저장돼있는 모든 정보도 같이 사라진다. 한 번 삭제가 되면 데이터를 복구할 수 없기 때문에 이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 수 있는 방법이 있는데 그것이 바로 도커 볼륨이다. 호스트 볼륨 공유 볼륨을 활용하는 첫 번째 방법은 호스트의 볼륨을 공유하는 것이다. 호스트 볼륨을 공유하려면 run 명령어에 -v 옵션을 추가하는 것이다. docker run -d --name my_mysql -v /home/my_dir:/var/lib/mysql mysql:5.7 MySQL 데이터베이스 애플리케이션을 운영한다고 가정한다면 데이터베이스 내부의 데이터는 손실이 나면 안 되기 때문에 호스트의 디렉터리로 공유하는 것이 안정적이다. 데이터.. 더보기