DevOps/DOCKER

[DOCKER] 우분투 리눅스에 도커엔진(Docker CE) 설치하기

IT록흐 2022. 11. 19. 18:49
반응형

 

우분투 버전 : 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 엔진 설치가 마무리 되었다. 

 

 

 


 

 

 

참고자료

 

docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 · Issue #116 · occidere/TIL

docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 상황 docker 설치 후 usermod로 사용자를 docker 그룹에 추가까지 완료 후 터미널 재접속까지 했으나 permission denied 발생 (설치 참고: https://b

github.com

 

[LINUX] 📚 CURL 명령어 사용법 - 다양한 예제로 정리

리눅스 Curl(Client URL) 명령어 curl(client url) 명령어는 프로토콜들을 이용해 URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때 사용하기 위한 명령줄 도구 및 라이브러리이다. 쉽게말해

inpa.tistory.com

 

explainshell.com - curl -fsSL example.org

-L, --location (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. If used together with -i,

explainshell.com

 

반응형