Docker 설치하기

Docker에 대해 이해가 안되는 부분이 많아 이것저것 나와있는 설명글이 많을 예정입니다.ㅎ

⭐ Docker란?

Docker는 일종의 "가상 상자"라고 생각하시면 됩니다.
그리고 이 상자 안에 다양한 프로그램과 그 프로그램이 필요로 하는 모든 것들을 담아둘 수 있죠.
예를 들어, 우리가 컴퓨터에 게임을 설치하려면 여러 가지 설정을 해야 하지만, Docker라는 상자에 그 게임을 넣으면 어디서든지 그 상자만 열어서 게임을 바로 할 수 있는 것과 같습니다.
즉, 이 상자는 어디서든지 똑같이 작동하는 프로그램을 만들기 위해 사용하는 도구라고 생각할 수 있습니다.
Docker을 이용하면 다른 컴퓨터에서도 복잡한 설정 없이 똑같이 프로그램을 사용할 수 있어서 아주 편리합니다.

1. 패키지 목록 업데이트

패키지 설치 전 서버의 패키지 목록을 업데이트하여 최신 상태인지 확인합니다.

sudo apt-get update
  • Reading package lists... Done 라는 메세지가 출력되면 문제 없이 패키지 목록이 업데이트 된 것입니다.

2. Docker 설치를 위한 필수 패키지 설치

Docker를 설치하기 전에 필요한 몇 가지 도구들을 설치해야 합니다.
이 도구들은 Docker가 안전하고 효율적으로 작동하는 데 필요합니다.

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  • 명령어 설명
    (1) sudo : 관리자 권한으로 명령을 실행하는 명령어로 시스템에 중요한 변경을 할 때 사용합니다.
    (2) apt-get install : 새로운 프로그램이나 패키지를 설치할 때 사용하는 명령어입니다.
    (3) apt-transport-https : HTTPS(보안 연결)를 통해 패키지를 다운로드할 수 있도록 도와주는 패키지입니다.
    (4) ca-certificates : 인증서를 관리하는 패키지로, 안전한 웹사이트와의 통신을 가능하게 합니다.
    (5) curl : 서버와 통신하거나 데이터를 가져오는 도구입니다.
    Docker 설치 시 필요한 정보를 인터넷에서 가져오는데 사용됩니다.
    (6) software-properties-common : 소프트웨어 저장소를 관리할 수 있는 도구입니다. Docker와 같은 외부 소프트웨어를 설치할 때 저장소를 추가할 수 있게 합니다.

  • 설치 진행 중 Do you want to continue? [Y/n] 메세지가 출력되면 "Y"를 입력하여 설치가 계속 진행하도록 합니다.

  • 설치 진행이 성공적으로 완료되면 아래와 같은 결과 메세지를 확인하실 수 있습니다.

Setting up apt-transport-https (1.6.12) ...
Setting up ca-certificates (20210119~18.04.2) ...

3. Docker GPG 키 추가

⭐ GPG 키란?

GPG 키는 일종의 디지털 서명입니다.
누군가가 만든 파일이나 프로그램이 정말로 그 사람이 만든 것인지 확인하기 위해 사용됩니다.
예를 들어, Docker라는 소프트웨어를 만든 사람들이 그 소프트웨어에 자신들만의 서명을 넣고, 이 서명을 가지고 있는 사람들은 "아, 이건 Docker 팀이 만든 진짜 소프트웨어구나!" 하고 확인할 수 있게 되는 거죠.

⭐ GPG 키가 왜 필요한가?

인터넷에서 프로그램을 다운로드할 때, 누군가가 그 파일을 중간에서 바꾸거나, 해킹해서 악성 코드를 심을 수 있습니다.
GPG 키를 사용하면 다운로드한 파일이 Docker 개발자들이 만든 원본 파일임을 확인할 수 있어요.
그래서 GPG 키를 사용해 우리는 "안전하게" Docker를 설치할 수 있습니다.
정리하면, GPG 키는 파일의 출처와 무결성을 확인하기 위한 도구입니다.
이렇게 하면 우리가 설치하는 Docker가 변조되지 않은 안전한 파일이라는 걸 보장받을 수 있습니다.

  • 아래 명령어를 통해 Docker의 GPG키를 다운로드하고 변환하여 시스템에 저장합니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • 명령어 설명
    (1) curl -fsSL : 인터넷에서 데이터를 가져오기 위해 사용하는 명령어입니다. 여기서는 Docker의 GPG 키를 가져옵니다.
    (2) gpg --dearmor -o : 가져온 GPG 키를 시스템에서 사용할 수 있는 형식으로 변환해 저장하는 명령어입니다.
    (3) /usr/share/keyrings/docker-archive-keyring.gpg : 변환된 GPG 키가 저장되는 위치입니다.

  • curl -fsSL 명령어는 기본적으로 오류가 발생하지 않는 한 아무 메시지도 출력하지 않도록 설정되어 있습니다.

