본문 바로가기
반응형

도커69

[Docker] : 스토리지 드라이버 원리, CoW 및 RoW 그리고 이미지와 컨테이너 컨테이너와 이미지의 기본 원리는 이미지는 읽기 전용 파일로 사용되고 컨테이너는 이 위에 컨테이너 레이어를 생성해서 컨테이너의 고유 공간을 생성하는 것이지만 실제로 컨테이너 내부에서 읽기, 쓰기 작업이 일어날 때 드라이버에 따라 Copy on Write(CoW) 혹은 Redirect-on-Write(RoW) 개념을 사용한다. 스냅숏은 원본 파일은 읽기 전용으로 사용하고 이 파일이 변경되면 새로운 공간을 할당하는 것인데 스토리지를 스냅숏으로 만들면 스냅숏 안에 파일이 어디에 저장되어 있는지가 목록으로 저장된다. 이 스냅숏을 사용하다 파일 안에 변화가 생기면 변경된 내역을 따로 관리해 스냅숏을 사용한다. CoW는 스냅숏의 파일에 쓰기 작업을 수행할 때 스냅숏 공간에 원본 파일을 복사하고 쓰기 요청을 반영한다... 2022. 2. 28.
[TIL] : 124 일일 배움을 위한 Today I Learned ! `Docker 도커 데몬에 관한 내용을 공부했다. 2022.02.27 - [Server & System/Docker] - [Docker] : 도커 데몬 실행, 중단하기 2022.02.27 - [Server & System/Docker] - [Docker] : 도커 데몬 설정 2022.02.27 - [Server & System/Docker] - [Docker] : 도커 데몬 제어 명령어 -H 2022. 2. 27.
[Docker] : 도커 데몬 설정 도커 데몬에 적용할 수 있는 옵션이 무엇인지 확인하기 위해 dockerd --help 명령어를 입력하면 알 수 있다. 옵션을 직접 추가해서 도커 데몬을 실행할 수도 있다. dockerd --insecure-registry=192.168.99.100:5000 이렇게 사용할 수 있지만 dockerd 명령어로 도커 데몬을 직접 실행하기 보다 도커 설정 파일을 수정하고 도커 데몬이 설정 파일을 읽어 서비스로 실행되게 하는 방법을 주로 사용한다. dockerd -H tcp://0.0.0.0:2375 --insecure-registry=192.168.100.99:5000 --tls=false dockerd로 직접 도커 데몬을 실행하는 명령어이다. vi /etc/default/docker 이것은 우분투 14.04에서.. 2022. 2. 27.
[TIL] : 123 일일 배움을 위한 Today I Learned ! Docker Dockerfile를 좀 더 깊게 사용하기 위한 도커 명령어와 도커 데몬을 공부하기 위해 도커의 구조에 대해 공부하고 있다. 2022.02.26 - [Server & System/Docker] - [Docker] : ADD, COPY 명령어 2022.02.26 - [Server & System/Docker] - [Docker] : ENTRYPOINT, CMD 명령어 2022.02.26 - [Server & System/Docker] - [Docker] : Dockerfile로 빌드할 때 주의해야 할 점 2022.02.26 - [Server & System/Docker] - [Docker] : 도커 데몬 - 도커의 구조 JavaScript 30.. 2022. 2. 26.
[Docker] : Onbuild, Stopsignal, Healthcheck, Shell Onbuild, Stopsignal, Healthcheck, Shell Onbuild 빌드된 이미지를 기반으로 다른 이미지가 Dockerfile로 생성될 때 실행할 명령어를 추가한다. FROM ubuntu:14.04 RUN echo "this is onbuild test" ONBUILD RUN echo "onbuild!" >> /onbuild_file "onbuild!" >> /onbuild_file을 통해 onbuild!라는 명령어가 최상위 디렉터리의 onbuild_file에 저장되도록 지정했다. Stopsignal 컨테이너가 정지될 때 사용될 시스템의 콜 종류를 지정한다. 디폴트 값은 SIGTERM으로 설정되어 있지만 선택도 할 수 있다. FROM buntu:14.04 STOPSIGNAL SIGKIL.. 2022. 2. 25.
[Docker] : ENV, VOLUME, ARG, USER ENV, VOLUME, ARG, USER ENV는 Dockerfile에서 사용 될 환경 변수를 지정한다. 이미지에도 저장이 되기 때문에 빌드된 이미지로 컨테이너를 생성하면 이 환경변수를 사용할 수 있다. FROM ubuntu:14.04 ENV test /home WORKDIR $test RUN touch $test/mytouvhfile test라는 환경변수에 /home라는 값을 설정했다. VOLUME은 빌드된 이미지로 컨테이너를 생성했을 때 호스트와 공유할 컨테이너 내부 디렉터리를 설정한다. JSON 배열 형식으로 여러개 사용도 되고 VOLUME /home/dir /home/dir2 로도 사용할 수 있다. FROM ubuntu:14.04 RUN mkdir /home/bolume RUN echo test .. 2022. 2. 25.
[Docker] : 도커 멀티 스테이지 활용해 빌드하기 멀티 스테이지를 이용한 Dockerfile 빌드하기 애플리케이션을 빌드할 때 많은 의존성 패키지, 라이브러리를 필요로 한다. package main import "fmt" func main() { fmt.Println("hello word") } main.go 파일의 내용 , 텝과 공백 위치 조심해야 한다. FROM golang ADD main.go /root WORKDIR /root RUN go build -o /root/mainApp /root/main.go CMD ["./mainApp"] main.go를 컴파일하고 출력 프로그램을 실행하는 Dockerfile docker build . -t go_helloworld 이제 빌드를 해본다. docker images 명령어 확인 후 실행해 보면 내용에 비.. 2022. 2. 25.
[Docker] : 캐시를 이용한 이미지 빌드 한 번 이미지 빌드를 마치고 재진행하면 이전 이미지 빌드에서 사용했던 캐시를 사용한다. vi Dockerfile2 FROM ubuntu:14.04 MAINTAINER alicek106 LABEL "purpose"="practice" RUN apt-get update Dockerfile2로 만들어 봤다. docker build -f Dockerfile2 -t mycache:0.0 ./ -f 혹은 —file 옵션으로 Dockerfile의 이름을 지정할 수 있다. 명령어를 실행하면 Using cache라는 내용과 별도 빌드 진행 과정이 생략되고 이미지가 생성이 되었다. 전에 빌드했던 Dockerfile에 같은 내용이 있다면 build 명령어는 새로 빌드하지 않고 같은 명령어 줄까지 이전에 사용한 이미지 레이어.. 2022. 2. 24.
[Docker] : Dockerfile을 이용한 컨테이너 생성과 커밋 build 명령어는 Dockerfile에 기록된 대로 컨테이너를 실행하고 완성된 이미지를 만든다. 하지만 이미지로 만드는 과정이 하나의 컨테이너에서 일어나는 것이 아니다. 이미지를 build 할 때 나오는 출력 중 Step은 Dockerfile에 기록된 명령어에 해당한다. ADD, RUN 명령어가 실행될 때마다 새로운 컨테이너가 하나씩 생성되고 이를 이미지로 커밋하게 된다. 즉, Dockerfile에서 명령어 한 줄이 실행될 때 마다 이전 Step에서 생성된 이미지에 의해 새로운 컨테이너가 생성되고, Dockerfile 적힌 명령어를 수행하고 다른 이미지 레이어로 제공된다. 이미지 빌드가 완료되면 Dockerfile의 명령어 줄 수 만큼 레이어가 존재하게 되고 중간에 컨테이너도 같은 수만큼 생성되고 삭제.. 2022. 2. 24.
[Docker] : 빌드 컨텍스트 이미지 빌드를 시작하면 도커는 가장 먼저 빌드 컨텍스트를 읽는다. 빌드 컨텍스트는 이미지를 생성하는데 필요한 각종 파일, 소스코드, 메타데이터 등을 담고 있는 데릭터리를 의미한다. Dockerfile가 위치한 디렉터리가 빌드 컨텍스트가 되는 것이다. 빌드 컨텍스트는 Dockerfile에서 빌드 될 이미지에 파일을 추가할 때 사용이 된다. Dockerfile에서 이미지 파일을 추가하는 방법은 ADD, COPY가 있다. 이 명령어들은 빌드 컨텍스트의 파일을 이미지에 추가하게 된다. 컨텍스트에 대한 정보는 이미지를 빌드할 때 맨 위에 출력이 된다. 컨텍스트는 build 명령어의 맨 마지막에 지정된 위치에 있는 파일을 전부 포함한다. Git과 같은 외부 URL에서 Dockerfile을 읽어 들인다면 해당 Rep.. 2022. 2. 24.
[TIL] : 120 일일 배움을 위한 Today I Learned ! Docker 도커 사설 레지스트리를 사용하는 방법에 대해 공부를 했는데 도커 허브 보다 확실히 어려운 것 같다. 2022.02.23 - [Server & System/Docker] - [Docker] : Docker Private Registry, 사설 레지스트리 컨테이너 생성하기 2022.02.23 - [Server & System/Docker] - [Docker] : Docker Private Registry(, 도커 사설 레지스트리에 이미지 push하기 JavaScript 30일 챌린지 가로 스크롤을 활용해보는 프로젝트였다. 2022.02.23 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 27일.. 2022. 2. 23.
[Docker] : 도커 이미지 이해 이미지 구조 이해 docker inspect ubuntu:14.04 docker inspect commit_test:first docker inspect commit_test:second inspect 명령어를 통해 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지 등 모든 도커 단위의 정보를 얻을 수 있다. 이 명령어에서 가장 중요한 부분은 Layers 항목이다. docker images에서 위에 3개의 이미지가 각각 188MB로 출력이 되어도 188MB 크기의 이미지가 3개 존재하는 것은 아니다. 전체 이미지의 실제 크기는 188MB + first 파일의 크기 + second 파일의 크기가 된다. docker history commit_test:second 레이어의 구조는 history명령어를 통해 조금 .. 2022. 2. 22.
[TIL] : 118 일일 배움을 위한 Today I Learned ! Docker 도커 컨테이너 CPU 제한과 이미지에 대해서, 그리고 이미지를 생성하는 방법을 공부했다. 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpu-shares 활용하기 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpuset-cpu 활용하기 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpu-period, --cpu-quota 활용하기 2022.02.21 - [Server & System/Docker] - [D.. 2022. 2. 21.
[Docker] : docker images, 도커 이미지 및 이미지 검색 모든 컨테이너는 이미지를 기반으로 생성이 된다. 데비안 운영체제에서 apt-get install을 실행하면 apt 레포지토리에서 패키지를 내려받고, 레드햇 운영체제에서 yum install을 실행하면 yum 레포지터리에서 패키지를 내려받듯이 Docker Hub라는 중앙 이미지 저장소에서 이미지를 내려받는다. docker create, docker run, docker pull의 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받는다. 이미지는 대부분 도커 허브에서 공식적으로 제공하거나(ubuntu:14.04, centos:7 등) 다른 사람들이 도커 허브에 이미 올려놓은 경우(Apache Tomcat, Hadoop 등)가 대다수라 애플리케이션 이미지를 직접 만들지 않아도 .. 2022. 2. 21.
[Docker] : 도커 Block I/O 제한 컨테이너를 생성할 때 아무런 옵션도 설정하지 않으면 컨테이너 내부에서 파일을 읽고 쓰는 대역폭에 제한이 설정되지 않습니다. --device-write-bps --device-read-bps --device-write-iops --device-read-iops 위 옵션으로 입출력을 제한할 수 있다. Direct I/O의 경우에만 블록 입출력이 제한되고 Buffered I/O는 제한되지 않는다. --device-write-bps --device-read-bps 는 쓰고 읽는 작업의 초당 제한을 설정하고 kb, mb, gb 단위로 제한할 수 있다. docker run -it \\ --device-write-bps /dev/xvda:1mb \\ ubuntu:14.04 1MB로 초당 쓰기 작업의 최대치를 제한했다.. 2022. 2. 21.
[Docker] : 도커 컨테이너 CPU 제한 / --cpus 활용하기 --cpus --cpus 옵션은 --cpu-period, --cpu-quota와 동일한 기능을 하지만 조금 더 직관적으로 CPU의 개수를 직접 지정한다는 점에서 다르다. --cpus 옵션에 0.5를 설정하면 --cpu-period=100000, --cpu-quota=50000과 동일하게 컨테이너의 CPU를 제한할 수 있다. 컨테이너를 생성해 주고 확인을 해보면 CPU의 약 50%를 점유하고 있는 것을 확인할 수 있다. 병렬 처리를 위해 CPU를 많이 소모하는 워크로드를 수행해야 한다면 --cpuset-cpu 옵셩르 사용하는 것이 좋다. 특정 컨테이너가 특정 CPU에서만 동작하는 CPU 친화성을 보장할 수 있고 CPU 캐시 미스 또는 컨텍스트 스위칭과 같이 성능을 하락시키는 요인을 최소화 할 가능성이 높아.. 2022. 2. 21.
[Docker] : fluentd 로깅 fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구로 도커 엔진의 컨테이너의 로그를 fluentd를 통해 저장할 수 있도록 플러그인을 공식적으로 제공한다. mongoDB 서버와 fluentd와 Ubuntu를 통해 실습을 진행하는데 각각 이미지는 도커 허브를 참고하면 된다. 📝 : 도커 Mongo 📝 : 도커 Fluentd 참고해서 이미지를 pull 받을 수 있다. 도커 서버 1과 2에서 2에서 fluentd 서버를 통해 로그를 수집하고 몽고 서버로 전달해 준다. docker run --name mongoDB -d \\ -p 27017:27017 \\ mongo mongoDB 컨테이너를 생성한다. fluentd 서버의 호스트에서 fluent.conf 파일을 생성하고 아래 코.. 2022. 2. 20.
[Docker] : JSON-FILE Log 사용하기 JSON-file 로그 사용하기 mysql을 구동하는 컨테이너는 포그라운드에서 실행이 되기 때문에 로그 명령어로 애플리케이션의 상태를 체크할 수 있다. 책에서는 다른 방법도 알려주고 있다. 먼저 mysql을 하나 -d 명령어를 사용해서 하나 만들어주고 docker ps로 확인을 해 봤을 때 돌아가고 있지 않은 것을 확인할 수 있었고 docker ps -a를 실행했을 때 생성은 되어 있는 것을 확인할 수 있었다. docker start 컨테이너명으로 컨테이너를 시작하고 다시 확인을 했을 때 여전히 실행되고 있지 않은 것을 확인할 수 있었는데 이렇게 뭔가 오류가 있는 것 같다고 느낄 때 docker logs 명령어를 쓰면 된다. 이렇게 로그를 출력해서 에러를 체크할 수 있다. 로그가 너무 많으면 --tail.. 2022. 2. 19.
[TIL] : 115 일일 배움을 위한 Today I Learned ! JavaScript 30일 챌린지 오늘은 22회차 진행을 했다. 2022.02.18 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 22일차 Spring Boot 쿠키와 세션에 관한 내용을 진행했다. 로그아웃하는 방법도 다뤘다. 2022.02.18 - [노트/오류 노트] - [오류 노트] : Error while powering on: Virtualized performance counters require at least one available functioning counter. Module 'VPMC' power on failed. Failed to start the virtual machine... 2022. 2. 18.
[Docker] : Volume Container, 볼륨 컨테이너 볼륨 컨테이너 볼륨을 사용하는 두 번째 방법은 -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것이다. docker run -i -t \\ --name volumes_from_container \\ --volumes-from volume_overide \\ ubuntu:14.04 ls /home/testdir_2/ —volume-from 옵션을 통해 여러 개의 컨테이너가 동일한 컨테이너에 볼륨을 공유해서 사용할 수도 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 2. 16.
[TIL] : 112 일일 배움을 위한 Today I Learned ! Docker 컨테이너 애플리케이션 구축과 도커 볼륨에 대해 공부했다. 도커 볼륨을 활용하는 부분도 천천히 코딩해 볼 생각이다. 2022.02.15 - [Server & System/Docker] - [Docker] : 도커 애플리케이션 구축하기 2022.02.15 - [Server & System/Docker] - [Docker] 도커 볼륨, docker volume JavaScript 30일 챌린지 19일차를 진행했다. 웹 캠을 보이게하고 사진을 찍고 효과를 주게끔 만드는 코드였는데 이해가 잘 가지 않는다. 일단 1차 목표는 JS 문법과 친해지는 것이 목표인데 애매한 것 같다. 2022.02.15 - [Project/JavaScript 30일 챌린지] .. 2022. 2. 15.
반응형