가상화
아파치의 경우에도 하나의 서버가, 다른 도메인으로 들어오면 여러 사이트 제공해줄 수 있게 됐어.
하드웨어 성능이 증가함에 따라 여러 서비스를 제공해줄 수 있는 여력이 생겼어.
서버 가상화
서버를 가상 머신의 형태로 사용할 수 있도록 하는 가상화 기술
CPU, RAM, HDD 등의 자원을 가상머신들이 나눠 사용할 수 있음
네트워크 가상화
물리적인 네트워크를 가상의 논리적인 네트워크로 구성하는 가상화 기술
물리적으로 존재하던 네트워크 장비는 가상 머신의 형태로 존재함
스토리지 가상화
여러 디스크 장치를 하나의 논리적인 디스크로 사용할 수 있도록 하는 가상화 기술
컨테이너 가상화
하나의 호스트 OS를 논리적으로 구획하여 서로 독립적인 애플리케이션을 실행할 수 있는 가상화 기술
-----
컨테이너 기술
Linux LXC
FreeBSD Jail
프로세스 구획
네트워크 구획
파일시스템 구획
Solaris Containers
Zone
리소스 관리
cgroups
프로세스, 쓰레드를 그룹으로 묶어서 관리하는 기능과 시스템의 리소스(CPU, RAM, Disk)에 대해 제한하는 기술
Namespace
각각의 오브젝트를 격리하기 위한 리눅스 커널 기술 (운영체제를 여러 개의 구역으로 나눠서 사용..?)
PID Namespace : 독립적인 PID 사용할 수 있는 Namespace
Network Namespace : 독립적인 네트워크를 사용할 수 있는 Namepspace
UID Namespace : 독립적인 UID를 사용할 수 있는 Namespace
Mount Namespace : Mount Point를 독립적으로 사용할 수 있는 Namespace
UTS Namespace : 독립적인 호스트네임을 사용할 수 있는 Namespace
IPC Namespace : 독립적인 IPC를 사용할 수 있는 Namespace
Union Filesystem
하나의 파일시스템이 아닌 각각 독립적인 여러개의 파일시스템 레이어가 묶여서 하나의 파일시스템으로 이용할 수 있도록 하는 파일시스템 기술
OCI(Open Container Initiative)
컨테이너의 표준 사양을 제정하기 위해 2015년에 만들어진 단체
Docker, CoreOS, Google, Red Hat AWS, MS 등이 주요 멤버로 참여
-----
Docker
2013년 Docker 사에서 Go 언어 기반으로 개발한 오픈소스 컨테이너 기술
기존의 Linux Container 기술보다 좀더 사용성이 개선되어 널리 사용되고 있음
개발 환경, 테스트 환경, 서비스 환경을 통합적으로 관리할 수 있음
도커 주요 특징
- 서버를 코드 형태로 정의
- 이식성
- 다양한 벤더 환경에서의 상호 운용성
도커 주요 구성 요소
컨테이너
컨테이너 이미지가 실행된 형태로 상태를 가지지며 애플리케이션 실행에 필요한 파일을 포함하는 단위
이미지
애플리케이션이 포함된 컨테이너를 생성하고 실행하기 위한 파일을 포함하는 데이터 세트 단위
저장소(Registry)
컨테이너를 생성하기 위한 이미지를 저장하는 저장공간
대표저인 저장소는 "Docker Hub"
도커 호스트
- 도커 컨테이너가 실행될 수 있도록 컴퓨팅 리소스를 제공하는 컴퓨터
도커 클라이언트
- 도커 실행 명령어
----
도커 엔진 정보 확인
$ docker info
도커 버전
$ docker version
도커 이미지 목록 확인
$ docker image ls
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/apache2 latest 603872f94008 6 days ago 180MB
centos 7 eeb6ee3f44bd 5 months ago 204MB
도커 컨테이너 이미지 검색
$ docker search IMAGE
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
python Python is an interpreted, interactive, objec… 0 [OK]
mirantis/python-operations-api https://mirantis.jira.com/browse/IT-40189 0 [OK]
이미지 다운로드
$ docker image pull IMG_REPO:TAG
$ docker pull IMG_REPO:TAG
컨테이너 실행 (새로운 컨테이너 시작)
$ docker container run --name CONTAINER IMG_REPO:TAG
$ docker run --name CONTAINER IMG_REPO:TAG
컨테이너 실행(포그라운드로 제어 터미널 포함)
$ docker container run -it --name CONTAINER IMG_REPO:TAG
$ docker run -it --name CONTAINER IMG_REPO:TAG
컨테이너 실행(백그라운드)
$ docker container run -d --name CONTAINER IMG_REPO:TAG
$ docker run -d --name CONTAINER IMG_REPO:TAG
debian os를 background로 실행시켰는데, 켜자마자 꺼졌어. 왜??
기본적으로 운영체제 이미지들은 쉘을 갖고 있는데, 이 쉘은 제어 터미널을 갖고 있지 않으면 꺼지게 되어있어.
즉, 컨테이너의 메인 프로세스가 종료가 되어버리니까 컨테이너가 종료되는거야.
(오랜 의문 해결!!!)
그러면 어떻게 해야 안꺼져?
docker container run -dt --name debian_3 debian 이렇게 하면 안꺼져.
만약에 docker container run -di --name debian_5 debian 이렇게 하면?
얘도 켜지긴 하네?
그래도 강사님이 알려준 docker container run -dt --name debianx debian 이걸로 하자.
docker container run -i --name debian_6 debian
-> 얘는 [devops@docker ~]$ 이런게 안떠. 대신 명령어 입력했을 때 출력은 돼.
docker container run -t --name debian_7 debian
이거는 [devops@docker ~]$ 뜨기는 하는데, 명령어 입력을 못해.
Q)그러면 background로 실행시킨 컨테이너에는 어떻게 들어갈까?
docker exec -it debian_8 /bin/bash
이렇게 들어감. debian_8이라는 컨테이너에 /bin/bash 프로그램을 실행시키는데, 명령어 입력 가능하게 하고 [devops@docker ~]$ 뜨게 하는거임.
$$ | echo $$ | 사용하고 있는 Shell의 PID값을 출력한다. 현재 bash 쉘의 프로세스 ID |
실행중인 컨테이너 목록 확인
$ docker container ls
$ docker ps
종료된 컨테이너 포함 목록 확인
$ docker container ls -a
$ docker ps -a
실행중인 컨테이너에 attach (background에 돌아가고 있는 컨테이너에 진입할 수 있음.)
주의) attach로 들어가면 입력을 제대로 못받음. 화면에 나오는 출력은 보여주는데...
shell에서 작업을 할 때는 attach는 쓰는게 아니다.
실시간으로 로그가 화면에 뜨는 상황일 때, -it로 foreground를 하면 제어 터미널을 차지하니까, attach로 그냥 출력 메시지만 보는거야.
$ docker container attach CONTAINER -> 새롭게 추가된 명령어가 많네.
$ docker attach CONTAINER
실행중인 컨테이너에 추가 프로세스 실행
$ docker container exec CONTAINER PROCESS
$ docker exec CONTAINER PROCESS
실행중인 컨테이너에 쉘 실행
$ docker container exec -it CONTAINER SHELL
$ docker exec -it CONTAINER SHELL
실행중인 컨테이너 종료
$ docker container stop CONTAINER
$ docker stop CONTAINER
실행중인 컨테이너 강제 종료
$ docker container kill CONTAINER
$ docker kill CONTAINER
컨테이너 삭제
$ docker container rm CONTAINER
$ docker rm CONTAINER
컨테이너 로그 확인
$ docker container logs CONTAINER
$ docker logs CONTAINER
도커 컨테이너 상태 확인(CPU, RAM, Network)
$ docker container stats CONTAINER
$ docker stats CONTAINER
도커 컨테이너 일시 정지 (컨테이너 작업을 잠시 중지해야할 필요가 있을 때. 예를 들어, 이 컨테이너가 리소스를 많이 잡아먹어서 이거 잠깐 멈추고 다른거 한다음에 다시 켜고 싶을 때)
$ docker container pause CONTAINER
도커 컨테이너 일시 정지 해제
$ docker container unpause CONTAINER
도커 컨테이너에 파일 복사
$ docker container cp DOCKER_HOST_FILE_PATH CONTAINER:/CONTAINER/FILE/PATH
도커 컨테이너 파일을 도커 호스트로 복사
$ docker container cp CONTAINER:/CONTAINER/FILE/PATH DOCKER_HOST_FILE_PATH
'System Engineering > Kubernetes' 카테고리의 다른 글
Docker (Build, Ship, Run)? (0) | 2022.03.18 |
---|---|
docker 3/5 (0) | 2022.03.17 |
실행중인 모든 컨테이너 한 번에 종료 (0) | 2022.03.16 |
docker exit code 의미 (0) | 2022.03.16 |
docker 1/5 (0) | 2022.03.16 |
최근댓글