🧩 DevOps

    [Docker] Dockerfile의 caching 문제 방지하기

    Dockerfile을 통해 도커 이미지를 빌드할 때, Dockerfile의 레이어(Layer)와 캐싱(caching) 문제로 패키지 관련 이슈가 발생할 수 있다. 앞서 이미지 레이어에 대해서 설명할 때, 이미지 레이어 캐싱을 통해 얻을 수 있는 장점은 데이터 저장의 효율성과 재사용에 의한 빌드 시간 단축이라고 설명한 바 있다. Dockerfile에 정의된 명령어와 이전 명령어들이 같다면 동일한 레이어로 판단하기 때문에 다시 다운로드 받지 않으며, 캐싱되어있는 부분을 가져온다. 결과적으로 데이터 저장의 효율성과 빌드 시간 단축이라는 효과를 얻을 수 있는 것이다. 공식 홈페이지 문서의 Dockerfile 작성 안내에서도 다음과 같이 설명하고 있다. A Docker image consists of read-o..

    [Docker] 도커 파일(Dockerfile)

    📌Index Dockerfile이란? Dockerfile 지시어 ✔️ Dockerfile이란? Dockerfile reference | Docker Documentation VagrantFile 처럼 파일 이름은 Dockerfile로 정해져있고, 이미지를 어떻게 만들 지에 대한 정의를 한다. Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일로, 빌드하면 자동으로 이미지가 생성되므로 애플리케이션 빌드 및 배포를 자동화할 수 있게 된다. build docker build 명령어를 실행하면, Dockerfile에 정의된 대로 이미지를 빌드하게 되고, Dockerfile이 있는 디렉토리에서 진행해야한다. 이때, / 루트 디렉토리에서 진행하지 않는 것을..

    [Docker] docker export와 import

    📌Index Docker export Docker import ✔️ docker export docker save와 유사 : save는 image를 tar archive로 만들기 export는 container를 tar archive로 만들기 docker export -o 예시 $ docker export 3d -o httpd.tar $ ls centos7.tar hello-world.tar httpd.tar zsh-completions $ mkdir httpd $ tar xf httpd.tar $ cd httpd ✔️ docker import tar 파일을 이미지로 가져오기 하나의 레이어로 가져오기 때문에 멀티 레이어의 이미지, 컨테이너를 하나로 만들 때 자주 사용 docker import : 예시 $..

    [Docker] Docker 이미지 레이어(Layer)

    Docker image가 레이어(Layer)를 가지는 이유를 먼저 설명하자면, 바로 데이터 저장의 효율성과 빌드 시간의 단축을 가지기 위함이다 docker run 를 통해 이미지로 컨테이너를 생성하면 기존의 이미지 레이어들 위에 conatiner layer 가 생성된다. 즉, commit 할 때마다 새로운 내용을 레이어에 쌓아가는 것이다. 기존 이미지의 레이어는 Read-Only(변경 불가)이고, 기존 레이어 위에 새로 생성된 레이어는 Read-Write(변경 가능)이며, 이미지 레이어는 삭제되지 않지만 컨테이너 레이어는 해당 컨테이너가 종료될 경우 같이 소멸된다 아래 그림에서 볼수 있듯이, 이미지에서 컨테이너를 생성할 때 읽기 전용 레이어 위에 쓰기 가능한 레이어를 추가하게 된다. image 출처 만약..

    [Docker] Docker : commit 명령을 통해 Container로 이미지 빌드하기(feat. docker cp)

    📌Index docker diff docker commit docker cp ✔️ docker diff 기준 이미지와 지정한 컨테이너와의 차이를 확인할 수 있는 명령어이다. docker diff 이때, 출력되는 값은 변경된 내용이 아닌 변경된 파일의 경로이다. 예시: httpd 이미지에서 a.gif 파일을 삭제 후 docker diff 명령어로 확인해보자 $ docker run -d httpd df72a404057ebfa139809094e5aa3991793ec913b63d7ef6d04a0fc0e95a1143 $ docker exec -it df bash root@df72a404057e:/usr/local/apache2# rm /usr/local/apache2/icons/a.gif root@df72a404..

    [Docker] Docker 볼륨(Volume)

    📌Index Volume이란? 볼륨 방식 마운트 바인드 방식 마운트 사용 용도 ✔️ Volume이란? Docker 컨테이너(container)에 쓰여진 데이터(새로 추가한 rw layer)는 기본적으로 컨테이너가 삭제될 때 함께 사라지게 된다. Docker에서 돌아가는 많은 애플리케이션(특히 MySQL과 같은 DB)은 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장해야하고, 많은 경우 여러 개의 Docker 컨테이너가 하나의 저장 공간을 공유해서 데이터를 읽거나 써야한다. 이렇게 Docker 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장할 수 있도록 별개의 공간인, Volume이 필요하다. 이미지의 Config.Volumes 선언되어 있으면, 자동으로 Docker 볼륨이 생성되고 마운..

    [Docker] Docker 관리 : 기본 명령어 모음

    📌Index 최신 docker 명령 구조 이미지 컨테이너 컨테이너 목록 및 실행 watch option 컨테이너 프로세스 및 리소스 환경변수 컨테이터 Discovery ✔️ 최신 docker 명령 구조 $ docker container $ docker image $ docker network $ docker volume ✔️ 이미지 local 이미지 목록 확인 $ docker images $ docker image ls $ docker image sub-command : tab+tab $ docker image build -- Build an image from a Dockerfile history -- Show the history of an image import -- Import the conten..

    [Docker] Docker 개요 및 설치

    ✔️ Docker란? Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼 Docker Docs Docker를 이해하기 위해서는 Container에 대한 이해가 필요함 Container란? Host OS 상에서 리소스를 격리(Isolation)하여 마치 별도의 서버인 것 거처럼 사용할 수 있게 하는 기술 Container와 다르게 VM은 하드웨어를 논리적으로 분리하는 것 : VM vs. Container Docker를 사용하는 가장 큰 이유는 Isolation을 위해서이다. 참고)컨테이너는 가상머신과 다르게 끄고 킨다는 개념이 존재하지 않음(stop, start는 있지만...) Container 핵심 기술 Cgroup: Control Group(리소스 양) 프로세스를 ..

728x90