Backends Docker

처음 시작하는 Docker

Docker는 각종 OS나 어플리케이션들을 컨테이너라는 가상의 환경으로 실행하고 관리하는 편리한 도구입니다. 개발자의 로컬환경에 각종 서버들을 가상으로 구동할 수도 있고, 이를 실제 운영서버에까지 그대로 이전하여 개발환경과 운영환경의 차이를 줄이는데 활용하기도 합니다.

이 글은 Docker를 처음 접하시는 분들이 예제를 따라서 Docker를 설치하고 사용해볼 수 있도록 안내하는 글입니다. 많은 IT기술이 그러하듯, 설명을 여러 번 읽어보아도 이해되지 않던 궁금증이 일단 사용해보고 나면 풀리는 경우가 많습니다. 이번 글 또한 읽으시는 여러분에게 설명을 뛰어넘고 일단 Docker를 사용해보면서 이를 이해할 수 있는 시작점이 될 것입니다.

 

Docker Desktop 설치와 실행

Docker Desktop은 Docker 개발사에서 직접 개발하고 배포하는 소프트웨어로, 이 소프트웨어를 설치하는 것은 Docker를 사용할 수 있는 가장 쉬운 방법입니다. Docker Desktop의 OS별 설치파일을 이곳에서 다운로드 받아, 일반적인 소프트웨어를 설치하는 것과 동일한 과정을 거쳐 설치합니다.

설치 후에 Docker Desktop을 실행하면 아래와 같은 화면이 표시됩니다. 이 화면에서 우리는 Docker로 구동한 각종 컨테이너와 자원들을 GUI를 통하여서 손쉽게 살펴볼 수 있습니다. 다만 처음 설치한 시점에서는 아직 구동된 컨테이너가 없으므로, 화면에는 No containers running라고 표시될 것입니다.

(주의) Docker Desktop은 2022년 2월부터 일부 유료화가 되었습니다. 종업원수 250명 이상 또는 매출액 1,000만 달러 이상의 기업은 Docker Desktop의 사용을 위한 사용료를 지불해야 하므로 유의해야 합니다. 다만 상기 요건 이하의 기업이나 개인 사용자는 여전히 무료로 사용할 수 있습니다. Windows에서 Docker Desktop 없이 Docker 환경을 구성하는 방법은 이 글을 참고하세요.

 

커맨드라인으로 입력하는 Docker 명령어

Docker Desktop를 설치하면, 이제 커맨드라인으로 Docker의 각종 명령어를 실행할 수 있게 됩니다. 이 명령어들은 Windows의 경우에는 명령 프롬프트(cmd)나 Powershell에서, MacOS의 경우에는 터미널 등에서 실행할 수 있습니다.

첫 번째로 실행해볼 명령어는 웹서버의 대표주자인 Nginx를 Docker 컨테이너로 구동하는 명령어입니다. 커맨드라인으로 아래 명령어를 실행해봅니다.

docker run -p 8081:80 -d nginx

명령어를 실행하면 먼저 무언가 다운로드를 받는듯한 메시지가 화면에 표시됩니다. 그리고 이어서는 무언가 해시값과 같은 값이 화면에 표시되고는 명령 프롬프트로 돌아오는 것을 확인할 수 있습니다. 이 해시값은 Container ID라고 하며, 컨테이너를 실행하거나 정지하거나 제어할 때 사용됩니다. 아래 스크린샷은 명령어를 Windows에서 Powershell을 이용하여 실행한 화면입니다.

이 때 Docker Desktop 화면의 좌측메뉴에서 Containers / Apps를 선택해보면, 아래와 같이 하나의 컨테이너가 구동되어 있는 것을 확인할 수 있습니다. 컨테이너의 이름은 무작위로 지어지기 때문에, 스크린샷과 여러분의 화면이 다를 수 있습니다.

이제 웹 브라우저를 열어서 주소창에 http://localhost:8081을 입력하고 주소를 열어봅니다. 무슨 영문인지 알 수 없지만, 나의 로컬환경의 8081 포트가 열려 있고, 그곳에 nginx 서버의 초기 페이지가 표시되어 있는 것을 볼 수 있습니다.

어째서 명령어 한 줄에 8081 포트가 열리면서 Nginx 서버가 만들어졌을까요. Docker 명령어를 살펴보면 이해할 수 있습니다. 우리가 실행했던 명령어를 뜯어보면 다음과 같습니다.

