컨테이너
컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
도커
Docker(도커)는 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼. 내부에서 컨테이너 기술을 사용하고 있는 것이 특징
도커는 인프라 환경을 컨테이너로 관리한다. 애플리케이션의 실행에 필요한 모든 파일 및 디렉토리들을 컨테이너로서 모아버린다. 컨터이너의 바탕이 되는 Docker 이미지를 Docker Hub와 같은 리포지토리에서 공유한다.
도커의 특징 - 확장성/이식성
- 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음
- 특정 회사나 서비스에 종속적이지 않음
- 쉽게 개발 서버를 만들 수 있고 테스트 서버 생성도 간편함
도커의 특징 - 표준성
- 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐
도커의 특징 - 이미지
- 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요
- Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
- 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옴
도커의 특징 - 환경변수
- 설정은 보통 환경변수로 제어함
- MYSQL_PASS = password와 같이 컨테이너를 띄울 떄 환경변수를 같이 지정
- 하나의 이미지로 환경변수에 따라 동적으로 설정파일 생성 가능
도커의 특징 - 자원관리
- 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
- 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요
- 세션이나 캐시를 memcashed나 redis와 같은 외부로 분리
스케줄링
- 컨테이너를 적당한 서버에 배포해 주는 작업
- 여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포
- 컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중이던 컨테이너를 다른 서버에 띄워줌
클러스터링
- 여러 개의 서버를 하나의 서버처럼 사용
- 여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신
서비스 디스커버리
- 서비스를 찾아주는 기능
- 클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고 다른 서버로 이동할 수도 있음 따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하고 컨테이너가 생성되고 중지될 때 어딘가에 IP와 Port같은 정보를 업데이트해줘야 함
- 키-벨류 스토리지에 정보를 저장할 수도 있고 내부 DNS 서버를 이용
도커 컨테이너 명령어
docker run
도커 이미지를 사용하여 컨테이너를 만드는 동시에 컨테이너를 실행한다.
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
-d | 컨테이너를 백그라운드로 실행하며, 실행할 때 container Id를 출력한다. |
-h | 호스트 이름을 설정한다. |
-p | 컨테이너 내부 포트와 외부 포트를 매핑하여 포트 포워딩을 한다. |
-v | 호스트와 컨테이너의 디렉토리를 연결 |
-e | 환경 변수를 설정한다. |
--name | 컨테이너 이름을 설정한다. |
--restart | 컨테이너가 있으면 재시작한다. |
--rm | 컨테이너를 종료한 후 자동으로 컨테이너를 삭제한다. |
-it | -i 와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
--network | 네트워크 연결 |
docker ps [OPTIONS]
실행 중인 컨테이너 리스트를 출력한다.
-a 옵션을 추가하면 종료 상태의 컨테이너 리스트까지 출력한다.
docker stop [CONTAINER ID or NAME]
실행 중인 컨테이너를 종료 상태로 만든다.
docker start [CONTAINER ID or NAME]
종료 상태인 컨테이너를 실행 상태로 만든다.
docker kill [CONTAINER ID or NAME]
컨테이너를 강제 종료한다.
docker rm [CONTAINER ID or NAME]
컨테이너를 지운다.
docker exec -it [CONTAINER ID or NAME] bash
실행 중인 도커 컨테이너에 접속한다.
도커 이미지 관련 명령어
docker images
도커 호스트 머신에 있는 도커 이미지 리스트들을 확인한다.
docker rmi [option] IMAGE [image ID]
로컬 호스트 머신에 있는 도커 이미지를 삭제한다. 삭제할 도커 이미지 ID를 인자로 입력하고 만약 삭제하려는 이미지가 다른 이미지에 사용되고 있다면 삭제할 수 없다.
-force 옵션으로 강제로 삭제 가능
docker pull [image name]:[tag name]
도커 이미지 저장소에서 이미지 이름, 태그와 매칭 되는 도커 이미지를 로컬 호스트 머신으로 복사한다.
만약 tag name을 생략하면 자동으로 최신(latest) 태그로 복사한다.
'Server' 카테고리의 다른 글
[Spring] 마이크로서비스 아키텍쳐 (Micro Service Architecture, MSA) (1) | 2023.02.28 |
---|---|
Docker 컨테이너로 젠킨스 설치하기 (0) | 2023.02.03 |