도커 - 사용 방법 익히기

도커 설치하기

이제 도커를 실제로 설치하고 사용해 볼 차례에요. 도커는 우분투의 apt 를 통해 설치할 수 있어요.

다음의 명령어를 실행해 주세요.

sudo apt install docker.io docker-compose-v2

여기서 docker.io 는 이전 가이드에서 설명한 도커이고, docker-compose-v2도커 컴포즈라는 유용한 도커의 플러그인이에요.

설치가 완료되면 자동으로 시작되며, 재부팅 이후에도 자동으로 실행돼요. 그래서 특별한 일이 없다면 따로 신경 쓸 필요는 없어요. 설치는 정말 간단하죠?

설치가 완료되면 이번엔 다음의 명령어를 실행해 보세요.

sudo docker ps

정상적으로 동작한다면 이와 같은 출력이 나오게 될 거예요.
도커는 기본적으로 관리자 권한이 필요해서 sudo와 함께 사용해야 해요.


편리하게 사용하기

앞으로는 docker 라는 명령어를 자주 사용하게 될 거예요. 하지만 그 때마다 sudo 와 비밀번호를 입력하는 것은 꽤나 피곤한 일 이겠죠? 그래서 sudo 없이도 docker 명령어를 사용할 수 있도록 조금 개선해 볼게요.

먼저 다음의 명령어를 실행해 주세요.

sudo usermod -aG docker $USER

이 명령어는 현재 로그인 된 사용자를 docker 라는 사용자 그룹에 추가하는 작업이에요.

리눅스에는 사용자가 속한 그룹 이라는 개념이 존재하는데, 이 그룹 단위로 사용자에게 특정한 권한을 부여할 수 있어요.

도커를 설치하면 docker 라는 사용자 그룹이 자동으로 추가되고, 이에 속한 사용자는 docker 를 관리자 권한 없이 사용할 수 있게 돼요. 그래서 이 그룹에 현재 사용자를 추가한 거예요.

이후엔 다음의 명령어를 통해 컴퓨터를 한번 재부팅 해주세요.

sudo reboot

재부팅 이후, 이번에는 sudo 없이 다음의 명령어를 다시 실행해 보세요.

docker ps

잘 동작한다면 이와 같이 나올 거예요. 이제 sudo 없이도 docker 를 사용할 수 있게 됐어요.


사용해보기

컨테이너 실행하기

혹시 이전 공유기 가이드에서 apt를 통해 nginx 를 설치하셨다면 다음의 명령어를 통해 먼저 삭제해 주세요.

sudo apt remove nginx

이제 docker를 사용해 볼 차례에요. 다음의 명령어를 실행해 보세요.

docker run -d -p 80:80 nginx

잘 동작한다면 이와 같은 화면이 나올 거예요. 이제 브라우저를 열고 서버의 IP로 들어가 보세요.

nginx가 잘 동작하고 있는 모습이 나오죠? 이제 nginx는 기존의 apt 가 아닌 도커를 통해 동작하게 됐어요.

여기서 사용한 docker run 명령어는 이미지를 도커 서버에서 가져와 컨테이너를 생성하는 명령어에요.
이는 다음과 같은 구조를 가지고 있어요.

docker run ...옵션 이미지_이름

여기서 컨테이너란 용어가 나오는데, 컨테이너는 도커 이미지로 실행한 가상 환경의 단위를 의미해요. 이미지가 도장이라면 컨테이너는 도장으로 찍혀진 문양이라 이해할 수 있어요.

docker run에는 많은 추가 옵션이 있는데 우리가 nginx에서 사용한 옵션들은 다음과 같아요.

  • -d: 백그라운드로 실행해요.
  • -p 80:80: 서버의 80 포트를 컨테이너의 80 포트로 전달해요.
  • nginx: nginx 이미지를 사용해요.

여기서 가장 중요한 건 -p 옵션이에요. 도커 컨테이너는 일종의 컴퓨터라 볼 수 있으니 서버 컴퓨터처럼 독립적인 네트워크(IP, 포트) 환경을 가지게 돼요.

