Docker 개념 정리및 사용방법

KIMYEONGJUN·2023년 7월 15일
0
post-thumbnail

1. Docker란

Docker는 가상 머신처럼 독립된 실행환경을 만들어주는 것으로, 운영체제를 설치하는 것과 유사한 효과를 낼 수 있지만, 실제 운영체제를 설치하지 않기 때문에 설치 용량이 적고 실행 속도 또한 빠르다. 원도우에 VM Ware와 같은 가상 머신을 설치하여 사용했으나 최근에는 리눅스 계열에서 Docker가 그 역할을 대신하고 있다.

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.

출처: 위키 백과

2. Docker를 사용하는 이유

실무에서는 우분투 환경에 CentOS container를 설치하여 사용하거나, 이미 검증된 Web server의 설정 및 Binary가 설치된 container를 설치하여 복잡한 configuration 과정을 줄일 수 있다.

  • 구성 단순화 Docker는 하나의 Configuration으로 모든 플랫폼에서 실행할 수 있다. Configuration 파일을 코드에 넣고 환경 변수를 전달하여 다른 환경에 맞출 수 있다. 따라서 하나의 Docker 이미지를 다른 환경에서 사용할 수 있다.

  • 코드 관리 Docker는 일관된 환경을 제공하여 개발 및 코딩을 훨씬 편안하게 만들어준다. Docker 이미지는 변경이 불가하기에 개발환경에서 운영 환경까지 애플리케이션 환경이 변경되지 않는 이점이 존재한다.

  • 개발 생산성 향상 개발 환경을 운영 환경에 최대한 가깝게 복제할 수 있다. Docker를 사용하면 코드가 운영 환경의 컨테이너에서 실행될 수 있으며 VM과 달리 Docker는 오버 헤드 메모리 용량이 적기에 여러 서비스를 실행하는데 도움이 된다. 또한 Docker의 Shared Volume을 사용하여 호스트에서 컨테이너의 어플리케이션 코드를 사용할 수 있도록 할 수 있다. 이를 통해 개발자는 자신의 플랫폼 및 편집기에서 소스 코드를 편집할 수 있으며 이는 Docker내에서 실행 중인 환경에 반영된다.

  • 애플리케이션 격리 Web Server(e.g. Apache, Nginx)와 연결된 API 서버를 격리할 필요가 있는 경우가 있다. 이 경우 다른 컨테이너에서 API를 서버를 실행할 수 있다.

  • 빠른 배포 컨테이너가 OS를 부팅하지 않고 어플리케이션을 실행하기 때문에 Docker 컨테이너를 매우 빠르게 만들 수 있다.

3. Images와 Container 개념 이해

Docker는 Client (docker)와 서버 (dockerd)로 구성되어 있다. Docker Images는 read only의 docker container를 생성하기 위한 template이고, Container는 images가 실제 메모리에 로딩된 instance이다. 하나의 images로 유사한 container를 만들 수 있다. Registry는 Docker hub이며 images의 저장소이다.

  • Images: libs와 package의 template, read only
  • Container: Images가 설치되어 메모리에 로딩된 instance 이다.

Docker 구조 (출처: https://docs.docker.com/get-started/overview/)

4. Docker 설치

도커를 리눅스 환경에 설치하는 방법은 아주 간단하다.

sudo wget -qO- http://get.docker.com/ | sh
위 명령어를 실행하면 바로 설치가 된다. 설치 후 아래 명령어를 실행시켰을 때 아래 이미지처럼 출력되면 끝이다.

sudo docker run hello-world

Docker 명령어

Docker run -> Docker 컨테이너를 실행

docker run -it --name test ubuntu:latest

-it -> 컨테이너를 실행시키는 동시에 interactive 한 터미널로 접속한다.

--name -> 컨테이너 id는 알아보기가 어렵기에 구분하기 쉽도록 이름을 지정한다.

-it 옵션을 붙였기에 명령어 실행 후 새로운 터미널에 접속된 것을 확인할 수 있다.

컨테이너의 이름이 test1인 것을 확인할 수 있다.

docker images -> 도커 이미지 리스트를 출력

위에서 도커가 설치됐는지 확인할 때 생성한 hello-world 이미지와 docker run 명령어 예시를 들 때 생성한 ubuntu 이미지가 출력되는 것을 확인할 수 있다.

docker ps -> 실행 중인 도커 컨테이너 리스트를 출력

확인을 위해 아래 명령어를 실행시키고 나서 docker ps 명령어를 실행하면

docker run -it -d --name test1 ubuntu:latest

docker run 명령어에서 -d 옵션은 백그라운드에서 컨테이너가 계속 실행되도록 해준다.

test1 컨테이너가 출력되는 것을 확인할 수 있다.

옵션으로 -a를 넣고 실행하면 실행되었던 컨테이너까지 출력이 된다.

docker stop -> 실행 중인 도커 컨테이너를 중단

docker stop (컨테이너 id)와 같은 방식으로 사용하는데 id는 다 칠 필요 없고 겹치는 숫자가 없을 때까지만 입력해주면 된다. 예를 들어 1234, 1289 2개의 컨테이너가 있다면 123 까지만 처도 1234 컨테이너가 중단된다.

docker rm -> 도커 컨테이너를 삭제

test, test1 컨테이너를 중단하니 docker ps, docker ps -a 명령어에서 출력되지 않는 것을 확인할 수 있다.

docker rmi -> 도커 이미지 삭제

ubuntu 이미지가 삭제된 것을 확인할 수 있다.

만약 아래와 같은 에러가 뜬다면

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/images/json": dial unix /var/run/docker.sock: connect: permission denied

아래 명령어를 실행시키시면 된다.

sudo chmod 666 /var/run/docker.sock

📌참고

[1] https://url.kr/mx4l21
[2] https://docs.docker.com/get-started/overview/

profile
Junior backend developer

0개의 댓글