본문 바로가기

분류 전체보기324

Philips Robust Hashing - 출처: 논문 "A Highly Robust Audio Fingerprinting System", 저자: "Jaap Haitsma", "Ton Kalker" - 목적 음원인식을 하는 방법에는 여러가지가 있다. 그중에서 가장 대표적인 것이 peak 기반으로 검출하는 방식(shazam)과 frequency band로 나누어 energy band의 차이를 vector화 하여 검출하는 방식(philips)이 있다. 그중 philips 방식이 어떤 방법으로 음원을 인식하는지 알아본다. - Sub-fingerprint 와 Fingerprint block 모든 음원 인식 방법이 그런것은 아니지만 fingerprint 추출 알고리즘은 대게 아래 과정을 거친다. 음원 신호를 frame들로 분할한다. frame에 대한 .. 2023. 8. 19.
Build Context - 출처: https://docs.docker.com/build/building/context/ Build context docs.docker.com Build context "docker build"는 Dockerfile과 context로 부터 docker image를 build 하는 명령어다. Build context는 build 명령어에서 제일 마지막에 인자에 해당한다. docker build [OPTIONS] PATH | URL | - ^^^^^^^^^^^^^^ 명령어를 보면 짐작할 수 있듯이 build를 위한 context로 아래와 같은 입력들을 전달할 수 있다. local directory의 상대경로나 절대경로 원격 Git repository, tarball, plain-text 파일의 주소 .. 2023. 8. 12.
Docker - build arguments - 출처: https://docs.docker.com/build/guide/build-args/ - Change runtime versions 일반적으로 build 인자를 실질적으로 사용하는 경우는 build stage 에서 runtime version을 지정하는 경우이다. 우리가 작성한 Dockerfile은 golang:1.20-alpine 을 기본 image로 사용하고 있다. 만약 다른 Go version을 사용해서 application을 build 하고 싶다면 어떻게 해야할까? 가장 직관적으로는 Dockerfile 내의 version을 갱신해주면 되지만 이런 방법은 매우 불편하고 비효율적이다. # syntax=docker/dockerfile:1 ARG GO_VERSION=1.20 FROM golan.. 2023. 6. 28.
Docker - Mounts - 출처: https://docs.docker.com/build/guide/mounts/ - Mounts Cache mounts는 build 동안 사용될 영속 package cache를 지정할 수 있도록 해준다. 영속 cache는 특히 package manager를 사용해서 package들을 설치하는 경우 유용하다. Package를 위한 영속 cache를 갖고 있으면 layer를 다시 build 하더라도 신규 혹은 변경된 package 들만 download 하면 된다. Cache mounts는 Dockerfile의 RUN 지시어와 함께 --mount flag를 사용하면 생성된다. Cache mount를 사용하기 위해서는 --mount=type=cache,target= 형식으로 사용하면 되는데, 에 con.. 2023. 6. 21.
Docker - Multi stage - 출처: https://docs.docker.com/build/guide/multi-stage/ - Multi stage Docker는 multi-stage라는 기능을 제공한다. 왜 Multi-stage를 사용해야할까? build를 병렬로 수행할 수 있다. 마지막 이미지 크기를 더 작게 만들 수 있다. - Add stages 그렇다면 build stage란 무엇인가? build stage는 Dockerfile에서 FROM 지시어에 해당한다. 이전 Section(https://ocwokocw.tistory.com/302) 의 Dockerfile은 단일 stage에 해당하는데 최종 image가 프로그램을 컴파일하는데 사용되는 resource 때문에 용량이 큰것을 확인할 수 있다. % docker image.. 2023. 6. 20.
Docker image and layer - 출처: https://docs.docker.com/build/guide/intro/ Docker image에 대한 전반적인 이해를 위해서 docker 공식 guide document 중 Build with docker 의 내용이 좋아보여 차근차근 따라해보려고 한다. - Introduction Guide 문서 에서는 Go project와 Dockerfile을 통해서 설명하고 있다. (Go에 대한 지식은 필요 없다고 말하고 있다.) Docker desktop이나 Docker engine은 설치되어 있다고 가정한다. 예제 환경 구성을 위해 Github example repository(https://github.com/dockersamples/buildme.git)를 clone 한다. clone후 폴더 구.. 2023. 6. 18.
Docker resource constraints - 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 자원 할당 제한 - 출처: https://docs.docker.com/config/containers/resource_constraints/ - 개요 기본적으로 container는 자원 사용량에 제한이 없다. Docker는 docker run 명령어 option을 통해 memory, CPU를 얼마나 사용할지 설정하는 기능을 제공한다. 이런 기능들을 사용하기 위해서는 kernel이 Linux capabilities(프로세스의 권한을 제어하는 기능)을 제공해야 한다. docker info 명령어를 실행했을 때 kernel이 기능을 제공하지 않는다면 WARNING: No swap limit support와 같은 메시지를 보게될 수 있다. - Memory 실행.. 2023. 6. 18.
Docker logging - 출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 로깅 - 출처: https://docs.docker.com/config/containers/logging/ - Container log docker logs 명령어를 이용하면 실행중인 container에서 수집된 log를 볼 수 있다. 기본적으로 표준 출력(STDIN), 표준 에러(STDERR)를 저장한다. 다만 docker logs를 제대로 사용할 수 없는 경우도 있는데 "dual logging"을 비활성화한 상태에서 logging driver를 사용하여 log를 file, 외부 host, 다른 back-end로 보내는 경우 사용하는 이미지가 web server나 DB와 같은 non-interactive 프로세스를 실행하는 경우 해당 app들이 STD.. 2023. 6. 17.
Docker network 출처: 시작하세요! 도커/쿠버네티스 - 도커 네트워크 출처: https://docs.docker.com/engine/tutorials/networkingcontainers/ 출처: https://docs.docker.com/network/network-tutorial-standalone/ Docker network 구조 Docker network 구조를 간단한 그림으로 나타내면 아래와 같다. veth: Docker는 container를 생성할때마다 IP를 부여한다. 하지만 해당 IP는 docker가 설치된 host 에서만 사용가능하므로 외부와 연결해줘야 하는데 이를 위해 veth 라는 network interface를 container 마다 생성한다. docker0: 각 veth를 host의 eth0와 .. 2023. 6. 12.
Docker volume 출처: 시작하세요! 도커/쿠버네티스 - 도커 볼륨 Docker volume은 왜 필요한가? mysql image로 container를 하나 생성했다고 가정해보자. 이 container는 Web 서버의 요청을 받아 새로운 정보를 계속 축적해나갈것이다. 즉 읽기 전용인 docker image를 기반으로 변경분이 docker container layer에 기록된다. 그런데 container를 재시작하면 어떻게 될까? 이전에 예제를 통해 확인해봐서 알겠지만 container layer의 정보는 초기화된다. 이렇게 되면 축적된 정보가 날아가게 된다. 이를 방지하기 위해 필요한것이 volume 이다. Host volume 공유 ~ % docker run -d \ --name wordpressdb_hostvolume.. 2023. 6. 11.