가상화의 목적 -> isolation 리소스 분리 어플리케이션
vm을 사용하면 os가 같이 있기 때문에 비용이 큼
APP + Bins/Lib = Container
컨테이너는 운영체제가 없고, 호스트의 운영체제를 사용 -> 사이즈가 가볍다는 장점
Docker = Docker Engine
Docker CE: Community Edition
Docker EE: Enterprise Edition
YY.MM
Cgourp 과 namespacce를 쉽게 쓸 수 있게 해준게 도커
`~/vagrant/container/Vagrantfile
Vagrant.configure("2") do |config|
# Define VM
config.vm.define "docker" do |centos|
centos.vm.box = "ubuntu/focal64"
centos.vm.hostname = "docker"
centos.vm.network "private_network", ip: "192.168.100.100"
centos.vm.provider "virtualbox" do |vb|
vb.name = "docker"
vb.cpus = 2
vb.memory = 4096
end
end
end
~/.ssh/config
Host docker
HostName 192.168.100.100
User vagrant
IdentityFile C:\Users\Playdata\vagrant\container\.vagrant\machines\docker\virtualbox\private_key
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
모든 패키지에는 서명이 되어있고 그 전자서명을 검증하는 키를 받아오는게 gpgkey
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
레포지토리 정보가 있는데 그파일을 만들고 내용을 넣음
cd /etc/apt/sources.list.d/doker.list
치전 업데이트 -> 새로운 저장소를 저장했기때문에
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker ps 에러
sudo docker 오케이
vagrant@docker:~$ tail /etc/group
docker:x:998: # 도커 그룹 같이 설치
현재 사용자를 도커 그룹에 넣어줌
sudo usermod -aG docker vagrant
그룹에 추가 후 시스템 재시작 해야함
sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
~/.zshrc
...
ZSH_THEME="agnoster"
...
zshcrc파일 업데이트
source ~/.zshrc
zsh-suggestion 자주사용하는 명령어를 자동으로 완성해주는 기능
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
~/.zshrc
73 plugins=(
74 git
75 zsh-autosuggestions
76 zsh-completions
77 docker
78 )
zsh의 docker 플러그인 -> 도커 옵션 검색 가능
도커 아키텍쳐 그림
도커명령어 : client
Docker_HOST : server
Registry 저장소 : 컨테이너를 만들기위한 컨테이너용 이미지가 필요 - 그이미지 저장하는게 레지스트리
로컬에 있는거 쓸수 있고 서비스도 이용가능
대표적인 서비스는 도커 허브
이미지를 엔진이 있는 서버로 가져오고 -> 컨테이너를 만듬
이미지는 항상 레지스트리라는곳에 잇음
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
# 1. 도커데몬에게 도커 클라이언트가 접근을한다
1. The Docker client contacted the Docker daemon.
# 2. 도커 데몬은 hello-wordl 이미지로 컨테이너만듬 로컬에서 찾고 없으면 레지스트리에서 다운
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
# 3. 도커데몬은 새로운 컨테이너를 만듬
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
# 4. 도커데몬은 도커 클라이언트에게 전송한다
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
한번 실행해서 도커가 제대로 설치되었는지 확인하는 이미지
(registry/)repository/name:tag
태그 생략하면 무조건 latest
로컬에 한 번이라도 썼던 이미지 목록
docker images
실행중인 컨테이너 목록을 볼수 잇음
vagrant@docker ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7d8ce3a39ba hello-world "/hello" 4 minutes ago Exited (0) 3 minutes ago stupefied_varahamihira
모든 컨테이너 목록
docekr ps -a
컨테이너 삭제
docker rm <NAMES|ID>
id는 앞 두 글자 이상을 쓰면 자동으로 찾아줌, 앞 두글자가 같은 컨테이너가 두 개이상 있다면 실패
docker rmi
create -> start -> (pause) -> (unpause) -> (kill) -> stop -> rm
run ---------->
application이 종료 컨테이너도 종료(stop)
kill의 시그널은 시스템의 시그널 + 128 -> 시스템의 시그널과 구분하기 위함
docker run -it ubuntu(이미지) bash(커맨드)
bash 입력이 있어야 출력을 할 수 있음 -> 그냥 실행되면 바로 종료 표준입력을 받을수 없기 때문에
-it 옵션은 Shell을 실행하는 이미지에서 사용: centos, ubuntu ...
-d 옵션 application이 계속적으로 실행되어햐 할 때: httpd ...
리눅스 배포판 이름으로된 이미지
컨테이너 이미지에는 운영체제가 없는데❓ 이건 뭘까❓❗
-> base image
이미지를 만들때 사용 (packer처럼 이미지를 생성할 때)
앱에서 사용하는 바이너리와 라이브러리를 포함
건호님 ~/.zshrc 파일 plugins에 docker도 추가 해주세여!