일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS S3 migration
- AWS S3 계정이동
- 캐시백챌린지
- Window redis-cli
- aws s3
- Redis
- aws
- redis cli
- putty Inactive
- 직장인자기계발
- 캐시백
- RedisJSON
- Ngrinder Docker
- redis-cli
- gitlab 잔디옮기기
- 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
- 환급챌린지
- 패캠챌린지
- AWS S3 버킷 삭제
- Avast Security
- 패스트캠퍼스후기
- ERR unknown command 'JSON.SET'
- elastic cache
- 패스트캠퍼스
- Avast 구독취소
- vscode
- ERR unknown command 'JSON.GET'
- 직장인인강
- nodemailer
- 잔디이전
- Today
- Total
Developing
패스트캠퍼스 캐시백 챌린지 51일차 본문
Docker log와 이미지 구조와 관련된 클립들을 수강하는식으로 챌린지를 진행하였다. docker inspect로 layer architecture로 이루어진 것을 확인할 수 있었고, git과 비슷하게 생긴 command들을 보면서 신기해했던 것 같다. 자주듣다보니 어느정도 Image layer과 container layer의 차이정도에는 익숙해진듯하다.. Docker log 관련 내용도 유익하였다. 다음 포스팅으로는Dockerfile과 관련된 내용을 포스팅할 예정이다.
STDOUT / STDERR
- 대게 어플리케이션에서 로그를 다룰때 어플리케이션 해당 언어 프레임워크에서 제공해주는 로그 프레임워크를 사용하여 표준 출력으로 로그를 내보내거나 syslog로 내보내거나 elastic search 같은 외부 저장소로 보내는등 어플리케이션 단에서 구현한다.
- 도커 컨테이너에서 로그를 다루기 위해서는 어플리케이션에서 로그를 stdout,stderr로 내보내는 것을 표준으로 삼아야한다.
⇒ log를 쌓아서 logging driver가 처리할 수 있도록 하고, 사용목적에 맞게 선택하여 로그 드라이버를 사용하면 된다.
⇒ 가장 기본적으로 많이 사용되는 로그 드라이버는 json-file(한줄에 json하나로 구성이 되는 형태의 로그파일)이다.
로그 확인하기
# 전체 로그 확인
$ docker logs [container]
# 마지막 로그 10줄 확인
$ docker logs --tail 10 [container]
# 실시간 로그 스트림 확인
$ docker logs -f [container]
# 로그마다 타임스탬프 표시
$ docker logs -f -t [container]
옵션 주는 것에 따라 내용이 달라지는 것을 확인할 수 있다!
호스트 운영체제의 로그 저장 경로
$ cat /var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log
한줄마다 json의 형태로 stream의 형태가 stdout/stderr 여부가 찍혀있고 timestamp도 찍혀있는 것을 확인할 수 있다.
로그 용량 제한하기
# 한 로그 파일 당 최대 크기를 3Mb로 제한하고, 최대 로그 파일 3개로 로테이팅
$ docker run \
-d \
--log-driver=json-file \
--log-opt max-size=3m \
--log-opt max-file=5 \
nginx
도커 엔진을 운영체제에 설치하면 기본적으로 로그 용량에 대한 제한이 설정되어있지 않다.
컨테이너 단위로 로그 용량 제한을 할 수 있지만, 도커 엔진에서 기본설정을 진행할 수도있다. (운영환경에서 필수 설정)
도커 로그 드라이버
로그 드라이버를 사용해 file의 형태로 host 운영체제에 담긴다. host 운영체제상에 log agent를 설치할 수 있는데, firebeat , fluentd 같은 것을 설치하여 중앙화된 로그 시스템인 elastic,splunk,graylog,cloudwatch 쪽으로 컨테이너 로그를 수집해서 쌓는식으로 중앙에서 전체적인 컨테이너 로그를 확인할 수 있게된다.
도커 이미지 구조
- 도커 이미지는 3개가 있다고 가정한다. 이해를 돕기위해 nginx는 ubuntu 기반으로, web app 이미지는 nginx 이미지 기반으로 만들어졌다고 가정한다.
- Docker Image
⇒ ubuntu 이미지의 경우 3개의 layer로 구성되어있는데, 새로운 변경사항이 생길때마다 새로운 layer가 쌓이는 구조이다. 따라서 가장 오래된 변경사항은 layerA라고 볼 수 있다.
⇒ nginx는 ubuntu이미지를 기반으로 만들어졌기에 nginx 이미지를 구성하기 위한 요소만 쌓인다.
⇒ web app도 마찬가지로 nginx이미지를 기반으로 만들어졌기에 nginx 기반 레이어위에 새로운 레이어가 쌓인다.
- Docker Container
⇒ Docker Container에서 Web app image를 사용하는 것을 확인할 수 있는데, 이렇게 컨테이너를 생성하게 되면 image layer의 형태로 복사가된다. 이때 이 image layer는 읽기전용으로 생성되어 수정이 불가능하다.
⇒ 컨테이너가 생성될때마다 Container layer가 생성되어 읽기와 쓰기가 모두 가능한 레이어이다.
⇒ 컨테이너가 종료될때 Container layer도 같이 삭제된다.
Dockerfile 없이 이미지 생성
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# ubuntu 컨테이너의 현재 상태를 my_ubuntu:v1 이미지로 생성
$ docker commit -a fastcampus -m "First Commit" ubuntu my_ubuntu:v1
기존 컨테이너를 기반으로 변경사항을 하고 커밋을 할 수 있다.
Dockerfile 이용하여 이미지 생성
#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"]
# docker build [OPTIONS] PATH
# ./ 디렉토리를 빌드 컨텍스트로 my_app:v1 이미지 빌드(Dockerfile 이용)
$ docker build -t my_app:v1 ./
# ./ 디렉토리를 빌드 컨텍스트로 my_app:v1 이미지 빌드 (example/MyDockerfile 이용)
$ docker build -t my_app:v1 -f example/MyDockerfile ./
아래의 경우 경우 현재 디렉토리를 기반으로 빌드를 수행하고 tag지정을 하게되는데, f 옵션을 주게되면 다른 디렉토리의 Dockerfile을 사용하게 된다.
빌트 컨텍스트
- 도커 빌드 명령 수행 시 현재 디렉토리(Current Working Directory)를 빌드 컨텍스트(Build Context)라고 한다. Dockerfile로부터 이미지 빌드에 필요한 정보를 도커 데몬에게 전달하기 위한 목적이다.
.dockerignore
- .gitignore과 동일한 문법을 가지고 있다.
- 특정 디렉토리 혹은 파일 목록을 빌드 컨텍스트에서 제외하기 위한 목적
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.
'Devops > Fastcampus 캐시백 챌린지' 카테고리의 다른 글
패스트캠퍼스 캐시백 챌린지 53일차 (0) | 2022.06.09 |
---|---|
패스트캠퍼스 캐시백 챌린지 52일차 (0) | 2022.06.08 |
패스트캠퍼스 캐시백 챌린지 50일차 (0) | 2022.06.06 |
패스트캠퍼스 캐시백 챌린지 49일차 (0) | 2022.06.05 |
패스트캠퍼스 캐시백 챌린지 48일차 (0) | 2022.06.04 |