본문 바로가기
SWE/Learning Diary

Docker 도커 기초 개념 | 실습

by S나라라2 2022. 4. 21.
반응형

Docker?

환경에 구애받지 않고 코드 실행, 애플리케이션 배포 & 확장할 있도록 도와주는 소프트웨어이다.

 

예를 들면, 동일한 코드여도 개발 환경에서는 돌아가는데 다른 개발자의 개발 환경에서는 '빌드 에러 나요!' 이럴 있다. 따라서 개발 환경 자체를 패키지로 묶어서 사용하고 다른 사람과 공유할 수도 있는 것이 도커이다.

 

Docker VM 비교

Docker Virtual Machine 자주 비교된다. 왜냐하면 가상의 개발 환경을 제공해준다는 공통점이 있기 때문이다.

그러나 둘의 가장 차이점은 OS 유무이다.

Virtual box 가상의 개발 환경을 만들 때마다 os 필요하다. 예를 들면, 우리는 윈도우 pc에서 우분투 서버를 경험하기 위해 vm ubuntu os 설치한다.

그러나 docker 실제로 os 설치되지 않는다. 해당 os 필요한 특정 바이너리와 라이브러리만을 가진다. vm보다 훨씬 가볍다.


 

컨테이너란?

위의 내용을 쉽게 설명하기 위해 컨테이너라는 단어를 사용하지 않았지만, 알아야 한다.

 

컨테이너란 영어 그대로 개발을 위한 화물 박스라고 생각하면 된다. 격리된 공간에서 프로세스가 동작하는 기술이다.

Host안에 os 개이지만 마치 독립적인 머신으로 동작되는 것처럼 가상으로 구현해놓은 것이다.

 

 

도커와 컨테이너의 개념을 정리하자면, 도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스이다.

 

 

docker를 이해하기 위한 App Store docker의 비교

 

 

docker hub는 app store와 동일하게 보면 된다. 우리가 필요로하는 개발 환경을 docker hub에서 내려 받는다.

Docker hub = default registry

도커의 image라는 개념은 program이라고 보면 된다. 그리고 그 image를 실행시킨 것이 container이다.

참고로 Container 는 기술 전체를 컨테이너라고 칭하기도 하고, 실행되는 프로세스를 컨테이너라고도 한다.

 

객체지향적 관점의 이미지와 컨테이너

Image: 클래스

Container: 인스턴스

하나의 클래스로 여러 개의 인스턴스를 만들어낼 있다. 각각의 인스턴스는 독립적으로 동작되고, 하나의 인스턴스 코드를 수정해도 나머지 인스턴스에는 영향이 없다.

 


실습

$docker pull ubuntu:20.04

 

$docker container ls -a

 

$docker image ls -a

 

$docker run ubuntu ls

Image에서 container 만들고, 해당 container안에서 ls 명령을 실행시킴

명령을 실행한 바로 container 종료됨(일회성)

 

 

$docker run -it ubuntu bash

It interactive

 

$docker exec -it

 

 

지금까진 비어있는 os 실행시켰는데, 프로그램이 설치되어 있는 os 이미지를 실행시키는 실습을 해보자!

 

 

$docker run --name ws httpd

 run 명령만 실행하면 자동으로 pull까지해줌

 

 

 

$ docker stop ws

 

$ docker start ws

 

$ docker logs ws

Ws 컨테이너의 마지막 로그를 출력함

 

$ docker logs -f ws

F옵션 tail

 

$ docker stop ws

$ docker rm ws

 

 

웹서버를 실행시키는 네이티브 방식

 

도커 방식

 

Host 8000 포트를 container 80 포트로 포워딩 해줘라

그러면 컨테이너의 80 포트를 리스닝하고 있는 웹서버가 ..

반응형