일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩
- tour of go
- go channel
- 자료구조
- OS
- JUCE 튜토리얼
- c++ heap
- 운영체제
- 연결리스트
- C++
- C++ gui 라이브러리
- JUCE라이브러리
- JUCE
- Docker
- Nebula
- LOB
- C언어
- 백준
- 리듬게임
- vim-go
- BOJ
- gui
- go
- 프로그래밍
- 공룡책
- C++ gui
- C++ library
- a tour of go
- 알고리즘
- JUCE library
- Today
- Total
CafeM0ca
docker 이론 정리 본문
Docker 정리
도커의 컨테이너 개념은 프로세스 분리 및 애플리케이션 패키징
컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 경량의 독립된 실행 가능한 패키지
도커의 핵심적인 부분(도커 엔진으로 하는 것)
- 오케스트레이션(orchestration) : 컨테이너 그룹 내 컴포넌트의 관리 및 조정
- 네트워크 스케쥴링 및 보안 기능을 갖춘 경량의 애플리케이션 런타임
도커의 이미지는 컨테이너의 변경할 수 없는 스냅샷을 말함.
docker run --rm hello-world
위 명령은 이미지는 컨테이너가 되어 타입이나 인스턴스와 같은 것으로 간주됨.
타입은 동작을 구성하는 필드와 메서드를 정의한 것을 말함. 인스턴스는 이 타입의 원래 실체를 말함.
--rm 옵션은 docker 엔진에게 종료 시 컨테이너를 제거하고 volume과 같은 사용이 끝난 리소스를 삭제하도록 지시
컨테이너를 어떤 시점에서 다시 시작하고 싶지 않을 때 사용(생성된 이미지 공간을 차지하고 낭비하니까)
컨테이너 실행후 내부 파일 시스템을 탐색하는 명령어
docker run -it --rm alpine:latest sh
alpine은 linux의 경량화된 버전(Go 어플리케이션 사용하는대 적합)
-it 플래그는 interactive terminal을 의미
중요: 컨테이너는 이미지의 변경이 불가능한 인스턴스이며, 데이터 볼륨은 기본적으로 비-영구적 이다.
docker rm -v $(docker ps -a -q)
중지된 모든 컨테이너 제거 명령
Docker 이론
도커는 리눅스에서 제공하는 기능들을 사용하기 편하게 제공하는 유틸리티 플랫폼이다.
Bind Mount와 Union Mount다.
Mount는 '올라 타다'의 의미가 있다.(개가 마운팅한다.)
지정된 디렉토리에(하위 디렉토리 포함) 데이터를 읽고 쓸 때 사용할 파일 시스템 처리 방식과 저장 장치를 지정하는 것
# mount -t ext3 /dev/hda3 /mnt/hard_disk_3
- ext3: 파일 시스템
- /dev/hda3: 저장 장치
- /mnt/hard_disk_3: 디렉토리
참고: 리눅스에서 블록 창치는 파티션 단위임
BIND MOUNT
- 디렉토리를 다른 경로에 마운트
- 탄생 배경: 서비스를 제공하는 입장에서 특정 디렉토리만 접근 가능하게 하는데, 상위 디렉토리에 있는 기능을 제공해주려면 권한이나 인증과 같은 복잡한 절차가 필요함. 그래서 상위 디렉토리를 특정 디렉토리에 마운트 시켜주면 특정 디렉토리의 하위 디렉토리로 상위 디렉토리를 제공해 줄 수 있음.
- mount --bind [원본 디렉토리] [붙일 디렉토리] umount [붙일 디렉토리]
- cat /proc/mounts
- 시스템 전체에 적용됨
- 파일을 다른 파일에 마운트
- A란 파일을 B로 마운트. -> 왜? -> 심볼릭 링크같은게 있는데? -> copy나 다른 부분에서 문제가 생길 수 있음
- mount --bind [원본 파일] [붙일 파일] umount [붙일 파일]
- cat /proc/self/mountinfo
- 프로세스에만 적용되며 상속된다.
- 볼륨 마운트 할 때 쓰임
- 디바이스 파일을 컨테이너에 연동
- 호스트 파일을 컨테이너에 연동
UNION MOUNT
배경
- 시스템 저장 용량을 늘리고 싶었다.
- 마운트 하기 전 이전 디렉토리 데이터를 사용하고 싶음
- 라이브 CD/DVD 배포판을 만들고 싶어요 등
- 하나의 디렉토리에 여러 파일 시스템을 마운트하면 여러 파일 시스템 내용이 합쳐지는 것
- 먼저 마운트한 파일 시스템의 디렉토리 구조는 나중에 마운트한 파일 시스템의 디렉토리 구조와 합쳐짐
- 동일한 파일 이름을 가지고 있다면 나중에 마운트한 파일 시스템 내용을 우선적으로 보여줌
- 나중에 마운트한 파일 시스템이 읽기 쓰기가 가능할 경우 파일을 지웠다면 그 정보도 유지됨
아래는 AuFS 파일 시스템만 다룬다.
AUFS 파일 시스템
- union mount 지원 파일 시스템
- 커널 2.6.15 ~ 3.14까지 지원 지금은 안씀.
- 리눅스 커널 메인 스트림에 포함되지 못함
- LiveCD라고 하는 리눅스 배포판에 적용되어 알려짐
우분투에서 다음과 같은 명령으로 설치함
- sudo apt-get install aufs-tools
컨테이너에서 이미지를 파손시키지 않고 보관 하는 방법
/tmp/aufs-roots는 dir1과 dir2를 마운트한 디렉토리
이 디렉토리에서 file1.txt를 수정하면 /tmp/dir1/file1.txt가 변경됨
/tmp/dir2는 read only
/tmp/aufs-root에서 file2.txt를 수정하면 write가 가능한 /tmp/dir1에 작성됨
여기서 부터는 도커에 적용안됨 AUFS자체가 지금 도커에서 지원하지 않으니 이해용으로만
Docker와 namespace
https://www.youtube.com/watch?v=8DDflySMwfQ
process가 독립된 공간에서 실행 될 수 있도록 환경을 제공해주는 도구.
도커 컨테이너는 namespace, Cgroup, Storage를 지원한다.
리눅스에서 컨테이너를 지원했음. Linux Container(LXC)
LXC 유틸리티에는 ip, unshare, nsenter 등등 이 있는데 이를 조합해서 컨테이너로 만들 수 있음
Linux namespace
- UTS
- host name
- IPC
- system V IPC
- MNT
- mount
- PID
- processes
- NET
- network stack
레퍼런스
FA-linux docker 세미나
'OS > 리눅스' 카테고리의 다른 글
[리눅스] FTP 없이 파일 업로드 다운로드를 위한 rz와 sz (0) | 2021.11.18 |
---|---|
[vim] YouCompleteMe 특정 언어 자동완성 안될때 (0) | 2020.11.19 |
터미네이터 화면분할 단축키 (0) | 2018.04.06 |
[리눅스]nvim 이쁘게 쓰기(feat init.vim or vimrc) (0) | 2018.02.08 |
우분투를 이쁘게 써보자 (0) | 2018.01.31 |