안녕하세요. 오늘은 도커에 대해 쉽게 이해하실 수 있는
설명과 설치, 시작법에 대해 알려드리고자 합니다.

도커라는 것의 개념을 공부하실 때 막막하셨던 분들께
도움이 되길 바랄게요.


Docker 도커란?

도커는 아주 쉽게 말해 가벼운 서버 환경입니다.
뭐 어렵게들 설명해놓은 자료들이 많은데요.

온라인에는 이렇게 나와있네요.

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.
ㅡ AWS Docker 설명란

저는 위 설명보다는 아래의 설명이 참 좋은 것 같아요.
도커 홈페이지에서 메인 카피로 내세우고 있는 개념이죠.

Docker: Accelerated Container Application Development

https://www.docker.com/

맞아요. 우리가 만드는 어플리케이션 개발에 필요한 컨테이너입니다.

컨테이너란 무엇일까요? 결국 어떤 개발 환경이라고 보시면 되는데요.

쉽게 예를 들어보겠습니다.
개발하고, 테스트하고, 서비스하는 모든 환경이
개발자마다 다른데요.
환경이라는 건, 그러니까 개발자마다 OS도 다르고, 서버도 다르고,
서버 버전도 다르고, 소프트웨어 버전도 다르잖아요.
하지만 우리는 단 0.0.1 버전만 달라도 소스가 잘못 돌아가는 것을 많이 봐왔죠.
같이 랜더링을 하고, 빌드를 해도 다른 모양 버튼, 화면이 나오잖아요.

우리가 언제가 했던 말들
"일부러 이렇게 만드신 줄 알았어요.." 말잇못..!
(Image by Freepik)

그래서 보통 회사에서는 개발서버를 이용합니다.
개발팀원들의 개발 환경은 모두 다르지만, 하나의 서버에 동시 접속해서 운영 서버 배포 전에 소스코드를 공유하는 환경이에요.

마치 개발서버 처럼,
도커도 어떤 애플리케이션을 개발하고 테스트하고, 서비스하기까지
모든 환경을 하나로 통일해서 효율적으로 관리할 수 있게 하는 가상머신입니다.

바로 리눅스 커널에서 제공하는 컨테이너 기술 이라는 것을 이용합니다.

가상 머신?!

가상 머신이라고 하면 어려우신가요?
설치 환경을 위한 가상의 공간이라고 생각해보세요.
도커도 일종의 가상머신인데, 엄밀히 말하면 완전히 VM (Virtual Machine) 은 아닙니다.

일반적인 가상머신은, 우리가 보통 맥북 안에 윈도우를 설치하려고 할때 쓰는 그런 가상머신이죠.
윈도우를 쓰는 컴퓨터에 WSL이 없을 때, 리눅스를 설치했던 것처럼요.
하나의 운영체제 안에 다른 운영체제를 넣을 수 없으니까
하드디스크를 반으로 쪼개거나, 세개로 쪼개고.. 해가지고
막 가상머신을 만들어서 운영체제를 가상으로 만들어놓곤 했잖아요.

이처럼 가상머신은 보통 운영체제를 포함하고 있습니다.
완전히 독립된 하드웨어처럼 동작하는 거에요.

하지만 도커는 운영체제가 없어요. 이것을 경량화된 가상환경이라고 하는데요.
웹서버와 필요한 라이브러리들만을 포함하고 있어서 호스트의 OS를 사용하게 됩니다. 훨씬 더 가볍겠죠.

자 그러면 이 도커를 어떻게 쓰냐면요.
여기서 이미지 라는 개념이 나옵니다.


이미지 ?!

이미지라는 것은 jpg, png 같은 그래픽이 아니랍니다.
여기서 이미지는 컨테이너를 만드는 설계도 에요.

우리는 이 설계도를 가지고 컨테이너, 집을 만듭니다.
그 집을 똑같이 가지고 있어야 서비스 운영 환경이 동일한 거에요.

