becool

20210810 (화) docker 명령어 본문

docker

20210810 (화) docker 명령어

gusalstm 2021. 8. 10. 16:19
반응형

09:31 review

 Docker, 컨테이너 가상화

    컨테이너를 실행할 수 있는 실행환경

    컨테이너를 쉽게 배포할 수 있는 기능을 포함 : 다른 컨테이너 배포 도구보다 많이 사용하는 이유

    컨테이너 이미지 생성, 배포하기 용이한 환경제공

    

 가상화 (Virtualization)

   ①서버 가상화 : 물리적인 하드웨어를 가상화

   ②네트워크 가상화 : 물리적인 네트워크를 가상화하는 기술

   ③스토리지 가상화 : 여러개의 디스크를 하나의 물리적인 디스크처럼 가상화하는 기술

   ④컨테이너 가상화 : OS에서 논리적인 구획을 만들고 컨테이너 간 독립적으로 애플리케이션을 실행할 수 있는 환경을 제공하는 가상화 기술

    ※ Host OS - Guest OS 가 Kernel을 공유

 

   Docker 용어

컨테이너 이미지  컨테이너에서 애플리케이션이 실행되기 위한 실행환경을 구성하는 Application, Data, Library 등의 모임
 실행되지 않은 컨테이너의 원본
컨테이너  컨테이너 이미지를 실행한 형태 
 컨테이너 이미지가 메모리에 로드된 상태
저장소(Registry)  컨테이너 이미지를 공유하기 위한 저장 공간
레포지토리(Repository)  컨테이너 이미지를 공유하기 위해 저장소(Registry) 내에 생성하는 저장 공간
 애플리케이션의 다양한 이미지 버전을 포함

 → 각 컨테이너별로 요구하는 프로그래밍 언어 및 라이브러리의 버전이 다를 수 있으므로 각각 맞춰야하고, 각 버전간 호환성을 고려 ▶ 개발 시점에 따른, 각 버전별 지원하는 기능을 사용하기 위해 각각 다른 버전을 사용할 가능성이 매우 높으며, 추후 각 컨테이너별로 호환성을 유지하기위한 관리가 필요함.

 

 <docker 외 비슷한 container 기술>

  Linux Container (LXC)

    namespace : 시스템의 리소스 격리를 제공하는 리눅스 커널의 기능

    cgroups : 프로세스를 그룹단위로 관리할 수 있는 기술

    namespace, cgroups 등의 기술을 통한 프로세스들 간의 격리 제공

  SolarisOS(Oracle, Sun microsystem)

    SolarisOS에서는 컨테이너 가상화 기술도구가 있음.

 

 

 Docker 명령어

$ docker search 이미지 도커 컨테이너 이미지 검색 ( 레지스트리 )
$ docker image pull 이미지[:TAG] 도커 컨테이너 이미지 다운로드
$ docker images 도커 컨테이너 이미지 목록
$ docker container ls 도커 컨테이너 목록(실행중) 
$ docker container ls -a 도커 컨테이너 목록 (실행중 + 비 실행중)
$ docker container create 도커 컨테이너 생성 (실행x)
$ docker container start 도커 컨테이너 실행 (이미 생성한 컨테이너)
$ docker container run 도커 컨테이너 실행 (컨테이너가 존재하지 않는 경우 (생성+실행)
   
foreground ( -i -t )  
background ( -d -t )  
$ docker container attach 컨테이너 내부 진입
$ docker container exec 컨테이너에 새로운 프로세스 실행
$ docker container exec -it --name CONTAINER /bin/bash Bash Shell 실행
$ docker containver pause CONTAINER 컨테이너 일시 정지 ( unpause : 해제 )
$ docker container cp  컨테이너와 host 간의 파일 복사 ( container → host , host → container)

$ docker system df

$ docker system info

$ docker version

$ docker stats

 

[user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" centos7-d3
172.17.0.4
[user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" centos7-d
172.17.0.3
[user@docker-host0 ~]$ docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" centos7-4
172.17.0.2 → 컨테이너별로 아이피 다르게 할당됨

[user@docker-host0 ~]$ docker container inspect -f "{{ .State.Pid }}" centos7-d
6999
[user@docker-host0 ~]$ docker container inspect -f "{{ .Config.Hostname }}" centos7-d
fcc1303233c0

[user@docker-host0 ~]$ docker container cp centos7-d:/centos7-d2.data ~/

[user@docker-host0 ~]$ docker container cp ./host.data centos7-d:/host.data

[user@docker-host0 ~]$ docker container diff centos7-d  → 도커 컨테이너의 파일변화 등을 출력(diff)
A /work
A /work/fileA
A /work/fileB
A /centos7-d2.data
A /host.data

C /run 
A /run/mount
C /root

symbol Description
A A file or directory was added
D A file or directory was deleted
C A file or directory was changed

 

 Docker container network

 Bridge

   컨테이너가 사용하는 Private Network

   같은 네트워크에 속한 컨테이너 끼리 가능하고 외부 네트워크와 통신할 수 있도록 연결되어있음

 Host network

   Docker Host의 네트워크 정보르 공유하여 사용하는 방법

   사용하고자 하는 포트가 호스트와 충돌되지 않아야 함

 Null Netwok

   컨테이너에 대한 네트워크를 사용하지 않음

 

 Overlay Network

   서로 다른 Docker Host에 연결해서 서로 통신할 수 있도록 하는 네트워크

 

 macvlan network

    컨테이너에 Mac Address할당 →  docker Daemon이 트래픽을 컨테이너의 MAC Address로 라우팅할 수 있게 지원하는 네트워크


Overlay network
 서로 다른 Docker Host에 연결해서 서로 통신할 수 있도록 하는 네트워크

macvlan network
 MAC address를 컨테이너에 할당하여 docker Daemon이 트래픽을 컨테이너의 MAC 주소로 라우팅할 수 있도록 지원하는 네트워크


728x90
Comments