4. Docker 저장소 추가

⭐ Docker는 왜 별도의 패키지 저장소가 필요한가?

Docker는 지속적으로 업데이트되며 새로운 기능이나 보안 패치를 배포합니다.
이 패키지들을 최신 상태로 안전하게 유지하기 위해, Docker팀은 공식적인 저장소를 제공해서 사용자들이 그곳에서 Docker 소프트웨어를 다운로드하고 설치할 수 있게 합니다.
Ubuntu의 기본 저장소에는 Docker가 포함되지 않거나, 포함되어 있더라도 최신 버전이 아닐 수 있습니다.
그래서 Docker의 최신 버전과 보안 업데이트를 받기 위해 공식 Docker 저장소를 추가하는 것입니다.

⭐ 저장소가 공격받을 가능성은 없을까?

소프트웨어 저장소가 공격받아 악성 코드가 포함된 패키지를 배포할 가능성을 막기 위해 Docker는 몇 가지 중요한 보안 메커니즘을 사용합니다.

  1. GPG 키 서명 : 앞서 설명드린 것처럼, Docker 패키지들은 GPG 키로 서명되어 있습니다.
    GPG 키는 각 패키지가 Docker의 공식 패키지라는 것을 보장해줍니다.
    서버에서 패키지를 다운로드할 때, GPG 키를 사용해 이 패키지가 진짜 Docker에서 배포한 것인지 확인할 수 있습니다.
    만약 패키지가 변조되었거나, 인증되지 않은 파일이라면 설치가 차단됩니다.

  2. HTTPS 보안 통신 : 저장소와 통신할 때 HTTPS(보안된 연결)를 사용해 데이터를 암호화합니다.
    이로 인해 중간에서 통신이 도청되거나 변조되는 것을 막을 수 있습니다.

  3. Docker 공식 저장소의 관리 : Docker는 저장소의 보안을 강화하고 지속적으로 모니터링합니다.
    공격 가능성을 최소화하기 위해, Docker는 보안 전문가들이 관리하며 업데이트를 배포합니다.

결론적으로, Docker의 공식 저장소는 GPG 키 서명과 HTTPS를 통해 보안을 강화하여 사용자가 안전하게 최신 버전을 설치할 수 있도록 설계되어 있습니다.

  • 아래 명령어를 통해 Docker를 설치하기 위한 리포지토리를 추가합니다.
echo "deb [arch=arm64 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
  • 명령어 설명:
    (1) echo : 저장소 정보를 출력하는 명령어입니다.
    (2) deb [arch=arm64...] : Docker를 설치할 저장소 URL을 지정합니다.
    여기서 arch=arm64는 라즈베리파이와 같은 ARM 기반 장치에서 Docker를 설치할 수 있도록 합니다.
    (3) $(lsb_release -cs) : 현재 Ubuntu 버전 코드를 자동으로 삽입합니다.
    (4) tee /etc/apt/sources.list.d/docker.list : 저장소 정보를 /etc/apt/sources.list.d/docker.list 파일에 저장합니다.
  • 이번에도 명령어 출력값이 없다면 정상적으로 처리된 것입니다.

5. Docker 설치

  • 아래 명령어를 통해 패키지 목록을 업데이트하고 Docker를 설치합니다.
