우분투 버전 : Ubuntu 20.04.3 LTS
도커 버전 : Docker verision 20.10.21
1. 도커 설치하기
# 도커 공식 GPG 키 가져와 등록하기
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 도커 공식 Repository 등록하기
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 패키지 update하기
sudo apt-get update
# Docker CE 패키지 설치하기
sudo apt-get install docker-ce
# Docker 설치 확인하기
docker -v
2. 도커그룹에 유저등록하기
# 도커그룹 추가하기
sudo /usr/sbin/groupadd -f docker
# 도커그룹에 사용자 계정 추가하기
sudo /usr/sbin/usermod -aG docker [유저이름]
3. 설명
3-1) 도커 설치하기
> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
※ 용도 : 도커 공식 GPG 키 추가하기
※ 내용 : 도커가 오픈소스라도 무분별한 설치를 막기 위해 공식키를 제공한다. Docker 사이트에서 공식 GPG 키를 발급받은 사용자만이 도커를 사용할 수 있다.
※ 명령어 :
1) curl : 'curl'은 Client URL의 약자로, 서버에서 클라이언트로 데이터를 가져 올 때 사용하는 명령어이다.
2) -fsSL :
-f 옵션은 요청한 서버에서 발생한 에러를 curl이 단순하게 내뱉도록 하는 옵션이다. 보통 서버에서 에러가 발생한 경우, 에러가 발생한 원인을 담은 문서를 클라이언트에게 전달하여 오류에 대한 상세내용을 장엄하게 내뱉지만 -f 옵션은 이를 막고 단순하게 'error 22' 만 내뱉는다.
-s 옵션은 curl의 진행과정을 출력하지 않는 메세지이다.
-S 옵션은 -s 옵션을 사용할 시, 에러가 발생한 경우만 메시지를 출력하도록 하는 옵션이다.
-L 옵션은 만약 요청한 서버URL이 다른 URL로 변경되었을 경우, curl 명령어를 한번 더 수행하여 변경된 URL로 redirect 하는 옵션이다.
3) https://download.docker.com/linux/ubuntu/gpg : gpg 파일이 있는 경로이다.
4) sudo apt-key add - : 우분투 리눅스의 apt툴은 의존성있는 패키지를 설치할 때 사용된다. 도커처럼 키가 필요한 경우가 있으므로 해당 명령어로 apt툴에 전달받은 gpg 키를 키를 추가한다.
※ 출력 :
sudo apt-key list : 명령어를 실행하면 apt툴에 등록된 키를 확인할 수 있다. 여기서 도커키를 찾을 수 있다.
sudo apt-key fingerprint 0EBFCD88 : fingerprint 옵션을 통해 키를 특정지을수 있는 값을 파라미터로 던지면 해당 키를 출력해준다. 도커 공식 GPG키는 0EBFCD88로 특정 지을 수 있다.
mingu@mingu:~$ sudo apt-key list
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
mingu@mingu:~$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
> sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
※ 용도 : 도커 패키지를 가져 올 repository 등록하기
※ 내용 : 키를 가져 왔으면 도커 공식 Repository에서 원격으로 패키지를 가져와야 한다. 이를 위해, 도커 공식 Repository를 apt-repostiory에 등록해야 한다.
※ 명령어 :
add-apt-repository : apt repository에 Repository를 추가하는 명령어이다.
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" : 패키지는 deb 형식으로 가져오며 윈도우의 zip파일과 같다. [arch=amd64]로 64bit 운영체제임을 명시하고 $(lsb_release -cs) 로 우분투 리눅스 버전에 맞는 별명을 가져온다.(focal) 마지막 stable은 설치할 도커 엔진 패키지는 stable 버전임을 명시한다. stable 버전 외에 nightly, test가 있다.
※ 결과 :
/etc/apt/sources.list 에 Repository가 등록되어 있다. 또한 #/etc/apt/sources.list.d/docker.list 가 생성되는데 여기에는 이전에 생성했던 gpg 키 정보 또한 삽입되어 있다. 이를통해, 도커 공식 Repository에서 도커 패키지를 가져올 수 있게 된다.
#/etc/apt/sources.list
deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
#/etc/apt/sources.list.d/docekr.list
deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable
> sudo apt-get update
※ 용도 : sources.list에 등록된 Repository와 현재 로컬 상태를 비교하여 최신화
※ 내용 : 각종 Repository들은 최신 패키지들을 끊임없이 추가한다. 그러므로 각 클라이언트는 꾸준한 update를 통해 패키지를 deb 형식으로 받아놓아야 한다.
> sudo apt-get install docker-ce
※ 용도 : Docker-CE 패키지를 풀어 설치하기
※ 내용 : deb 형식의 패키지는 윈도우의 zip과 같은 파일이므로 이를 풀어 실제 사용이 가능하게 만들어야 한다. Docker-CE는 Community Edition으로 소규모 프로젝트를 위해 제공되는 오픈된 도커엔진이다. Docker-EE는 Enterprise Edition으로 기업에서 사용하는 규모의 프로젝트를 지원하며 연간 과금이 이루어진다.
> docker -v
※ 용도 : 도커가 잘 설치되었는지 버전체크를 통해 확인하기
Docker version 20.10.21, build baeda1f
3-2) 도커그룹에 유저 등록하기
설치가 완료되고 도커 명령어를 사용하려고 하면 아래와 같은 에러가 발생한다.
mingu@mingu:/etc$ docker ps -a
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
docker.sock 파일에 대한 권한문제가 발생한다.
mingu@mingu:/var/run$ ls -lrt | grep docker
srw-rw---- 1 root docker 0 Nov 19 09:28 docker.sock
docker.sock은 docker 내부 프로세스와 소켓통신을 가능하게 만들어주는 인터페이스 역할을 한다. root 계정과 docker 그룹 계정만이 docker.sock 파일을 read하고 write할 수 있는 권한이 있다. 그러므로 도커 명령을 실행하기 위해서는 root 계정이거나 사용자 계정이 docker 그룹 계정에 포함되어야 한다.
> sudo /usr/sbin/groupadd -f docker
/etc/group 파일에 리눅스에서 관리하는 그룹계정이 모여 있는데 그곳에 docker 그룹을 추가한다.
> sudo /usr/sbin/usermod -aG docker [유저이름]
사용하는 계정을 그룹에 추가할 때 usermod 명령어를 쓴다. 그룹명과 추가할 사용자명을 넣어준다.
#그룹에 사용자 추가전
grep docker /etc/group
docker:x:998:
#그룹에 사용자 추가 후
grep docker /etc/group
docker:x:998:mingu
이제 다시 도커 명령어를 실행해보자.
mingu@mingu:/etc$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
이와 같이, sudo를 안 붙여도 docker 명령어를 사용할 수 있게 되었다. 이로써 Docker 엔진 설치가 마무리 되었다.
참고자료
'DevOps > DOCKER' 카테고리의 다른 글
[Docker] Nginx - React - Nodejs - Mysql 연동 실습하기 (0) | 2023.10.05 |
---|---|
[Docker] MultiStage란? (0) | 2023.09.22 |
[Docker] DockerHub에 이미지 올리고 다른 환경에서 실행하기 (0) | 2023.09.20 |
[Docker] Docker Compose로 SpringBoot와 H2 연동 및 실행하기 (2) | 2023.09.18 |
[Docker] 실습용 SpringBoot 프로젝트 만들기 (0) | 2023.09.18 |