Recent Posts
Recent Comments
Link
11-21 14:38
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

Docker 기본 본문

DEV&OPS/Linux & Cloud

Docker 기본

ALEPH.GEM 2024. 5. 8. 20:46

docker container

도커는 컨테이너를 이용해 application을 구동하는데, 보통 가상 머신과 비교를 많이 합니다.

가상머신은 호스트OS에서 게스트 OS를 설치하여 호스트로부터 완전히 분리된 가상화 환경을 구축할 수 있습니다. 
도커 컨테이너는 호스트OS에서 사용중인 프로세스를 격리시키고 어플리케이션 실행에 필요한 바이너리를 묶어서 가상화합니다. 

도커 컨테이너는 application과 이 application을 실행할 가상 컴퓨터가 같이 들어 있는 셈입니다. 

즉, 컨테이너에는 도커가 관리하는 독립적인 가상의 리소스(메모리,디스크,IP,등)들을 가지게 되는 것입니다.

컨테이너 안에서는 컨테이너 바깥의 환경에 접근할 수 없도록 고립 시켜서 관리하기 쉽게합니다. 

가상 머신은 각각 가상 OS상에서 application을 구동하므로 도커가 가상 머신과 비교하면 리소스 관리가 효율적임을 알 수 있습니다.

 

 

docker-compose

docker는 컨테이너 이미지를 만들고 실행하는 데 사용합니다.
컨테이너 이미지는 애플리케이션 실행에 필요한 모든 코드, 라이브러리 및 종속성을 포함합니다. 
Docker를 사용하여 컨테이너 이미지를 만들고, 실행하고, 연결하고, 관리할 수 있습니다.

docker-compose는 여러개 docker 컨테이너로 이루어진 서비스 정의하고 관리를 간단하게 해주는 기능입니다.
YAML(.yml) 파일을 사용하여 컨테이너를 구성하고, 각 컨테이너 간의 관계를 정의하고, 컨테이너들의 서비스를 시작, 정지, 삭제 할 수 있습니다. 

 

 

docker workflow

리눅스 사용자는 bash 쉘을, 윈도우 사용자는 파워 쉘을 통해 도커를 실행 할 수 있습니다.

컨테이너를 실행하려면 먼저 이미지가 있어야 합니다.

도커가 이미지를 내려 받는 것을 pull 이라고 합니다.

application을 빌드하고 컨테이너 이미지를 만들어 공유하고 사용자는 이 이미지를 받아서 application을 실행하게 되는 것입니다. 

 

도커의 빌드-공유-실행

  1. application을 컨테이너에서 실행할 수 있도록 패키징
  2. 다른 사람이 패키지를 사용할 수 있도록 공유
  3. 패키지를 내려받은 사람이 컨테이너를 통해 application을 실행

 

 

docker network

도커를 설치하면 호스트 컴퓨터와 실제 네트워크 사이에 도커가 끼어들어서 네트워크 트래픽을 모두 가로채서 그중 필요한 트래픽을 컨테이너에게 전달 할 수 있습니다.

컨테이너는 기본적으로 외부 환경에 노출되지 않습니다.

각 컨테이너는 고유의 IP주소를 갖지만 이 IP는 도커가 관리하는 도커 내부 가상 네트워크의 주소입니다.

도커가 호스트의 포트를 주시하다가 해당 포트로 들어오는 트래픽을 컨테이너의 포트로 전달해주는 것입니다. 

호스트 컴퓨터는 컨테이너와 네트워크 대역이 달라서 컨테이너의 IP에 접근 할 수 없는데, 컨테이너가 특정 포트를 공개(publish)해야만 트래픽을 전달 할 수 있게 되는 것입니다. 

 

 

기본 명령어

상태와 관계없이 모든 컨테이너 목록 출력

docker container ls --all

 

컨테이너 실행

docker container run 옵션들 컨테이너이미지
  • --detach : 이 옵션은 컨테이너를 백그라운드에서 실행시킵니다.
  • --publish : 컨테이너의 포트를 호스트 컴퓨터에 공개합니다. 예를 들어 --publish 8088:80 이라고 옵션을 주면 호스트 의 8088 포트가 컨테이너의 80포트로 포워딩 해줍니다.
  • --interactive : 이 옵션은 컨테이너에 접속한 상태가 됩니다.
  • --tty : 터미널 세션을 통해 컨테이너를 조작합니다.
  • --name : 컨테이너ID 대신 이름을 지정해 줄 수 있습니다.

 

컨테이너 상태

docker container stats 컨테이너아이디

 

컨테이너 삭제

docker container rm 컨테이너아이디
  • --force : 실행중 컨테이너도 강제 삭제합니다.

모든 컨테이너 삭제

docker container rm --force $(docker container ls --all --quiet)

 

컨테이너 로그

docker container logs 컨테이너이름이나아이디

 

 

docker hub

도커 허브에 공유된 이미지를  pull 받아서 사용할 수 있습니다.

docker image pull 이미지이름

 

이미지를 제공하는 저장소를 레지스트리라고 합니다.
도커 허브는 무료로 제공되는 공개 레지스트리입니다.
도커 이미지는 물리적으로는 여러 개의 파일들로 구성되어 도커가 이 파일들을 조립해서 컨테이너 내부 파일 시스템을 만듭니다. 

 

 

환경 변수

환경 변수(environment variable)은 운영체제가 제공하는 key-value 값인데, 도커 컨테이너도 별도의 화경 변수를 등록하고 사용할 수 있습니다.

이 환경변수는 호스트 운영체제의 값을 가져오는게 아니라 컨테이너에서만 사용하기 위해 도커가 부여하는 값입니다.

도커 이미지들에도 이 환경 변수 값들이 포함되어 있으므로 이 환경 변수를 바꾸면 application의 동작을 바꿀 수 있습니다.

예를들어

docker container run --env 환경변수key=환경변수value

 이런식으로 --env 플래그 옵션을 사용해서 환경 변수를 사용할 수 있습니다.

 

 

 

 

 

 

728x90

'DEV&OPS > Linux & Cloud' 카테고리의 다른 글

Docker 설치  (0) 2024.05.08
Ubuntu 22.04.4 서버 설치 및 설정  (0) 2024.05.08
grep 샘플 예제  (1) 2024.01.16
CentOS 7 디스크 추가 /var 파티션 교체  (2) 2024.01.15
/var/cache 디렉터리의 용량 부족  (1) 2024.01.13