flowchart LR;

external["외부"];
subgraph server["서버"];
server-80["80"];
subgraph nginx["Nginx 컨테이너"]
nginx-80["80"]
end;
nginx-80 <--> server-80;
end;

server-80 <--> external;

그런데 도커 컨테이너는 기본적으로 격리된 가상 네트워크 환경이라, 외부와 마음대로 통신할 수는 없어요. 그래서 호스트인 서버 컴퓨터의 포트를 전달해서 컨테이너가 외부와 통신할 수 있도록 설정해줘야 해요.

-p 80:80는 호스트의 80포트와 컨테이너의 80포트를 연결하겠다는 의미에요. 이 옵션을 통해 nginx 컨테이너는 호스트의 80 포트를 통해 외부와 연결되고, 브라우저로도 접속할 수 있게 돼요.

이외에도 docker run 에는 수많은 옵션이 있어요. 앞으로 다른 옵션들에 대해서도 자연스럽게 알게 되실 거예요.


컨테이너 관찰하기

이번에는 실행중인 컨테이너를 관찰해 볼 차례에요. 다음의 명령어를 실행해 보세요.

docker ps

docker ps는 실행 중인 컨테이너의 상태를 관찰할 수 있는 명령어에요. 조금 전 nginx 컨테이너를 생성했으니 목록에 하나가 출력 된 모습이죠?

이 목록에서 중요하게 확인할 수 있는 정보들은 다음과 같아요.

  • 어떤 이미지로 생성된 컨테이너인지
  • 포트 전달이 어떻게 구성되어 있는지
  • 컨테이너의 이름은 무엇인지

여기서 이름은 컨테이너를 개별로 제어할 때 사용할 수 있는 고유한 이름이에요. 이는 컨테이너를 생성할 때 별도로 지정할 수도 있고, 지정하지 않는다면 랜덤한 이름으로 자동으로 할당되게 돼요.

컨테이너를 여러개 띄우다 보면 내가 뭘 띄우고 있고 어떤 포트를 사용하고 있는 건지 헷갈릴 수 있어요. 그때마다 docker ps를 통해서 정보를 확인해 보시면 도움이 될 거예요.


컨테이너 중단하기

이번에는 생성한 컨테이너를 중단할 차례에요. 다음의 명령어를 참고해서 실행해 보세요.

docker stop 컨테이너_이름

컨테이너의 이름은 docker ps를 통해서 확인할 수 있어요.

컨테이너를 중단하고 docker ps를 다시 실행해보면 목록이 비어있을 거예요.
그리고 이제는 브라우저에서도 nginx 에 접근할 수 없게 돼요.


컨테이너 재시작하기

가동을 중단한 컨테이너는 아직 삭제된 상태는 아니에요. 그래서 언제든 재시작 할 수 있어요.

먼저 다음의 명령어를 실행해 보세요.

docker ps -a

docker ps-a 옵션을 사용하면 중단된 컨테이너의 목록도 함께 출력 돼요.
조금 전 중단했던 nginx 컨테이너도 함께 나오는 모습이죠?

이번에는 다음의 명령어를 참고해서 컨테이너를 재시작 해보세요.

docker restart 컨테이너_이름

재시작 후 다시 docker ps 명령어로 확인해 보면, 다시 컨테이너가 동작하고 있는 것을 확인할 수 있을 거예요.


컨테이너 삭제하기

이번에는 컨테이너를 삭제해 볼 차례에요.

먼저 docker stop 명령어를 통해 컨테이너를 중단하고, 다음의 명령어를 참고해 실행해 보세요.

docker rm 컨테이너_이름

컨테이너를 삭제하면 이제 docker ps -a 명령어에서도 더 이상 출력되지 않게 돼요.


이제 여러분은 도커를 통해 컨테이너를 생성/중단/재시작/삭제하는 기본적인 관리 작업을 할 수 있게 됐어요. 컨테이너의 라이프사이클을 관리할 수 있게 된 거예요.