반응형
05-14 05:47
Today
Total
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

개발하는 고라니

[Docker] 기초 사용법과 개념 본문

Open Source/Docker

[Docker] 기초 사용법과 개념

조용한고라니 2021. 9. 28. 17:22
반응형

개발을 하다보면, Docker라는 단어를 많이 접해보았을 것이다. 그것을 사용해보지 않았더라도 대충 뭐 해주는 얘다 정도로 알고있을 수 있다. 하지만 이제 도커는 웹 개발할 때 뿐만 아니라 일상에서도 종종 쓰이는 정도로 사용 폭이 넓어졌다. 그래서 미루고 미뤄온 도커에 대해 먼저 간단하게 알아보고자 한다. 마침 생활코딩에서 도커 수업을 만들어주셔서 그 내용을 토대로 작성해보고자 한다.

도커는 이 귀여운 고래 + 선박을 합쳐놓은 그림을 쓴다. 뭔가 갖다주는 애구나 하는 인식이 든다. 이제 도커에 대해 처음부터 알아보자.

Docker의 배경

(1)

보통 개발할 때 하나의 웹 어플리케이션을 만들기 위해 웹서버나, 데이터베이스미들웨어 등을 자신의 컴퓨터 운영체제 위에 설치해놓고 쓴다. 하지만 이 과정은 귀찮고, 한 번에 잘 되지 않을 수 있다. 이런 상황이 반복되면 이런 생각을 하게 된다.

출처: 생활코딩 유튜브

 

(2)

웹 서버를 만든 사람이 컴퓨터를 구해, 적당한 OS를 깔고 그 위에 웹서버와 데이터베이스를 설치한 다음 우리에게 준다면 얼마나 좋을까? 그리고 우리가 만든 어플리케이션은 '네트워크'로 이들과 통신해 사용할 수 있다면 좋지 않을까?

출처: 생활코딩 유튜브

 

하지만 이렇게 하려면 돈이 많이든다. 컴퓨터가 3대나 필요하니 말이다.

 

그래서 생각을 좀 바꿔본다. 하나의 운영체제 위에 가상으로 컴퓨터를 만들고 그 위에 운영체제를 설치한 후 웹서버와 데이터베이스를 설치한다면,,, 컴퓨터를 별도로 장만하지 않아도 된다.

 

근데 웹 서버 하나를 운영하기 위해 운영체제를 설치한다는 것은 비효율적이다. 운영체제를 설치하기 위해서는 많은 자원이 소모된다. 그리고 운영체제 위에 또다른 운영체제가 있는 것이니 실행속도도 느리다.

 

(3)

그래서 이런 생각에 도달하게 된다. 한 대의 컴퓨터 안에서 각 어플리케이션을 실행시킨다. 그리고 각 어플리케이션은 그냥 실행되는 것이 아닌, 격리된 환경에서 실행된다. 이 때, 운영체제가 설치된 컴퓨터를 HOST라고 부른다.

 

HOST에서 실행되는 격리된 각각의 환경을 Container라고 부른다. 각 컨테이너에는 운영체제가 설치된 것이 아닌, 어플리케이션을 실행시키기 위한 파일과 라이브러리가 포함되어 있다.

 

이미 존재하는 운영체제를 공유하므로 뭘 설치할 필요도 없고, 운영체제가 1개이므로 속도도 느려지지 않는다. 따라서 저장용량과 시간을 절약할 수 있다.

 

리눅스에는 이런 앱 실행방법이 내장되어 있다. 이러한 기술을 Container라고 부른다. Container기술을 이용해 이런 일을 쉽게 해주는 제품이 여러개 있지만, 가장 널리 쓰이는 프로그램이 "도커"이다.

출처: 생활코딩 유튜브

Windows Docker 설치

설치 전에 알아야 할 것이 몇 개 있다. 도커와 같은 컨테이너 기술은 리눅스 운영체제의 기술이다.

 

1) 도커 위에서 돌아가는 컨테이너, 그 컨테이너 안에서 동작하는 각각의 앱은 리눅스 운영체제에서 동작하는 앱이다.

 

2) 자신의 컴퓨터가 리눅스가 아니라면, 도커를 쓸 수 없을까? 그건 아니다. windows나 mac이라면 가상 머신을 설치하고, 그 가상머신에 리눅스를 깔면 리눅스 위에서 도커와 같은 컨테이너 기술을 사용할 수 있다.

(상당히 복잡해보이지만, 사실 도커가 다 알아서 해준다.)

출처: 생활코딩 유튜브

 

그래서 만약 현재 운영체제가 리눅스라면, 성능의 저하 없이 도커를 사용할 수 있는 것이고, 그렇지 않다면 가상 머신을 설치하므로 어느 정도의 속도 저하를 감수하여야 한다.

그럼에도 불구하고 도커를 사용하는 것은, 도커를 사용했을 때의 편의성이 너무나도 크기 때문이다.

 

현재 Windows를 사용하고 있으니, Windows에 설치하는 것을 알아본다. 아래 링크에서 각 운영체제에 맞는 탭에 들어가면 된다.

 

Get Docker

 

docs.docker.com

 

