전체 글
[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..
[Terraform] Count 반복문 (with length function)
count Meta-Argument count는 resource에서만 사용 가능 count는 resource의 가장 처음에 적는 것이 관습 0부터 시작하는 count.index를 참조하여 사용 예시 : count에 값에 정수인 인수가 포함된 경우 Terraform은 그만큼의 인스턴스를 생성한다. resource "aws_instance" "server" { count = 4 # create four similar EC2 instances ami = "ami-a1b2c3d4" instance_type = "t2.micro" tags = { Name = "Server ${count.index}" } } 📝main.tf : eip에서 instance에 count.index를 통해 참조한다. resource "..
[Terraform] 모듈(Module)
✔️ 모듈(Module)이란? Module Terraform AWS Module Github 저장소 ansible에서의 역할(role)과 비슷하며, 자주 사용하는 리소스들을 모아둔 컨테이너이다. 모듈의 종류 root 모듈 : 기본 작업 디렉터리의 파일에 정의된 리소스 child 모듈 : 모듈에 의해 호출된 모듈 모듈 초기화 초기화해야 모듈이 다운로드 된다. terraform init 예시 module "myvpc" { source = ...입력 변수... } resource "aws_instance" "web" { subnet_id = module.myvpc. } 💻 AWS VPC 모듈 사용해보기 여기에 이어서 작성한다. 모듈을 사용할 때는 output 변수 이름 잘 확인해야 한다❕ : aws vpc m..
[Terraform] Provisioners (feat.Taint)
📌INDEX Provisioners Provisioner 연결 실습해보기 Taint란? Ansible 실행 방법 ✔️ Provisioners Provisioners는 terraform에서 제공하는 공통 argument이다. "Provisioners are a Last Resort " : 최후의 수단이라는 뜻으로, 되도록 user-data를 사용하는 것을 권장한다. ☁️ 참고 user_data를 먼저 실행할 지 provisioner를 먼저 실행할 지 결정할 수 있는 방법은 없고, provisioner는 순서대로 실행된다. Provisioner 종류 file: 파일 복사 새로 생성된 리소스로 파일 또는 디렉토리를 복사하는 데 사용한다. resource "aws_instance" "web" { # ... # ..
[Terraform] 사용자 데이터(Userdata)와 보안그룹(Security Group)
📌INDEX 사용자-데이터(Userdata) security_group ✔️ 사용자 데이터(Userdata) AWS EC2 인스턴스 생성시 작성하는 userdata와 동일하다. 예시 1) 인스턴스 resource 내에 작성하기 user_data = d > c > EOF 꼭 EOF일 필요는 X [vagrant@controller 01]$ cat a > b > c > ABC 참고) output으로 확인되는 elastic_ip와 ec2 public ip는 왜 다를까? Outputs: app_server_elastic_ip = "3.35.59.108" app_server_public_ip = "3.38.93.53" 출력된 ec2 public ip는 인스턴스가 생성될 때의 ip이고, 탄력적 ip를 할당받으면서 기..