A 라는 개발자가 B라는 개발자에게,
"우리 이 코드가 잘 돌아가는지 테스트 해보자.
내 로컬에서만 잘 돌아가는 것일 수도 있어.
내가 컨테이너를 보낼테니 N시간 후에 너도 실행해봐."

이러면 너무 오래 걸리잖아요.
그래서 이미지를 허브에 두고 서로 공유합니다.

다만, 이 이미지는 (설계도)
수정되었다고 해서 컨테이너가 영향을 받지 않아요.
이미지가 수정되면 컨테이너는 v2 이미지로 컨테이너를 다시 만들면 되죠.

즉, 이미지로 컨테이너를 만들었는데
이미지가 수정되면,
컨테이너가 이에 맞춰 갑자기 바뀌지 않아요. 그대로 유지됩니다.

Image by macrovector_official on Freepik

그럼 이제 도커 이미지로 컨테이너를 만드는 것을 아시겠죠.
도커 이미지는 어떻게 만드냐면, Dockerfile 이라는 기본 설정 파일을 가지고 만들게 됩니다.

정리해볼게요.


도커의 사용 방법

Dockerfile ➔ Image ➔ Container

dockerfile에서 image 만드는 것을 Build 한다고 해요.
Image에서 Container 만드는 것을 docker run 한다고 합니다.


이제부터는 쭉 명령어를 따라 치시면 됩니다!
docker는 사이트에서 다운로드 받으셔도 돼요.
https://www.docker.com/

Docker 설치

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

도커 설치 확인

docker --version

Dockerfile (설정파일) 생성

  • 파일 이름: Dockerfile (딱 이렇게만 작성해주세요.)
  • 예시) 우분투 + 아파치 + PHP + MYSQL 설치 + 80포트
  • 회사에서, 또는 본인이 사용해야하는 환경설정의 dockerfile을 찾으셔서 만들어주시면 된답니다.
FROM ubuntu:20.04

LABEL maintainer="juliemin <julie@test.com>"

RUN apt-get update && \
    apt-get install -y apache2 php mysql mysql-server

EXPOSE 80

CMD ["apache2ctl", "-D", "FOREGROUND"]
  • FROM : 베이스 이미지 OS
  • LABEL : 메타 데이터
  • RUN : 설치할 때 쓰는 명령어
  • WORKDIR : 작업 디렉토리 설정
  • COPY : 복사
  • ENV : 환경변수 설정
  • CMD : 마지막에 쓰인 하나의 CMD 기본명령만 수행됨
  • EXPOSE : 특정 포트에서 수신 대기하는 것을 지정
  • ENTRYPOINT : 컨테이너가 실행될 때 기본명령 지정

이미지 빌드

위에서 만든 Dockerfile이 있는 디렉토리에서 명령어를 치세요.

docker build -t imagename .
-- imagename 이라는 이름의 이미지가 만들어집니다.

이미지 확인

docker images

이미지가 잘 만들어졌다면, 컨테이너를 만들어봅시다!

컨테이너 실행 (create + start = run)

docker run -d -p 8080:8080

또는 컨테이너 이름 지정 가능

docker run --name containername -d imagename

앞서 말씀드렸듯, runcreate하고 start까지 포함하는 명령어에요.
그러니 바로 실행이 될겁니다.

실행중인 컨테이너 목록 확인

docker ps


이제 8080 포트에 접속하면 dockerfile이 있는 소스코드가 뜰거에요.
수고하셨습니다! 짝짝짝!
profile
(੭˙ ˘ ˙)੭🌱 자란다, 잘한다!

2개의 댓글

comment-user-thumbnail
2024년 3월 10일

와...누님 도커를 쓰시네요
저는 4달전에 시놀로지 샀는데...
우연히 팀원들 깃헙 좀 살펴보다가 블로그 방문 해봤습니다
화이팅입니다!!!
블로그 해볼까 했는데 본받겠습니다

1개의 답글