Windows에 Docker 설치 프로그램을 다운받고, 실행시키면 설치가 되는데, WSL 2가 완료 안됬다 어쩌구 뜬다... 이는 다음과 같다.

WSL 2는 Linux용 Windows 하위 시스템 아키텍처의 새로운 버전으로, Linux용 Windows 하위 시스템이 Windows에서 ELF64 Linux 이진 파일을 실행할 수 있게 해줍니다. WSL 2의 주 목표는 파일 시스템 성능을 높이고 전체 시스템 호출 호환성 을 추가하는 것입니다.

 

그래서 이걸 해결해줘야 하는데, 여기를 참고해서 하면 된다.

 

설치가 정상적으로 완료되면, Docker Desktop 프로그램이 실행되고 위와 같은 화면이 뜨는데, 이는 도커를 그래피컬한 환경에서 제어할 수 있도록 도와준다.

 

하지만 사실 도커는 command를 이용해서 하는 것이 더 바람직하다. 그래서 'cmd'를 켜서

docker images

를 입력했을 때 다음과 같은 것이 나오면 잘 설치가 된 것이다.

이미지 Pull

스마트폰에서 어플을 다운받으려면 보통 Google Store / App Store / One Store 등 마켓에서 다운받는데, 이 때 다운받는 것을 "프로그램"이라고 한다. 프로그램을 실행시키면 프로세스가 동작한다.

 

마찬가지로 도커도 뭔가 다운을 받을 때 [docker hub]에서 다운을 받게 되는데, 이 때 다운받는 것을 "이미지"라고 한다. 이 이미지를 실행하는 주체를 "Container"라고 한다. 이미지는 여러 컨테이너를 가질 수 있다.

 

이미지를 다운받는 행위를 "pull", 이미지를 실행시키는 것을 "run"이라고 한다.

출처: 생활코딩 유튜브

 

이제 docker hub에서 이미지를 다운받아보자.

 

도커 허브에서 Apache 웹서버를 다운 받으려고 한다. httpd를 검색하면 다음과 같은 화면이 뜨는데, official은 도커에서 공식 인정한 이미지 이다.

 

cmd에 'docker pull httpd'를 입력하기만 하면 이미지가 다운로드 된다고 하니 바로 타이핑 해본다.

 

 

Docker의 CLI 사용법에 대해서는 도커 공식 docs에 잘 나와있다. 그 중에 pull에 관한 것을 보면 다음과 같이 사용할 수 있다고 한다.

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

 

앞으로 모르는 명령어를 쓸 때는 docs에서 찾아서 쓰면 되겠다.

컨테이너 Run

이제 다운받은 이미지를 컨테이너에서 Run 작업을 해보자. 마찬가지로 docs에서 CLI 명령어를 보면 다음과 같이 사용할 수 있다.

Docker의 Run
- docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

컨테이너를 만들 때 : docker run
- docker run httpd

 

커맨드에서 httpd 이미지를 run 했다. 어떤 옵션도 주지 않았기 때문에 foreground에서 실행이 되고 있으니, 다른 CMD를 켜서 "docker ps"를 입력해보면 다음과 같은 화면이 나온다.

 

그러면 방금 생성한 컨테이너의 ID와 언제 생성되었고, 현재 상태 및 이름 등이 나온다.

 

하나의 이미지는 여러 개의 컨테이너로 돌릴 수 있다. 또다른 CMD를 켜서 옵션을 줘보자.

docker run --name ws2 httpd

다시 docker ps를 하면,

 

"ws2"라는 이름의 httpd 이미지가 run 되고 있는 컨테이너가 생긴 것을 볼 수 있다.

컨테이너 stop / start

run 상태의 컨테이너를 그만 사용하고 싶다, 중지하고 싶다 하면 간단한 명령어 한 줄이면 된다.

/*
docker stop 컨테이너_이름
docker stop 컨테이너_ID
*/

docker stop ws2

 

이제 잘 꺼졌는지 확인하기 위해

docker ps

 

를 입력하면, ws2라는 이름의 컨테이너가 나오지 않는다. 이는 옵션을 줘야 한다. 꺼져있는 컨테이너기 때문에 마치 리눅스에서 ls -a 해야 숨긴 컨텐츠가 나오는 것 처럼 -a옵션을 줘야한다.

docker ps -a

 

종료된 컨테이너를 다시 키려면 start 명령어를 입력한다.

/*
docker start 컨테이너_이름
docker start 컨테이너_ID
*/

docker start ws2

 

이때 ws2가 잘 실행되고 있는지, 로그를 보려면 다음 명령어를 입력한다.

docker logs 컨테이너_이름
docker logs 컨테이너_ID

docker logs -f 컨테이너_이름/컨테이너_ID //모니터링

컨테이너 remove

만들어논 컨테이너를 제거하려면 "rm"을 쓴다.

docker rm 컨테이너_이름/컨테이너_ID
docker rm --force 이름/ID

 

※ 이미지를 제거하는 방법은 rmi를 쓴다

 

#Reference 및 출처

생활코딩 유튜브 - 도커 수업

 

반응형

'Open Source > Docker' 카테고리의 다른 글

[Docker] Dockerfile과 Build  (0) 2021.10.02
[Docker] 도커 호스트와 컨테이너  (0) 2021.09.28
Comments