전체 글

전체 글

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

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

    [Linux] shell 변수(variable) : 매개변수

    shell 에서 변수를 선언할 때는 다른 프로그래밍 언어와 마찬가지로 = 을 사용한다. 쉘에서 스크립트로 매개변수를 보내줄 수도 있는데, 규칙은 아래와 같다 $0 : 현재 쉘 스크립트의 이름 $# : 위치 매개변수의 총 개수 $* : 모든 위치 매개변수 $@ : 큰 따옴표를 사용하였을 때를 제외하고는 $*와 동일한 의미 $1 ... ${10} : 사용가능한 위치 매개변수 a.sh 을 다음과 같이 작성하였다. #!/bin/sh echo "\$MSG = $MSG" echo "\$@ = $@" echo "\$0 = $0" echo "\$1 = $1" 실행할 수 있는 권한을 부여하고, shell script를 실행시켜보자. $ chmod +x a.sh $ ./a.sh $0은 shell script의 이름이 할당..

    [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(리소스 양) 프로세스를 ..

    [Azure] Azure 기초 개념 및 실습

    📌INDEX 리소스 그룹 공용 IP 사용자 가상 네트워크 가상 머신 ✔️ 리소스 그룹 What is resource group? 가상 머신이나 가상 네트워크, 스토리지 계정과 같은 리소스를 목적에 따라 논리적으로 그룹화한 것(AWS에는 존재하지 않는 개념) 리소스와 시소스 그룹 간의 관계가 갖는 특성 리소스는 하나의 리소스 그룹에만 존재해야함 리소스와 리소스 그룹의 이름은 변경할 수 없음 리로스 그룹과 리소스의 위치(지역)이 다를 수 있음 단순히 어디서 관리할 것인가의 차이 리소스 목록을 어디에서 관리할지는 상관 없음 한 리소스 그룹의 리소스가 다른 리소스 그룹의 리소스와 상호작용할 수 있음 한 리소스 그룹의 리소스를 다른 리소스 그룹으로 이동할 수 있음 미리 리소스를 만들어둔 뒤, 나중에 리소스 그룹에..

    [Terraform] Terraform Cloud

    📌INDEX 백엔드(Backend) Terraform Cloud ✔️ 백엔드(Backend) 현재 사용하고 있는 백엔드: Local Backend s3에 상태를 저장하고 공유 : s3, dynamo DB 를 이용한 원격 백엔드 예시 terraform { backend "s3" { bucket = "mybucket" key = "path/to/my/key" region = "us-east-1" } } 동시에 접근하는 것을 방지하기 위해 locking 사용하며, s3는 잠금 기능이 없기 때문에 dynamodb를 사용하여 locking한다. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", ..

    [Terraform] 데이터 소스(Data Source)

    Data Source: aws_ami 프로바이더에서 정보를 가져오는 것을 모두 데이터 소스라한다. data 블록에 작성하며, 리소스와 정의하는 방법은 동일하다. owner 필수(required) 필터(filter)를 걸어서 검색 다음과 같이 Data Sources를 확인할 수 있다. 참고) ubuntu image 검색 사이트 💻 실습: aws_ami data source로 ami 생성하기 📝 data_source.tf data "aws_ami" "ubuntu_image" { owners = ["099720109477"] most_recent = true #가장 최신 버전을 사용할 것인가 filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-*-a..

728x90