진취적 삶
01 도커 기초 본문
1.1 도커 소개
도커는 가상실행 환경을 제공해주는 오픈소스 플랫폼이다.
도커에서는 가상 실행환경을 컨테이너라고 부른다.
도커의 장점
- 표준화 : 도커를 사용하면 프로세스의 실행을 표준화 시킬수 있다.
- 이식성: 프로그램이 어디서 어떻게 만들어졌는지 상관없이 도커 플랫폼 위에서 실행된다면 동일한 실행 환경으로 프로세스를 작동시킬수 있다.
- 가볍다: 도커는 실행되는 애플리케이션별로 커널을 공유해서 ,다른 가상화 제품에 비해 가볍다.
- 강한 보안: 컨테이너라는 고립된 환경에서 실행되므로 보안측명에서 유리
1.1.1 컨테이너와 가상머신
도커는 프로세스의 실행 환경을 가상화한다.
컨테이너와 가상머신은 리소스를 가상화하고 고립화 시키는 측면에서는 동일
가상머신은 기존의 서버에 하이퍼바이저를 설치하고, 그위에 가상 OS와 APP을 패키징한 VM을 만들어 실행하는 방식
1개의 서버를 여러개의 서버처럼 활용할수 있는 효과를 가진다.
개별 VM 은 독립적인 운영체제를 포함하고 있다.
컨테이너 은 운영체제를 제외한 나머지 애플리케이션 실행에 필요한 모든 파일을 패키징
컨테이너는 게스트 OS와 하이퍼바이지가 없기때문에 이로 인한 오버헤드를 줄임
온프레미스 : 기업이 데이터 센터를 보유하고 시스템 구축부터 운영까지를 모두 수행하는 방식
하이퍼바이저 : 하드웨어와 가상머신들 사이에서 하드웨어를 가상화 하기 위해 하드웨어 들을 제어할 뿐만 아니라, 각각의 가상머신들을 관리하는 역할을 수행
1.1.2 CD플레이어 도커
도커는 CD와 같다. 사용자는 CD만 들고있으면 CD 플레이어가 설치된 어느 컴퓨터에서 재생가능하듯이 도커도 도커이미지만 가지고 있으면 도커 데몬이 설치된 어느 컴퓨터에서든지 도커 프로세스를 실행할수 있다.
도커 이미지 : 사용자가 실행할 코드가 들어있는 바이너리. CD와 마찬가지로 한번 생성하면 수정이 불가능
도커 파일 : 도커 이미지를 생성하기 위해 필요한 문서
도커 컨테이너 : 도커 이지미가 메모리 위에 상주하여 실제 코드아 수행되는 프로세스
도커 데몬 : 컨테이너가 정상적으로 수행 될수 있게 실행 환경을 제공
원격 레지스트리 :도커 이미지를 저장할수 있는 원격 저장소
1.1.3 도커 설치
sudo apt install -y docker.io net-tools
sudo usermod -aG docker $USER
1.2 도커 기본 명령
도커를 생성한다는 것은 일반적인 프로세스 한 개를 실행하는 것과 별반 다르지 않다.
1.2.1 컨테이너 실행
docker run <IMAGE> :<TAG>
도커를 실행하는 방법 docker run 이미지 전달할 인자 지정하면 된다.
도커 이미지 주소 형식
<레지스트리 이름> / <이미지 이름> : <TAG>
레지스트리 주소는 도메인 주소 형식을 가지며 생략 시 기본적으로 docker.io 레지스트리를 이용
- 기본 레지스트리 주소 :docker.io
- 기본 사용 TAG :latest
- docker/whalesay == docker.io / docker/whalesay:lastest == 레지스트리 / 이미지 / TAG
docker run docker/whalesay cowsay 'hello world'
docker run -d nginx
-d 옵션으로 컨테이너를 백그라운드로 실행
-d 옵션으로 실행시 ,CONTAINER_ID 리턴
1.2.2 컨테이너 조회
docker ps
1.2.3 컨테이너 상세정보 확인
docker inspect <CONTAINER_ID>
1.2.5 컨테이너 명령 전달
docker exec 11acf31d7e12 sh -c 'apt update && apt install -y wget'
1.2.6 컨테이너 /호스트간 파일 복사
실행할 컨테이너와 호스트 서버간에 파일을 주고받을수 있다.
docker cp <HOST_PATH> <CONTAINER_ID> : <CONTAINER_PATH>
docker cp /etc/passwd 11acf31d7e12:/usr/share/nginx/html/.
docker cp 11acf31d7e12:/usr/share/nginx/html/index.html .
1.2.7 컨테이너 중단
docker stop
1.2.8 컨테이너 재개
종료된 컨테이너를 다시 재식작
code start <CONTAINER_ID>
1.2.9 컨테이너 삭제
컨테이너 삭제 후에는 더는 컨테이너를 재개하지 못한다
docker rm <CONTAINER_ID>
1.2.10 Interactive 컨테이너
이미지 실행시 -it 옵션을 통해 직접 컨테이너 안으로 접속하여 작업할수도 있다.
-it 는 interactive (stdin, stdout 연결) , tty (터미널 연결)의 약자이다.
docker run -it ubuntu:16.04 bash
1.3 도커 저장소
도커 허브는 도커 이미지 원격 저장소 입니다.
1.3.2 이미지 tag 달기
docker tag <OLD_NAME> : <TAG> <NEW_NAME>:<TAG>
docker tag nginx:latest suha/nginx:1
1.3.4 도커 허브 로그인
docker login
1.3.5 이미지 업로드
docker push <USERNAME>/<NAME>
1.3.6 이미지 다운로드
docker pull <IMAGE_NAME>
1.3.7 이미지 삭제
docker rmi <IMAGE_NAME>
1.4 도커 파일 작성
나만의 도커 이미지를 생성하기 위해서는 Dockerfile 이라는 텍스트 문서를 작성
특정 명령을 기술하여 도커 이미지 생성
- Dockerfile 에 기반 이미지를 지정
- 원하는 소프트웨어 및 라이브러리 설치하기 위한 명령을 기술
- 컨테이너 실행시 수행할 명령을 기술
nano hello.py
파이썬 스크립트 작성
import os
import sys
my_ver = os.environ["my_ver"]
arg= sys.argv[1]
print("hello %s,my version is $s !" %(arg,my_ver))
Dockerfile 작성
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y curl python-dev
WORKDIR /root
COPY hello.py .
ENV my_ver 1.0
CMD ["python","hello.py","guest"]
- FROM : 기반 이미지를 나타냄
- RUN :사용자가 지정한 명령을 실행하는 지시자
- WORKDIR : 이미지의 작업 폴더를 지정
- COPY : 로컬 호스트에 존재하는 파일을 도커 이미지 안으로 복사
- ENV: 이미지의 환경변수 지정
- CMD : 이미지 실행시 ,default 로 실행되는 명령
1.4.2 도커 빌드
docker build <PATH> -t <IMAGE_NAME> :<TAG>
docker build -t hello:1
파라미터를 넘기면 기존 CMD는 override 된다.
docker run hello:1 echo "hello world!"
환경 변수 주입
docker -run -e KEY =VALUE <REGISTRY> / <IMAGE> :<TAG>
1.4.3 Dockerfile 심화
ARG
dockerfile 안에서 사용할수 있는 매개변수를 정의 , ARG 지시자를 이용하여 my_var 변수를 생성
docker build . -t hello:2 --build-arg my_var=2.0
docker run hello:2
depreacted
docker build . -t hello:2 --build-arg my_var=2.0
ENTRYPOINT
CMD 와 유사하나 실행 명령어 override 되지 않고 실행 가능한 이미지
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y curl python-dev
WORKDIR /root
COPY hello.py .
ENV my_ver 1.0
ENTRYPOINT ["python","hello.py","guest"]
실행명령이 override 되지 않는다. 이미지 자체가 실행 가능한 바이너리처럼 바뀌었기 때문에
CMD 와 ENTRYPOINT 차이점
CMD는 사용자가 이미지를 실행할 때 별다른 명령을 파라미터로 넘겨주지 않으면 default로 실행되는 명령어고 언제든지 override 할수있다.
ENTRYPOINT 는 이미지를 실행 가능한 바이너리로 만들어주는 지시자
1.5 도커 실행 고급
1.5.1 Network
- 내부 IP 확인법 :hostname - i 또는 ifconfig
- 공인 IP 확인법 :curl ifconfig.co
1.5.2 Volume
컨테이너는 휘발성 프로세스 이기 때문에 컨테이너 내부의 데이터를 영구적으로 저장할수 없다.
컨테이너의 데이터를 지속적으로 보관하기 위해서는 불륨이라는것을 사용한다 .
컨테이너 실행시 , 로컬 호스트의 파일시스템을 컨테이너와 연결하여 필요한 데이터를 로컬 호스트에 저장할수 있다. (불륨 마운트)
1.5.3 Entrypoint
ENTRYPOINT 는 파라미터 전달시 ,override 되지 않는다고 설명 그러나 —entrypoint 라는 옵션으로
ENTRYPOINT 강제로 override
1.5.4 User
기본적으로 컨테이너의 유저는 root 이다 . 보안상의 이유로 root 가 아닌 일반 유저를 사용하도록 만들수 있다 .
1.6
clean up
docker rm ${docker ps -aq) -f
docker rmi ${docker images -q ) -f
'개발 도서 > 핵심만 콕 쿠버네티스' 카테고리의 다른 글
06 쿠버네티스 네트워킹 (0) | 2023.11.17 |
---|---|
05 Pod (0) | 2023.11.17 |
04 쿠버네티스 첫 만남 (0) | 2023.11.17 |
03 쿠버네티스 설치 (0) | 2023.11.17 |
02 쿠버네티스 소개 (0) | 2023.11.17 |