docker run -p 8081:80 -d nginx
  • run
    Docker 명령어 중에서 새로운 컨테이너의 실행을 의미하는 명령어입니다. 이렇게 실행된 컨테이너는 마치 나의 로컬 PC 또는 Mac의 안에 있는 또다른 가상의 서버처럼 작동을 합니다.
  • -p 8081:80
    run 명령어에는 다양한 옵션을 사용할 수 있습니다. 그 중에서 -p는 포트 포워딩 옵션입니다. 예제의 -p 8081:80 옵션은 컨테이너의 80 포트를 나의 로컬 PC나 Mac의 8081 포트에 연결하라는 의미입니다.
  • -d
    run 명령어의 또다른 옵션으로, 컨테이너를 백그라운드에서 실행하도록 합니다. 이 옵션을 생략하면 커맨드라인 창을 끄면 컨테이너도 같이 종료됩니다.
  • nginx
    마지막 인자는 컨테이너의 이미지 이름입니다. Docker에서 이미지란 Docker에서 컨테이너를 실행하기 위하여 구성된 명령어들을 담은 패키지를 가리킵니다. 하지만 이해가 어려운 학습초반에는 소프트웨어를 각하고 학습을 진행하여도 무방합니다.

결론적으로 위 내용을 명령어를 실행하면, Nginx 이미지로 Docker 컨테이너가 만들어지며, 컨테이너에서 내부적으로 열린 80 포트가 컨테이너를 실행한 여러분의 PC나 Mac의 8081 포트로 연결됩니다. 따라서 외부에서는 여러분의 PC나 Mac의 8081 포트에 접속하여 HTTP 요청을 보내면, 그 요청을 컨테이너의 80 포트로 전달해주게 되고, 컨테이너의 Nginx 웹서버가 이 요청을 처리하게 됩니다.

 

여러 가지 Docker 명령어

Docker에는 run 외에도 다양한 명령어가 있습니다. 대표적으로 컨테이너의 목록을 출력하는 ps 명령어가 있습니다. 아무 옵션도 붙이지 않으면 실행 중인 컨테이너 목록만 출력하지만, –all이라는 옵션을 붙여 실행하면 정지된 컨테이너를 포함하여 출력합니다.

docker ps --all

실행된 컨테이너를 정지시키는 stop 명령어와 다시 시작하는 start 명령어도 있습니다. 이 때 명령어 뒤에는 Container ID를 붙여주어야 하는데, 여러 컨테이너에 중뵥되지 않는 선에서 앞자리 일부만 입력하여도 됩니다.

docker stop 30061e
docker start 30061e

컨테이너에 기록된 로그를 조회하는 명령어도 있습니다. logs 명령어이며, -n 옵션을 통해 출력할 라인수를 설정할 수도 있습니다. 역시 명령어 뒤에는 Container ID의 앞자리를 입력해야 합니다.

docker logs -n 15 30061e

이 외에도 Docker에는 많은 명령어들이 있고, 각 명령어에는 많은 옵션들이 있습니다. 이 모든 내용들은 –help 옵션을 붙여서 명령어를 실행하여 열람을 할 수 있습니다.

docker --help
docker run --help

 

Docker Hub에서 Docker Image 찾기

이번 글에서는 Nginx 웹서버 컨테이너만 예제로 삼아 살펴보았지만, 웹 사이트인 Docker Hub에는 훨씬 많은 Docker 이미지가 제공되고 있습니다. 그 가운데에는 Debian · Ubuntu와 같은 OS, MySQL · Oracle과 같은 DBMS 등 매우 다양한 이미지들이 준비되어 있습니다. 많은 Docker 이미지는 내용에 어느 정도 실행방법이나 필수적으로 입력해야 하는 인자들에 대한 설명도 기재되어 있으니, 함께 확인해보면 좋습니다.

사용할 이미지를 선택할 때는 일반적으로는 개발사가 제공하는 공식 이미지(Official Image) 표시가 되어 있는 이미지를 이용하는 것이 좋습니다. 공식 이미지는 보안적으로 안전하고 또한 안정적으로 작동합니다. 한편, 검증되지 않은 서드파티의 이미지 중에는 백도어 공격의 통로가 되거나 코인채굴에 악용하는 등의 문제가 있는 경우도 있으니 사용을 가급적 피할 것을 권장합니다.

1 thought on “처음 시작하는 Docker”

Leave a Reply

Your email address will not be published. Required fields are marked *