Docker는 일종의 "가상 상자"라고 생각하시면 됩니다.
그리고 이 상자 안에 다양한 프로그램과 그 프로그램이 필요로 하는 모든 것들을 담아둘 수 있죠.
예를 들어, 우리가 컴퓨터에 게임을 설치하려면 여러 가지 설정을 해야 하지만, Docker라는 상자에 그 게임을 넣으면 어디서든지 그 상자만 열어서 게임을 바로 할 수 있는 것과 같습니다.
즉, 이 상자는 어디서든지 똑같이 작동하는 프로그램을 만들기 위해 사용하는 도구라고 생각할 수 있습니다.
Docker을 이용하면 다른 컴퓨터에서도 복잡한 설정 없이 똑같이 프로그램을 사용할 수 있어서 아주 편리합니다.
패키지 설치 전 서버의 패키지 목록을 업데이트하여 최신 상태인지 확인합니다.
sudo apt-get update
Reading package lists... Done 라는 메세지가 출력되면 문제 없이 패키지 목록이 업데이트 된 것입니다.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) ...
GPG 키는 일종의 디지털 서명입니다.
누군가가 만든 파일이나 프로그램이 정말로 그 사람이 만든 것인지 확인하기 위해 사용됩니다.
예를 들어, Docker라는 소프트웨어를 만든 사람들이 그 소프트웨어에 자신들만의 서명을 넣고, 이 서명을 가지고 있는 사람들은 "아, 이건 Docker 팀이 만든 진짜 소프트웨어구나!" 하고 확인할 수 있게 되는 거죠.
인터넷에서 프로그램을 다운로드할 때, 누군가가 그 파일을 중간에서 바꾸거나, 해킹해서 악성 코드를 심을 수 있습니다.
GPG 키를 사용하면 다운로드한 파일이 Docker 개발자들이 만든 원본 파일임을 확인할 수 있어요.
그래서 GPG 키를 사용해 우리는 "안전하게" Docker를 설치할 수 있습니다.
정리하면, GPG 키는 파일의 출처와 무결성을 확인하기 위한 도구입니다.
이렇게 하면 우리가 설치하는 Docker가 변조되지 않은 안전한 파일이라는 걸 보장받을 수 있습니다.
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 명령어는 기본적으로 오류가 발생하지 않는 한 아무 메시지도 출력하지 않도록 설정되어 있습니다.
Docker는 지속적으로 업데이트되며 새로운 기능이나 보안 패치를 배포합니다.
이 패키지들을 최신 상태로 안전하게 유지하기 위해, Docker팀은 공식적인 저장소를 제공해서 사용자들이 그곳에서 Docker 소프트웨어를 다운로드하고 설치할 수 있게 합니다.
Ubuntu의 기본 저장소에는 Docker가 포함되지 않거나, 포함되어 있더라도 최신 버전이 아닐 수 있습니다.
그래서 Docker의 최신 버전과 보안 업데이트를 받기 위해 공식 Docker 저장소를 추가하는 것입니다.
소프트웨어 저장소가 공격받아 악성 코드가 포함된 패키지를 배포할 가능성을 막기 위해 Docker는 몇 가지 중요한 보안 메커니즘을 사용합니다.
GPG 키 서명 : 앞서 설명드린 것처럼, Docker 패키지들은 GPG 키로 서명되어 있습니다.
GPG 키는 각 패키지가 Docker의 공식 패키지라는 것을 보장해줍니다.
서버에서 패키지를 다운로드할 때, GPG 키를 사용해 이 패키지가 진짜 Docker에서 배포한 것인지 확인할 수 있습니다.
만약 패키지가 변조되었거나, 인증되지 않은 파일이라면 설치가 차단됩니다.
HTTPS 보안 통신 : 저장소와 통신할 때 HTTPS(보안된 연결)를 사용해 데이터를 암호화합니다.
이로 인해 중간에서 통신이 도청되거나 변조되는 것을 막을 수 있습니다.
Docker 공식 저장소의 관리 : Docker는 저장소의 보안을 강화하고 지속적으로 모니터링합니다.
공격 가능성을 최소화하기 위해, Docker는 보안 전문가들이 관리하며 업데이트를 배포합니다.
결론적으로, Docker의 공식 저장소는 GPG 키 서명과 HTTPS를 통해 보안을 강화하여 사용자가 안전하게 최신 버전을 설치할 수 있도록 설계되어 있습니다.
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
echo : 저장소 정보를 출력하는 명령어입니다.deb [arch=arm64...] : Docker를 설치할 저장소 URL을 지정합니다.arch=arm64는 라즈베리파이와 같은 ARM 기반 장치에서 Docker를 설치할 수 있도록 합니다.$(lsb_release -cs) : 현재 Ubuntu 버전 코드를 자동으로 삽입합니다.tee /etc/apt/sources.list.d/docker.list : 저장소 정보를 /etc/apt/sources.list.d/docker.list 파일에 저장합니다.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)) ...
sudo systemctl status 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가 제대로 실행 중인 것입니다.Docker의 기본 테스트용 컨테이너인 "Hello World"를 실행하여 Docker가 제대로 작동하는지 확인해보겠습니다.
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.
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
Docker 컨테이너를 실행할 때 자동 재시작 옵션을 설정하겠습니다.
새로 컨테이너를 실행할 때 --restart 옵션을 사용하여 서버 재부팅 후에도 컨테이너가 자동으로 시작되도록 설정합니다.
sudo docker run --restart unless-stopped -d your-container-image
--restart unless-stopped : 수동으로 중지하지 않는 한 컨테이너가 자동으로 다시 시작됩니다.-d : 컨테이너를 백그라운드에서 실행합니다.your-container-image : 실행하고 싶은 Docker 이미지 이름을 대신 넣으면 됩니다.sudo docker run --restart unless-stopped -d nginx
7b1d86a0f12f3dfd7a41ef68a2e123456789abcdefg...
sudo docker ps
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를 사용하여 다양한 컨테이너를 실행하거나, 자신만의 애플리케이션을 배포할 준비가 완료되었습니다.
