COCOMO
Docker Container 정복하기 본문
활용 용어 정리
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]
- 외부 저장소로부터 이미지 다운
국제 표준 컨테이너 이미지 네이밍 규칙
[이미지 저장소이름] / [이미지 이름] : [이미지 태그]
- official image는 dockerhub에 library라는 이름의 저장소에 저장된다
- [image tag]는 생략이 가능하며 생략시 latest가 자동 적용된다
- [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 |