Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

COCOMO

Docker Container 정복하기 본문

k8s

Docker Container 정복하기

훌라숑 2022. 12. 8. 19:54

활용 용어 정리

application

  • 구동 가능한 소프트웨어

daemon

  • 시스템이 background에서 동작하는 형태

process

  • 실행중인 프로그램을 의미하고, 메모리 할당이 이루어지고 그 안에서 동작하는 바이너리 코드 덩어리

Container

  • Docker Daemon 위에서 동작하는 격리된 프로세스

 

Docker Architecture

Docker Container 명령어 습득

docker 관련 명령어

docker version

  • docker 엔진의 현재 버전 정보를 출력

docker images

  • 내 pc 의 container image 리스트 출력

docker rmi

  • 내 pc의 container image 삭제

docker search [ImageName]

  • 외부 저장소로부터 이미지 검색

docker pull [ImageName]

  • 외부 저장소로부터 이미지 다운

국제 표준 컨테이너 이미지 네이밍 규칙

[이미지 저장소이름] / [이미지 이름] : [이미지 태그]

  1. official image는 dockerhub에 library라는 이름의 저장소에 저장된다
  2. [image tag]는 생략이 가능하며 생략시 latest가 자동 적용된다
  3. [registry name]은 생략이 가능하며, 생략시 library가 자동 적용된다.

ex) docker pull django 입력시

jdango:latest 적용

library/django:latest 적용

docker pull library/django:latest ⇒ dockerhub에 library/django:latest 검색 및 다운

 

내 pc image 의 이름, tag 변경

docker image tag [imageName]:[imageTag] [NewImageName]:[NewImageTag]

docker image tag django [myrepo]/django

docker image tag django [myrepo]/django:v1

dockere images

 

단, tag는 단지 tag일뿐 latest라고 해서 꼭 최신이 아니다.

 

내 dockerhub에 push

docker login

docker push [myrepo]/django

docker push [myrepo]/django:v1

Container Image 활용

Container 관련 명령어

Container Status

created , running, stop , pause, exited

 

docker ps

  • 내 pc의 실행중인 컨테이너 리스트 출력

docker ps -a

  • 내 pc의 모든 컨테이너 리스트 출력

docker create [ImageName]

  • 내 로컬레포지토리에 있는 이미지를 이용해서 컨테이너를 생성.(내로컬 없으면 퍼블릭에서 다운)

docker start

  • 생성된 컨테이너를 실행상태로 옮긴다
    • status가 exit(0) 으로 되어있는것은 정상적으로 실행되고 종료되었다는 뜻.

docker stop

  • 실행중인 컨테이너를 셧다운시킨다, (프로세스를 메모리에서 해제)

docker restart

  • 셧다운 시켰다가 재구동한다

docker pause

  • 컨테이너를 일시 정지한다

docker run [imageName]

  • create 와 start가 합쳐져 있는 명령어

 

docker run 옵션 명령어

docker run [옵션값] ubuntu:18.04

 

-i, -interactive

  • 표준입력 (stdin) 활성화

-t, -tty

  • bash를 사용하려면 설정해야하는 옵션

—name

  • 컨테이너 이름을 설정

-d

  • Detached 모드(데몬 모드로 컨테이너가 백그라운드로 실행)

-p

  • host 포트와 컨테이너 포트 연결(포트포워딩)

ex)

docker run -itd --name MyUbuntu -p 22:22 ubuntu:18.04

docker start는 단발성 컨테이너를 실행하는데 쓰이는 명령어이며, docker run은 컨테이너 관련 모든 옵션을 사용할 수 있기때문에 데몬모드로 돌릴 수 있다.

 

Docker Container에 접속하는 방법

docker attach [containerName]

  • 도커데몬을 통해서 컨테이너에 직접 접속하는 방법
  • ctrl + c로 종료시 컨테이너도 종료

docker exec -it [containerName] /bin/bash

  • 외부에서 컨테이너에 접속
  • ctrl + c로 종료해도 컨테이너 실행 유지

 

Docker Container 종료 및 일시정지, 삭제

docker stop [containerName]

  • 컨테이너 자체를 종료( 프로세스 종료)

docker pause [containerName]

  • 컨테이너 일시정지 (sys stop)

docker rm [containerName]

docker rm -f [containerName]

 

Image 빌드를 위한 Dockerfile 작성

docker image 생성방법

1) docker container 로 부터 image 만들기(snapshot)

docker commit [옵션] [containerName] [NewImageName]

docker images

docker run -itd —name myUbuntu2 -p 23:22 hyodongjang/myubuntu

ssh 접속확인

 

2)dockerfile을 통해 source code 를 기반으로 image 만들기

1.Dockfile 생성

2. 이미지 생성
docker build -t {ImageName:tag} .

3. 컨테이너 생성 및 실행
docker run -itd --name TEST -p 80:80 test

4. 화면 출력
index.html

 

Container Layer 개념 및 동작방식 이해

container layer(upper layer)

  • 컨테이너가 삭제되면 날라가는 휘발성 layer

base layer + image layer (lower layer)

  • 불변 layer

 

이미지는 layer로 존재하기 때문에 내 로컬pc는 각각의 layer만 다운받는다.

실제로 이미 존재하는 layer a, b, c 들을 심볼링 링크로 걸어서 이미지 제공을 하는 형태이다.

따라서 이미지가 많아도 메모리 관리 관점에서도 가볍고, 관리가 손쉬는 이유가 여기에 있다.

 

docker inspect myUbuntu 명령어 입력시 컨테이너 관련 정보가 노출됨.

 

Container , LXC 이해 (namespace, cgroup , chroot)

chroots

  • 프로세스의 루트 디렉토리를 변경하는 것
  • 다른 프로세스가 액세스 할 수 있는 디렉토리를 제한할 수 있다.
  • 리눅스의 기술이며 컨테이너가 해당 기술을 응용해서 사용

namespace

  • 논리적인 독립된 공간
  • 물리적 공간에 접근할 수 있는 지정자들을 말한다.

cgroup

  • 프로세스의 리소스를 격리하고 사용을 제어하는 기술
  • cpu메모리, 램, 네트워크를 할당

Container Network 이해

bridge 모드

  • host 네트워크와 컨테이너에 격리된 네트워크가 존재하는데 , 논리적으로 동등한 네트워크이며 그런 상태에서 서로 통신하는것을 말한다.
  • 망이 분리되어 있지만, 도커엔진을 통해서 논리적으로 동등하게끔 처리해준다.
  • 도커 네트워크 인터페이스를 통해서 물리적인 bridge를 가상화하여 신호를 주고받는다.

host 모드

  • 컨테이너가 독립적인 네트워크를 생성하지 않고 host와 네트워크를 공유
  • 도커 네트워크 인터페이스가 아닌 호스트 네트워크 인터페이스를 사용

container 모드

  • 지정한 컨테이너의 네트워크 환경을 공유
  • docker run -itd --name myUbuntu --net=container:myUbuntu2 ubuntu:18.04

null 모드

  • 아무 네트워크 설정하지 않는다. 사용자가 직접 하나하나 설정할 때 사용

'k8s' 카테고리의 다른 글

쿠버네티스 CORE CONCEPT 2  (0) 2023.01.24
쿠버네티스 CORE CONCEPT  (0) 2023.01.11
쿠버테니스 아키텍처  (0) 2023.01.09
Iac 정복하기  (0) 2023.01.09
Container 서비스 이해와 Docker 활용  (0) 2022.12.07
Comments