220503 Today I Learned
일지
내가 특별히 잘하고 있었다고 생각했는데 응 아니죠~ 어림도 없죠~
걍 혼자 열심히 문서 길게길게 많이 써봤자 뭐하냐
당장 옆에서 더 많은 Tool이랑 환경 다루는데, 아무도 읽지않을거 길게쓴다고 무슨의미가있냐
겸손해지고 열심히하자 좀..
주요 키워드
Docker Virtualizing
오늘의 할일
- 220503 TIL 작성
- Docker 복습
공부 정리
서버 가상화 VS 컨테이너 가상화
서버 가상화
- 서버 가상화=전가상화=가상머신(VirtualBox,Vmware)
- 하드웨어 수준 가상화
- 가상화도구(Hypervisor)를 사용하여 다수의 Physical GUEST OS(Linux) 구현
- 장점: 자체 OS를 포함한 모든 구성요소를 사용할 수 있는 완전한 머신임
- 단점: OS위에 추가적인 독립 OS들을 구성하기 때문에 리소스의 낭비(운영간접비,Overhead) 발생 Guest 1의 resouce(CPU, RAM, 등)가 사용되지않더라도 Guest 2가 해당 리소스를 사용하지 못함
컨테이너 가상화
- 컨테이너 가상화=컨테이너(Docker, k8s?)
- OS 수준 가상화
- 컨테이너(Container S/W)를 사용하여, 다수의 격리된 Logical 어플리케이션 환경 구현
- 장점: 단일 어플리케이션 구동을 위한 최소한의 환경만 구분 > 빠른 속도
- 단점: VM 처럼 다양한 OS 사용 불가, 컨테이너간 격리되어있지않음
- LXC (Linux Container)에서 부터 발전해옴
- chroot: 특정 디렉토리를 root(최상위 디렉토리)로 인식하게 함.
- Name Space: 리눅스 시스템자원을 묶어 프로세스에 할당함.
- cgroup: 특정 애플리케이션이 CPU와 메모리같은 특정자원을 과다하게 사용하는것을 방지.
- 특정 root 디렉토리를 생성하고, 자원을 할당하고, 제어함.
Docker
리눅스 컨테이너를 이용하여 프로세스 단위별 가상화 실행 환경을 제공하는,
Hypervisor보다 가벼운 경량 가상화 기술
특징
- 가상 OS를 설치하지 않음 - 호스트에서 바로 컨테이너 실행
- 호스트와 컨테이너의 성능 차이가 유사 - 오차범위 안
- 이미지 생성과 배포에 특화 - 도커 허브 제공
아키텍쳐(구조)
- 도커 이미지
- 서비스 운영에 필요한 프로그램, 코드, 실행파일을 묶은 형태
- 저장소(도커 허브)에서 올리고 내려 받는 것이 도커 이미지
- 컨테이너
- 이미지를 실행한 상태(이미지-컨테이너는 실행파일-프로세스 관계)
- 이미지로 여러개의 컨테이너 생성 가능
- 도커 허브
- 도커 이미지 레파지토리
설치 및 명령어
도커 설치 방법
- yum 관리도구 설치
yum install -y yum-utils - 도커 관련 레포지토리 추가
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo - 도커 설치
yum install docker-ce docker-ce-cli containerd.io - 도커 시작 및 활성화
systemctl enable docker –now - 도커 설치 및 시작 확인
systemctl status docker
docker –version
도커 명령어
- 도커허브에서 이미지 검색
docker search 이미지명 - 이미지 다운로드
docker pull 이미지명:태그 - 이미지 리스트 확인
docker image ls or docker images - 이미지 ID 리스트 확인
docker image ls -q or docker images -q - 이미지 삭제
docekr image rm [-f] 이미지명
=> -f 옵션은 컨테이너가 실행되었던 이미지 삭제시 - 컨테이너가 실행되지 않았던 이미지 삭제
docker image prune –all - 컨테이너가 실행되었던 이미지 삭제
docker image rm -f $(docker images -q) - 이미지 백업
docker save -o 백업파일명 이미지명 이미지명 …. - 이미지 백업 파일 해제
docker load -i 백업파일명 - 컨테이너 생성 및 실행
docker run [option] –name 컨테이너명 이미지:태그 command
옵션
-it : 입력값과 출력값이 필요로 하는 컨테이너 경우에 붙임
-d : attach를 실행하지 않고 백그라운드로 실행만 시킬 경우에 붙임 - 컨테이너 list 확인
docker ps [-a]
-a : 종료된 컨테이너까지 확인 - 컨테이너 삭제
docker container rm [-f] 컨테이너명
-f : 실행되고 있는 컨테이너 삭제시 붙임 - 컨테이너 시작 및 정지
docker container start / stop 컨테이너명 - 컨테이너 및 이미지 스펙 확인
docker inspect 컨테이너명/이미지명 - 컨테이너 리소스 확인
docker stats {–no-stream} : 1회성으로 띄울 때 - 컨테이너 리소스 제한
docker run –cpus (0.0~1.0) –memory (메모리크기) [옵션] –name 컨테이너명 이미지명:태그 - 컨테이너 리소스 변경
docker update –cpus or –memory (limit 제한) 컨테이너명 - 컨테이너 PID 확인
docker top 컨테이너명 - 컨테이너 빠져나오기
ctrl p q 차례대로 입력 - 컨테이너 재진입
docker attach 컨테이너명 - 컨테이너 분리모드로 실행
docker exec -it 컨테이너명 실행명령어
=> -it 오는 경우는 shell 명령어 실행시
second 설정으로 스냅샷
실습 진행사항
ubuntu , mysql:5.7 , centos:7 , httpd 이미지 다운로드
186 docker pull ubuntu
187 docker pull mysql:5.7
188 docker pull centos:7
189 docker pull httpd
다운로드 이미지 확인
190 docker images
191 docker image ls
이미지들의 CMD 항목 확인
docker inspect ubuntu:latest | grep -A 4 Cmd
docker inspect mysql:5.7 | grep -A 4 Cmd
docker inspect centos:7 | grep -A 4 Cmd
docker inspect httpd | grep -A 4 Cmd
ubuntu 이미지 - 아카이브로 저장
ubuntu 이미지 삭제 후 아카이브로 저장한 이미지 재설치
192 docker save -o u.tar ubuntu:latest
193 ls
194 docker image rm ubuntu:latest
195 docker image ls
196 docker load -i u.tar
197 docker image ls
해당 이미지들 이름은 차례로 os1, mydb, centos7 , web1 , web2 로 httpd만 2개 container 실행
198 docker run -itd --name os1 ubuntu:latest
199 docker run --name mydb -e MYSQL_ROOT_PASSWORD=1 -d -p 3306:3306 mysql:5.7
200 docker run -itd --name centos7 centos:7
201 docker run -d --name web1 httpd:latest
202 docker run -d --name web2 httpd:latest
203 docker ps -a
mysql:5.7 의 WorkingDir 확인
204 docker inspect mydb | grep WorkingDir
205 docker exec -it mydb sh
web1과web2의 아이피 주소 확인
206 docker inspect web1 | grep IPA
207 docker inspect web2 | grep IPA
web2 container 종료후 다시 시작해 볼 것
208 docker stop web2
209 docker ps -a
210 docker start web2
211 docker ps -a
mysql:5.7의 이미지를 container까지 삭제하시오.
212 docker rm mydb
213 docker stop mydb
214 docker rm mydb
215 docker image rm mysql:5.7
전체 container 확인
216 docker ps -a
ubuntu와 centos 의 백업본을 만들고 기존 이미지 삭제 백업을 이용해서 이미지를 다시 생성해보시오.
217 docker save -o os.tar ubuntu:latest centos:7
218 ls
219 docker image rm -f ubuntu:latest centos:7
220 docker images
221 docker load -i os.tar
222 docker images
ubuntu 와 centos 다시 container 실행
224 docker run -itd --name os2 ubuntu:latest
225 docker run -itd --name centos7_1 centos:7
container 들에 대한 상태확인하되 실시간이 아니도록 하시오.
226 docker stats --no-stream
ubuntu에 분리모드로 접속해서 /var/log/의 내용을 보도록 하시오.
227 docker exec -it os1 bash
# ls /var/log
or
docker exec os1 ls /var/log
web3 컨테이너를 생성
web3 의 웹페이지 내용 확인
curl web3의 IP주소
228 docker run -d --name web3 httpd:latest
229 docker inspect web3 | grep IPA
230 curl 172.17.0.8
Leave a comment