왕초보(나)를 위한 도커 사용법을 정리한 글입니다. 포스팅 맨 하단 첨부된 url 들을 참고하였으며, 실습을 바탕으로 이해된 내용들만 정리되어 있습니다.
도커 (Docker) 란?
도커는 2013년에 등장한 컨테이너 기반 가상화 도구이다. 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지 (프로세스 실행 환경) 을 구축할 수 있도록 해준다. 도커를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있다. 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있고, 도커만 설치되어 있으면 필요할때 언제든지 컨테이너로 실행하는 것이 가능하다.
도커는 가상머신의 역할을 넘어서 어느 플랫폼에서나 특정한 상태를 그대로 재현가능한 애플리케이션 컨테이너를 관리하는 도구를 목표로 한다. 처음엔 도커가 가상머신(vm)의 개념인가 싶었는데, LXC (리눅스 컨테이너) 로 부터 파생된 도커 컨테이너는 가상머신과는 근본적으로 다르다고 한다.
- 도커의 컨테이너는 프로세스를 격리시켜 실행해주는 도구로 하드웨어를 소프트웨어로 재구현하는 가상머신과는 다른 개념이다.
왜 도커 (Docker) 를 써야하는가?
컨테이너는 애플리케이션을 환경에 구애받지 않고 실행하는 기술이다. OS 별로 설치 및 실행하는 명령어 (apt-get, yum ...) 가 조금씩 달라지는데 이를 도커에서 실행한다면 어느 환경이든 상관없이 같은 docker 명령어를 사용하여 애플리케이션을 설치 및 실행할 수 있다.
도커 설치 방법
해당 내용은 Raspbian OS (debian linux 기반) 에서 실습한 내용이다.
1. 스크립트를 사용하여 도커를 설치한다.
curl -s https://get.docker.com | sudo sh
스크립트가 끝나면 도커가 정상적으로 설치되었는지 확인한다.
pi@raspberrypi:~ $ cat /etc/apt/sources.list.d/docker.list
deb [arch=armhf signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/raspbian buster stable
pi@raspberrypi:~ $ dpkg --get-selections |grep docker
docker-ce install
docker-ce-cli install
docker-ce-rootless-extras install
2. 도커 이미지 다운로드 받기
도커를 설치하면 도커 엔진의 시스템 서비스도 같이 실행된다. 실행중인 모든 컨테이너 목록을 출력해본다. "docker ps" 는 현재 실행중인 모든 컨테이너 목록을 출력하라는 명령어인데, 관리자 권한으로 실행하지 않는 경우 도커 소켓에 접근할 권한이 없어 에러가 발생하게 된다.
pi@raspberrypi:~ $ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
pi@raspberrypi:~ $ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
사용자 계정에서도 도커를 직접 사용할 수 있도록 docker 그룹에 사용자를 추가한다.
pi@raspberrypi:~ $ sudo usermod -aG docker pi
pi@raspberrypi:~ $ sudo su - pi
pi@raspberrypi:~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
로컬 컴퓨터에서 저장하고 있는 이미지 리스트를 확인한다.
docker images
도커 클라이언트 화면에서 다운로드 받고 싶은 이미지를 검색한다.
docker pull 명령어를 통해 도커 이미지를 내려받는다.
docker pull 이미지 이름[:버전]
3. 컨테이너 실행하기
이미지는 어떤 환경이 구성되어 있는 상태를 저장해놓은 파일 집합니다. 이 이미지의 환경 위에서 특정한 프로세스를 격리시켜 실행한 것을 컨테이너라고 부른다. 컨테이너를 실핸하려면 반드시 이미지가 있어야 한다.
컨테이너는 "docker run" 을 통해서 실행할 수 있다. 쉘을 실행하기 위해 -it 옵션을 붙여 실행하였다.
docker run -it centos:7 bash
다른 쉘에서 "docker ps" 명령어를 통해 실행된 컨테이너를 확인할 수 있다.
맨 앞의 CONTAILNER ID는 앞으로 도커에서 컨테이너를 조작할 때 사용하는 아이디이기 때문에 필수적으로 알아둘 필요가 있다. 마지막 NAMES 는 임의로 붙여진 컨테이너의 이름이다. "docker run" 을 할때 --name 을 통해 명시적으로 지정할 수 있지만, 지정하지 않으면 임의의 이름이 자동적으로 부여된다.
exit 명령어로 쉘을 종료한다.
컨테이너가 종료되었는지 확인한다. -a 옵션을 사용하면 종료된 컨테이너까지 확인할 수 있다.
restart 를 통해 컨테이너를 되살린다.
pi@raspberrypi:~ $ docker restart 4c66d141df37
4c66d141df37
컨테이너 내로 진입하기 위해 attach 명령어를 사용한다.
pi@raspberrypi:~ $ docker attach 4c66d141df37
[root@4c66d141df37 /]#
정리
# docker 설치
curl -s https://get.docker.com | sudo sh
# docker 실행권한 주기
sudo usermod -aG docker pi
sudo su - pi
# docker image 다운로드
docker pull centos:7
# 컨테이너 실행
docker run -it centos:7 bash
# 컨테이너 되살리기
docker restart 4c66d141df37
# 컨테이너 진입
docker attach 4c66d141df37
# 실행중인 컨테이너 확인
docker ps
# 설치된 이미지 리스트 확인
docker images
참고
https://www.44bits.io/ko/post/easy-deploy-with-docker#들어가며
https://www.44bits.io/ko/post/why-should-i-use-docker-container