✔️ Docker(도커) 설치
✔️ Ubuntu Virtual Machine 구축
Vagrant를 이용해 Ubuntu VM을 구축하고 그 위에 Docker를 설치할 것이다.
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
우선 다음 코드를 사용해 ubuntu VM을 구축한다.
Docker 설치 공식 문서이다.
좌측 네비게이션 바에서 Install on Ubuntu를 클릭한다.
✔️ Docker 구버전 삭제
우선 리눅스에 도커 구버전이 있으면 삭제해준다.
✔️ Docker Engine 설치
sudo apt update
sudo apt-get install ca-certificates curl gnupg lsb-release -y
패키지의 목록을 가져오기 위해서 apt update
명령어를 실행해줘야한다.
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
vagrant@docker:~$ cat /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable
/etc/apt/source.list.d 에 도커 리스트라는 파일을 만들고 해당 내용을 넣는다.
sudo apt update
설치하기 전에 반드시 update를 하여 추가된 새로운 저장소에 있던 패키지의 목록을 다시 가져와야 한다.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- docekr-ce : 도커 엔진
- docker-ce-cli : 엔진을 실행하기 위한 도커 명령어
- containerd.io : 패키지이며 오픈소스이다. 컨테이너를 실행할 수 있는 인더스트리 스탠다드
- docker-compose-plugin : AWX 설치 시 기반이 되었던 것
containerd.io
컨테이너를 구현하기 위해 리눅스 커널 내의 기능인 Cgroup, Namespcae를 사용하기 위해 라이브러리가 존재하는데, container.d.io가 이 라이브러리이다.
Docker던 Podman이던 상관없이 libcontainer(표준)만 있다면 리눅스 커널의 기능을 똑같이 구현할 수 있다.
container.d 가 나오기 전에는 컨테이너를 실행할 수 있는 유틸리티(Docker, LXC, LXD)들의 라이브러리가 모두 달랐다.
따라서 도커에서 만든 컨테이너, LXC에서 만든 컨테이너 등이 서로 호환 되지 않았다.
그 라이브러리를 표준화 시킨 것이 container.d 이다.
이제는 어떤 컨테이너 유틸리티를 쓰던 표준화 되어 있다.
vagrant@docker:~$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-05-03 09:30:03 UTC; 2min 4s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 6803 (dockerd)
Tasks: 8
Memory: 28.2M
CGroup: /system.slice/docker.service
└─6803 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
✔️ 현재 사용자를 Docker 그룹에 추가
우분투 계열은 설치 후 서비스를 시작하지 않아도 알아서 실행된다.
도커 엔진은 도커 그룹에 의해 실행된다.
docker ps
설치 후 아무 설정도 하지 않고 다음 명령을 실행하면 오류가 나지만
sudo docker ps
root 권한으로 실행한 명령어는 오류가 나지 않는다.
하지만 매번 sudo 권한을 사용하는 매우 귀찮으므로 추가 설정을 해줘야 한다.
vagrant@docker:~$ tail /etc/group
ssh:x:114:
landscape:x:115:
admin:x:116:
netdev:x:117:ubuntu
lxd:x:118:ubuntu
vboxsf:x:119:
vagrant:x:1000:
systemd-coredump:x:999:
ubuntu:x:1001:
docker:x:998:
패키지 설치할 때 docker 그룹이 세팅되는데
vagrant@docker:~$ ps -ef | grep dockerd
root 6803 1 0 09:30 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
vagrant 8072 3770 0 09:34 pts/0 00:00:00 grep --color=auto dockerd
실제 도커 프로세스를 보면 루트에 의해서 실행이 된다.
그래서 root 권한이 필요했던 것이다.
vagrant@docker:~$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
지금 현재 사용자가 vagrant 사용자인데 이 사용자는 vagrant 그룹에만 포함되어 있으므로
vagrant@docker:~$ sudo usermod -aG docker vagrant
사용자 정보를 수정하여 vagrant를 docker 그룹에 추가해준다.
exit
vagrant@docker:~$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),998(docker)
그리고 터미널을 닫았다가 다시 연다.
도커 그룹에 포함된 것을 확인할 수 있다.
vagrant@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
sudo
명령어 없이도 도커 명령어가 잘 실행된다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker LifeCycle과 자주 사용하는 옵션 (0) | 2022.05.07 |
---|---|
[Docker] Docker(도커)의 기본 명령어 (0) | 2022.05.07 |
[Docker] Monolithic 구조와 MicroService 구조 (0) | 2022.05.06 |
[Docker] Docker(도커)란 ? (0) | 2022.05.06 |
Docker(도커)란 무엇인가 ? (1) | 2022.03.07 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!