Docker 시리즈 - 2. Docker Basic
도커의 기본 부터 차근차근 2021-03-20

Review

지난 시간에는 Docker를 왜 배우는지에 대해 간단하게 알아 보았습니다. OS 커널을 공유 함으로써, 빠른 가상화가 가능하고, 완전한 프로세스 분리가 가능하며, 그 프로세스의 환경을 그대로 재현 함으로써 다른 컴퓨터에서도 오류가 안 뜨게 끔 하는 것이 Docker의 핵심 이라고 이야기 했었죠? 이제 Docker를 진짜 사용해 보는 시간을 가져 보겠습니다!

Docker Install

Docker 설치법은

$ sudo wget -qO- http://get.docker.com/ | sh

Hello World!

Docker를 성공적으로 설치 했는지 확인 하기 위해서는 터미널에서 확인 가능합니다. Windows 유저는 WSL 2를 이용하여 Docker 명령어를 실행 할 수 있습니다. 한 번 다음 명령어를 쳐 볼까요?

$ docker -v

다음과 같이 출력 되었다면 성공입니다!

이제 저희만의 컨테이너를 한 번 실행 해 볼까요? Docker 에서는 Hello World 컨테이너를 지원 합니다. 다음 코드를 실행 해 볼까요?

$ docker run -d -p 80:80 docker/getting-started

이 코드에 대한 설명은 다음과 같습니다.

  • run: 컨테이너를 실행 합니다.
  • -d: 컨테이너를 detached mode, 즉, 백그라운드에서 실행 한다는 뜻입니다.
  • -p 80:80: 호스트의 80번 포트를 컨테이너의 80번 포트에 mapping 한다는 뜻입니다.
  • docker/getting-started: 저희가 사용할 이미지 입니다. 해당 이미지가 설치 되어 있지 않다면, 설치합니다.

Docker Image Check

이렇게 Docker Image를 다운로드 받고, 실행까지 완료 했습니다. 일단 우리가 백그라운드에서 실행을 했으니, 저희가 좀 체크해 봐야 할 것이 몇가지 있네요. 일단 Image가 설치 되었는지, 확인 해 볼까요?

$ docker image ls
  • image: Docker Image와 관련한 명령어를 실행 할 수 있습니다.
  • ls: Docker Image의 리스트를 확인 할 수 있습니다.

해당 명령어로 지금 설치되어 있는 Docker Image의 리스트를 확인 할 수 있습니다.

Docker Container Check

일단 이미지가 있는지 확인 했으니, 다음 차례는 우리가 실행한 Container를 확인 할 차례입니다! 다음 명령어를 쳐 볼까요?

$ docker container ls

(docker container lsdocker ps는 같은 동작을 합니다.)

  • container: Docker Container와 관련한 명령어를 실행 할 수 있습니다.
  • ls: Docker Container의 리스트를 확인 할 수 있습니다.

  • CONTAINER ID: 컨테이너 별로 주어진 고유 ID 입니다.
  • IMAGE: 해당 컨테이너에 실행 되고 있는 Docker Image를 나타냅니다.
  • COMMAND: 컨테이너가 실행될 때 컨테이너 내부에서 실행되는 명령어 입니다.
  • CREATED: 생성 된 시간을 나타냅니다.
  • STATUS: 현재 컨테이너의 상태를 나타냅니다.
  • PORTS: 현재 컨테이너의 어느 포트가, 어느 호스트 포트에 Mapping되어 있는지 나타냅니다.
  • NAMES: 컨테이너의 이름을 나타냅니다. 실행시 지정 해 주지 않으면 자동 생성됩니다.

이렇게 실행된 Container를 확인 할 수 있습니다. 근데 여기서 또 Container 내부를 들여다 볼 수 있습니다. 다음 명령어를 통해서 말이죠!

$ docker logs [CONTAINER_NAME | CONTAINER_ID]
  • logs: 로그를 확인하는 명령어 입니다.
  • CONTAINER_NAME: 컨테이너 이름입니다. docker ps 혹은 docker container ls로 확인 할 수 있습니다.
  • CONTAINER_ID: 컨테이너 아이디입니다. docker ps 혹은 docker container ls로 확인 할 수 있습니다.

이 컨테이너는 Docker 홈페이지의 Getting Started 도큐먼트를 서버로 보여주는 역할을 합니다. 한 번 웹브라우저에 https://localhost를 쳐보면 다음과 같은 화면이 나옵니다.

Container Stop

이제는 내가 컨테이너를 끄고 싶어요, 이럴때는 어떻게 해야 할까요? 아까 컨테이너를 실행 할 때는 docker run 을 이용했죠? 역으로 docker stop 으로 컨테이너를 멈추면 됩니다.

$ docker stop [CONTAINER_NAME | CONTAINER_ID]
  • stop: 실행 중인 컨테이너를 중지하는 명령어 입니다. (삭제가 아닙니다. 이는 다음에 배워 보도록 하겠습니다.)
  • CONTAINER_NAME: 컨테이너 이름입니다. docker ps 혹은 docker container ls로 확인 할 수 있습니다.
  • CONTAINER_ID: 컨테이너 아이디입니다. docker ps 혹은 docker container ls로 확인 할 수 있습니다.

이제 한 번 컨테이너가 잘 멈췄는지 확인해 볼까요? 저희가 docker ps 라고 치게 되면, 현재 실행 중인 컨테이너만 보이게 됩니다. 하지만, 우리는 -a 옵션을 추가하여 실행 중이 아닌 컨테이너도 확인 할 수 있습니다.

$ docker ps -a

다시 컨테이너를 실행하고 싶다면, docker start [CONTAINER_NAME | CONTAINER_ID] 를 이용하면 됩니다.

마치며

저희가 오늘 한 것을 요약 해 보겠습니다.

  • docker run을 통해서 Docker Image를 가져 온 후, Docker Container 를 생성 후 실행 해 보았습니다.
  • docker container ls를 통해서 현재 실행 중인 혹은 실행 중이지 않은 Docker Container를 확인 해 보았습니다.
  • docker logs를 통해서 현재 실행 중인 Docker Container 내부의 콘솔 로그를 확인 해 보았습니다.
  • docker stopdocker start를 통해 컨테이너를 끄고 켜는 작업을 해 보았습니다.

아직 많은 것들이 이해가 되지 않을 것으로 예상 됩니다. 다음 시간에는 저희가 했던 docker run, docker stop, docker start, docker rm 등, 컨테이너를 조작하는데 쓰는 명령어들이 정확히 어떤 동작을 하는지에 대한 정리와, 우리가 원하는 Docker Image를 가져 온 후, 컨테이너에 이미지를 실어 실행하는 것 까지, 해 보도록 하겠습니다!

여담

군대 전역하고 너무 정신없이 노느라 제 블로그의 존재를 잠깐 잊고 살았네요 ㅎㅎ... 그래도 다시 정신 차리고 열심히 공부 하겠습니다. 아, 뭐했냐고요?

물론 이런 것만 한건 아니고 대학교 친구들과 알고리즘 공부도 하고, 동네 친구들과 딥러닝 공부도 하고, 학교 학생회 활동도 하고 있었답니다. 나름 열심히(?) 살았어요...? 어쨌든 여러 가지 고민들을 마치고, 다시 블로그에 집중 할까 합니다. 저를 표현하는 가장 좋은 방법이 블로그라고 생각 했거든요. 자주 찾아 뵙겠습니다.

Docker 시리즈의 다른 글