sudo apt-get update
sudo apt-get install docker-ce
  • 명령어 설명
    (1) sudo apt-get update : 방금 추가한 Docker 저장소의 패키지 목록을 업데이트합니다.
    (2) sudo apt-get install docker-ce : Docker의 Community Edition(CE)을 설치합니다. 최신 버전의 Docker가 이 명령을 통해 설치됩니다.

  • sudo apt-get install docker-ce 명령어 실행 중 "Do you want to continue? [Y/n]" 메세지가 출력되면 "Y"를 입력해 계속 설치를 진행합니다.

  • 아래 메세지가 출력된다면 큰 문제 없이 설치가 완료된 것입니다.

Setting up docker-ce (5:19.03.12~3-0~ubuntu-$(lsb_release -cs)) ...

6. Docker가 정상적으로 설치되었는지 확인

  • 아래 명령어를 통해 Docker가 잘 설치되고 실행 중인지 확인합니다.
sudo systemctl status docker
  • Docker 서비스가 정상적으로 실행 중이라면 아래와 비슷한 출력됩니다.
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2024-09-05 12:34:56 UTC; 1min ago
  • Active: active (running)이 표시되면 Docker가 제대로 실행 중인 것입니다.

7. Docker 테스트 - Hello World 컨테이너 실행

Docker의 기본 테스트용 컨테이너인 "Hello World"를 실행하여 Docker가 제대로 작동하는지 확인해보겠습니다.

  • 아래 명령어를 통해 테스트 컨테이너 "Hello World"를 실행합니다.
 sudo docker run hello-world
  • 명령어 설명
    (1) docker run hello-world : 이 명령어는 Docker Hub에서 hello-world라는 테스트용 이미지를 다운로드하고 실행합니다.

  • 컨테이너가 정상적으로 실행되면 아래와 같은 성공 메시지를 출력합니다.

Hello from Docker!
This message shows that your installation appears to be working correctly.

8. Docker 서비스 자동 시작 확인 및 설정

  • 아래 명령어를 통해 Docker 서비스가 시스템 부팅 시 자동으로 시작되도록 설정합니다.
sudo systemctl enable docker
  • 아래와 같이 출력되는 경우 정상적으로 설정된 것입니다.
Synchronizing state of docker.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable docker

9. Docker 컨테이너 자동 시작 설정

Docker 컨테이너를 실행할 때 자동 재시작 옵션을 설정하겠습니다.
새로 컨테이너를 실행할 때 --restart 옵션을 사용하여 서버 재부팅 후에도 컨테이너가 자동으로 시작되도록 설정합니다.

sudo docker run --restart unless-stopped -d your-container-image
  • 명령어 설명
    (1) --restart unless-stopped : 수동으로 중지하지 않는 한 컨테이너가 자동으로 다시 시작됩니다.
    (2) -d : 컨테이너를 백그라운드에서 실행합니다.
    (3) your-container-image : 실행하고 싶은 Docker 이미지 이름을 대신 넣으면 됩니다.
  • 명령어 작성 예시
sudo docker run --restart unless-stopped -d nginx
  • 아래와 같은 컨테이너의 ID가 출력되면 성공적으로 실행된것입니다.
 7b1d86a0f12f3dfd7a41ef68a2e123456789abcdefg...
  • 마지막으로 Server Reboot를 진행해서 Nginx, Samba 그리고 새로 자동 실행을 설정한 Docker 이미지가 잘 적용되었는지 확인합니다.
sudo docker ps
  • Server Reboot 후 위 코드를 통해 Docker 이미지가 잘 실행되는지 확인합니다.
    성공적으로 적용된 경우 아래와 비슷한 메세지가 출력됩니다.
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS              PORTS     NAMES
bbc22ca11237   nginx     "/docker-entrypoint.…"   7 minutes ago   Up About a minute   80/tcp    loving_maxwell
  • 아래는 컨테이너 조작하는 코드들이니 필요 시 참고하도록 하자.
# 컨테이너 중지 명령어
sudo docker stop <container-id>

# 컨테이너 다시 시작 명령어
sudo docker start <container-id>

# 컨테이너 삭제 명령어
sudo docker rm <container-id>

# 자동 재시작 정책 수정
sudo docker run --restart no -d <container-id>

여기까지 문제 없이 완료되었다면 Docker가 성공적으로 설치되고, 정상적으로 작동하고 있다는 뜻입니다.
이제 Docker를 사용하여 다양한 컨테이너를 실행하거나, 자신만의 애플리케이션을 배포할 준비가 완료되었습니다.

profile
코딩 입문

0개의 댓글