본문 바로가기
교육관련/hp 도커 쿠버네티스 교육 수강일지

[수강일지] 8일차 : Docker (4)

by 김수효 2024. 1. 17.

dockerfile 생성 방식

스텝이 넘어갈수록 로워레이어위에 어퍼레이어가 씌워지고 그다음 스텝에서 로워레이어가 되는 형태

-> 레이어가 많아진다 = 이미지 크기가 커진다 

-> 레이어의 크기를 작게 만들어야한다

-> 레이어를 적게 하기 위해 명령어를 한줄에 다 이어서 작성 (논리 연산자 사용) -> 가독성이 떨어지니까 백슬래쉬 사용

 

도커파일 내 논리연산자 :

&& - AND 연산자 : 앞의 명령어가 참이면 뒤 명령어 실행 (ex. nginx 도커파일 참고) 

; - 앞의 명령어의 결과에 상관없이 실행. 명령어의 나열

;보다는 &&를 사용하는게 좋음 

|| - OR 연산자 : 앞의 명령어가 참이면 뒤 명령어 실행하지 않음 -> 도커파일에서는 거의 사용하지 않음 

 

 

 

 

entrypoint = cmd

but

cmd : 지정된 명령어를 유저가 변경가능 (유저에 의해서 pid 1번 프로세스 변경가능)

entrypoint : 그게 안됨 

둘 다 사용하는 이유 ->특정명령어는 바뀌지 않음 (이부분은 엔트리포인트) 하지만 명령어의 파라미터는 변경가능 (여기가 CMD) 유저가 개입하면 명령어는 바뀌지 않고 파라미터만 바뀌도록 하기를 원하면 두가지를 동시에 사용 

 

도커파일 작성 형식

쉘방식 : 쉘에다가 입력하듯이 입력하는 방식 (RUN 명령어는 쉘 방식을 선호)

exec 방식 : 대괄호로 묶고 아이템형식을 인식해서 쌍따옴표로 구분

CMD, entrypoint는 exec 방식을 쓰는게 보편적

-> 쉘이 먼저 실행되는것이 아니라 해당 명령어를 바로 실행하기 위한 목적으로 exec 방식 사용.

(쉘 방식을 사용하면 쉘이 실행된 후에(쉘이 pid 1번이 됨) 차순위로 지정한 명령어가 사용됨)

 

add : 로컬 뿐 아니라 네트워크상 데이터도 넣을 수 있음. tar 파일 등을 넣으면 아카이브가 해제됨 

copy : localhost에 있는 파일만 넣을 수 있음. tar 파일등을 있는 그대로 넣음(원래 형태 보존)

 

 

 

ENV : 컨테이너 안에서 사용되는 환경변수 설정 (ARG : 변수를 도커파일 안에서 사용하겠다)

WORKDIR : 시작 디렉토리 설정.

 

ONBUILD : 업무분리를 위해서 

 

HEALTHCHECK : 도커가 제대로 동작하고 있는지 확인 

--interval=30s --timeout=5s --retries=3

 

echo $? : 리턴코드 (0: 정상실행 / 그외: 비정상)

 

 

 

dockerfile -> image  무슨차이...?

 

 

 

도커파일 만들기 : 안어려움

도커파일 잘 만들기 : ㅈㄴ어려움 -> 다른사람이 만들어 놓은 도커파일을 많이 봐야함

 

도커 컴포즈 

- 원큐에 실행/폐기하는 명령어 모음 파일

- YAML문법을 사용

- 도커 컴포즈 정의파일은 정해져있음

 

yaml 구조 - "key" : "값"

version: "3.8"
services:   ← 컨테이너 설정(docker  run   …)
volumes:   ← 컨테이너 볼륨(docker  volume  create  …)
networks:  ← 컨테이너 네트워크(docker  network  create  …)  

- 줄맞춤이 중요, but tab키로 들여쓰기 x, 스페이스바로

 

댓글