일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- nodemailer
- 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
- Ngrinder Docker
- 잔디이전
- AWS S3 계정이동
- Redis
- AWS S3 버킷 삭제
- Avast Security
- RedisJSON
- Window redis-cli
- 직장인자기계발
- 패캠챌린지
- redis cli
- 직장인인강
- Avast 구독취소
- 캐시백챌린지
- gitlab 잔디옮기기
- 환급챌린지
- aws s3
- putty Inactive
- ERR unknown command 'JSON.GET'
- 패스트캠퍼스
- 캐시백
- vscode
- AWS S3 migration
- aws
- elastic cache
- ERR unknown command 'JSON.SET'
- 패스트캠퍼스후기
- redis-cli
- Today
- Total
Developing
패스트캠퍼스 캐시백 챌린지 52일차 본문
Dockerfile과 DockerImage save/load 관련된 클립들을 수강하는식으로 챌린지를 진행하였다. Docker 공식문서가 굉장히 긴데 일부를 같이 살펴보는 과정들이 좋았다. 필기하면서 긴가민가한 부분들은 다른분들의 블로깅을 참고해가면서 재차 확인하였고, tar 관련된부분은 늘 궁금하던 부분이었어서 흥미롭게 봤던 것 같다. 다음 포스팅으로는 도커허브 저장소 이용 및 AWS ECR 저장소 관련된 내용을 포스팅할 예정이다.
Dockerfile 문법
FROM node:12-alpine
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
https://docs.docker.com/engine/reference/builder
도커파일의 공식문서는 위의 링크에서 확인가능하다. url뒤에 /#{subSection} 같은 식으로 원하는 내용을 찾을수도있다..
- Format
⇒ INSTRUCTION [argument]
⇒ case-sensitive하지는 않지만 이때 instruction을 argument와 쉽게 구별해내기 위해 Instruction은 대문자로 적을 것을 권장한다.
⇒ 주석은 # 으로 표기한다. Dockerfile 명령어가 실행되기전 주석들은 제거된다.
⇒ FROM instruction으로 시작하여 parent image를 반드시 명시해주어야한다.
- Environment replacement
⇒ENV statement로 선언되는 환경변수는 특정 명령어 내에서 변수로 사용될 수 있다.
⇒$variable_name | ${variable_name} 형식으로 사용할 수 있다.
⇒ ${variable:-word} : variable이 있다면 결과값은 variable, 없다면 결과값이 word이다.
⇒ ${variable:+word} : variable이 있다면 결과값은 word, 없다면 결과값이 empty string이다.
(Example)
FROM busybox
ENV FOO=/bar
WORKDIR ${FOO} # WORKDIR /bar
ADD . $FOO # ADD . /bar
COPY \\$FOO /quux # COPY $FOO /quux
여기서 주의할점은 여기서의 FOO는 host운영체제의 환경변수가 아니라 컨테이너의 환경변수이다.
ENV 지시어를 사용하면 이미지빌드타임과 컨테이너런타임에 환경변수 값을 전달할 수 있다.
환경변수를 전달하는방법이 아니라 build argument를 전달하는방법도있다.
- ARG
⇒ ARG <name>[=<default value>]
⇒ ARG는 build-time에 builder로 사용자가 전달할 수 있는 변수를 정의한다.
⇒ Default values / Arg Variable의 방법을 사용한다.
#Default values
FROM busybox
ARG user1=someuser
ARG buildno=1
#Arg Variable
From ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER=v1.0.0
RUN echo $CONT_IMG_VER
$ docker build --build-arg CONT_IMG_VER=v2.0.1 .
# 이런식으로 build argument를 넘길 수 있다고한다.
동일한 이름에 대해서 환경변수와 argument가 정의된 경우에는 ENV가 ARG를 덮어쓴다고 한다.
따라서 이경우에는 2.0.1을 옵션으로 넘겨주어도 1.0.0을 사용한다고 한다.
arg와 env를 —e, —build-arg 옵션으로 오버라이드 하는 예시는 하단의 링크에서 잘 설명되있는 것 같다.
https://github.com/heowc/programming-study/issues/90
- Scope
FROM busybox
USER ${user:-some_user}
ARG user
USER #user
# ...
$ docker build --build-arg user=what_user .
이 경우에는 명확하다. 변수 user가 정의되기 전에 사용이 되었기에 argument를 넘겨주더라도 ${user:-some_user} 에서 some_user를 기본값으로 사용하게된다.
(Dockerfile Example)
FROM: 도커파일 시작하는 부분의 instruction으로 어떤 베이스 이미지를 사용할지 결정한다.
LABEL: 이미지의 메타데이터 설정으로 optional인 부분이다.
⇒ 컨테이너 서비스관리가 복잡해질때,관리해야하는 이미지가 많아지는 경우 조직내에서 convention으로 깔끔하게 관리한다고 한다.
WORKDIR: 해당 경로를 작업경로로 만들어준다 : Set Working Directory
⇒ 우분투에서 cd로 디렉토리를 이동한다고 생각하면 된다.
COPY: COPY SRC DEST 의 구조를 취하게 된다.
⇒ SRC : 호스트 운영체제 경로
⇒ DEST : 이미지 상에서의 경로
⇒ COPY package*.json ./ 의 의미는 host 운영체제의 package로 시작하는 json file들을 복사해 이미지 상의 현재 디렉토리에 복사하라는 의미이다. 이때 WORKDIR 지시어를 사용하였으므로 /app/에 복사하게 된다.
RUN: docker image build상에서 해당 명령어를 실행하라는 의미이다.
COPY . . : 현재 디렉토리상의 모든 파일과 디렉토리를 /app/으로 복사
EXPOSE: 사용하는 port를 문서화한다. 해당 포트를 publishing하는 것은 아니고 expose는 이미지 사용자에게 포트사용번호를 알려주는 용도만 한다.
CMD : 컨테이너를 실행할때 어떤 명령어를 실행할지 결정한다. 배열형태로 받을 수도 있지만 double quote로 문자열로 묶어서 실행할 수도있다.
- ENTRYPOINT
#exec form
ENTRYPOINT ["executable","param1","param2"]
#shell form
ENTRYPOINT command param1 param2
Entrypoint를 사용하면 커멘드에 앞서서 시작프로그램을 지정할 수 있다.
(Exec from ENTRYPOINT example)
FROM ubuntu
ENTRYPOINT ["top","-b"]
CMD ["-c"]
두개가 합쳐져서 top -b -c가 실행될 것이다.
- USER
USER <users>[:<group>]
USER <UID>[:<GID>]
도커 컨테이너가 사용하게 될 기본 사용자를 지정한다. 도커 이미지 보안을 고려할 때 반드시 사용하는 지시어라고 한다.
이미지 압축파일로 저장
# 이미지를 tar압축 파일로 저장
# docker save -o [OUTPUT-FILE] IMAGE
# ubuntu:focal 이미지를 ubuntu_focal.tar 압축 파일로 저장
$ docker save -o ubuntu_focal.tar ubuntu:focal
이미지 압축에서 불러오기
# 이미지를 tar 압축파일로부터 불러오기
# docker load -i [INPUT-FILE]
# ubuntu_focal.tar 압축 파일에서 ubuntu:focal 이미지 불러오기
$ docker load -i ubuntu_focal.tar
tar파일로 save,load가 잘 되는 것을 확인할 수 있다.
인터넷이 안되는환경이나 public repository 거치치않고 이미지를 전달할때 이미지를 압축파일로 저장하고 불러오는 것이 유용하다고 한다!
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 캐시백 환급 챌린지를 위해 작성되었습니다.
'Devops > Fastcampus 캐시백 챌린지' 카테고리의 다른 글
패스트캠퍼스 캐시백 챌린지 54일차 (0) | 2022.06.10 |
---|---|
패스트캠퍼스 캐시백 챌린지 53일차 (0) | 2022.06.09 |
패스트캠퍼스 캐시백 챌린지 51일차 (0) | 2022.06.07 |
패스트캠퍼스 캐시백 챌린지 50일차 (0) | 2022.06.06 |
패스트캠퍼스 캐시백 챌린지 49일차 (0) | 2022.06.05 |