728x90
728x90

애저(Azure)를 이용하여 도커(Docker)를 구축하고, 간단한 실습 해보기

들어가며

  • 애저(Azure)를 이용하여 구축한 도커(Docker)를 간단하게 실습해 보자.
  • 이 글은 이전 글(https://dev-astra.tistory.com/389)에 이어서 진행된다.

 

실습하기

  • 다음 명령을 실행하여 우분투(Ubuntu) 18.04 버전이미지를 가져온다.
$ docker pull ubuntu:18.04

':18.04' 부분을 태그(Tag)라고 한다.

 

  • 다음 명령을 실행하여 로컬에 어떤 이미지가 있는지 확인해본다.
$ docker images

전에 실습했던 'hello-world' 이미지와 방금 가져온 'ubuntu 18.04' 이미지를 확인할 수 있다.

우분투 18.04 버전의 용량이 작은 것을 확인할 수 있는데, 그 이유는 현재 설치된 우분투 22.04 버전과 대부분의 파일을 공유하기 때문이다. (63.2MB는 우분투 18.04버전을 위한 파일들의 크기라고 생각하면 된다.)

 

  • 다음 명령을 실행하여 메모리 상에서 실행되고 있는 프로세스들을 확인해본다. (@-a@ 옵션을 추가하면 모든 프로세스들을 볼 수 있다.)
$ ps

 

  • 도커에서 실행 중인 프로세스를 확인하기 위해 다음 명령을 실행해본다.
$ docker ps -a

 

  • 도커에 가져온 이미지(@ubuntu:18.04@)를 실행하기 위해 다음 명령을 실행해본다.
    • @run@ : 도커에서 해당 컨테이너로 진입하는 명령
    • @--name demo@ : 이름을 @demo@로 설정한다.
    • @-it@ : Interactive Terminal (대화형 터미널)
    • @/bin/bash@ 셸을 이용한다.
$ docker run --name demo -it ubuntu:18.04 /bin/bash

바로 접속이 된 것(/#)을 확인할 수 있다.

  • 해당 이미지(@ubuntu:18.04@)로 진입하였다. 이제 우분투 18.04 컨테이너 안에서 작업을 할 수 있게 되었다.

 

  • 다음 명령을 실행하여 버전을 최신 버전으로 업데이트 해준다. (프롬프트에 @#@이 표시되어 있는데, 이미 슈퍼 유저의 권한을 갖고 있음을 확인할 수 있다.)  
/# apt-get update

 

/# apt-get upgrade

 

  • 다음 명령을 실행하여 다시 우분투 22.04 버전으로 돌아온다.
/# exit

우분투 18.04 버전의 컨테이너에서 다시 우분투 22.04 버전으로 돌아왔다.

 

  • 다음 명령을 실행해서 실행 중인 컨테이너를 확인해본다.
$ docker ps

ubuntu 18.04 컨테이너가 없다. 컨테이너에서 접속을 끊으면 바로 종료되는 것을 확인할 수 있다.

 

  • 다음 명령을 실행하여 우분투 18.04 컨테이너에 진입한다. 그리고 도커에서 실행 중인 프로세스를 확인한다.
    • 계속해서 실행되면서 처리 되어야 하는 도커 이미지는 @-d@ 옵션을 추가하여 데몬 모드로 실행해줘야 한다.
$ docker run -it -d --name demo2 ubuntu:18.04
$ docker ps

 

  • 다음 명령을 실행하여 우분투 18.04 컨테이너에 접속해본다.
$ docker exec -it demo2 /bin/bash

 

  • 다시 우분투 18.04 컨테이너에서 빠져나온 후, 도커에서 실행 중인 컨테이너를 확인하면 @demo2@가 아직도 데몬 모드로 실행되고 있음을 확인할 수 있다.

 

  • 다음 명령을 실행하여 도커에서 실행 중인 모든 컨테이너를 확인해본다.
$ docker ps -a

지금까지 진입하고 빠져 나왔었던 컨테이너들이 보인다.

컨테이너에서 빠져 나오더라도 메모리에서 소멸되는 것이 아니라, '실행이 되고 있지는 않지만, 메모리에 떠 있는 상태(얼려 있는 상태)'가 된다.

 

  • 이처럼 여러 개의 우분투 컨테이너들을 도커 안에 만들어서 서비스를 배포할 수 있다. 하지만, 이렇게 많아진 컨테이너들을 실행하고 관리하는 것은 힘들어질 것이다. (많으면 몇 백개씩 만들어지고 실행된다.) 이렇게 많아진 컨테이너들을 관리하기 위해 쿠버네티스(Kubernetes)가 만들어졌다.

Kubernetes Logo

 

  • 도커는 다음과 같이 작동한다. (Source Control → Local Dockerfile → Test Image → Source Control → ...)

 

  • 다음의 명령을 실행하여 도커의 로그를 추적하여 확인할 수 있다.
$ docker logs demo2

 

  • 다음과 같인 간단하게 셸 프로그래밍을 할 수 있다. (1초에 한번씩 날짜를 출력한다.)
$ docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"

레포지토리에서 busybox 이미지가 없기 때문에 레포지토리에서 새로 생성하여 가져온다.

 

  • 다음 명령을 실행하여 @demo3@ 컨테이너의 로그를 확인해본다.
$ docker logs demo3

 

  • 다음처럼 @-f@ 옵션을 넣고 명령을 실행하여 지속적으로 팔로우(Follow) 하면서 1초마다 로그를 확인할 수 있다. (와치/팔로우 모드)
$ docker logs demo3 -f
현재 날짜가 실시간으로 계속 출력된다.

 

  • @[Ctrl]@ + @[C]@ 버튼을 누르면 중단시킬 수 있다.

 

  • 다음 명령을 실행하여 도커에서 실행 중인 컨테이너를 확인해본다.
$ docker ps

 

  • 다음 명령을 실행하여 실행 중인 컨테이너를 중단시켜 본다.
$ docker stop demo3

 

  • 나머지 컨테이너들도 중단시켜본다.
$ docker stop demo2
$ docker stop demo

 

  • 다음 명령을 입력하여 도커에서 실행 중인 컨테이너들을 모두 확인해본다.
$ docker ps -a

아직도 메모리에 컨테이너들이 올라와 있는 것을 확인할 수 있다.

 

  • 메모리에 올라와 있는 컨테이너를 완전히 제거하면 다음과 같이 @rm@ 명령어를 사용한다.
$ docker rm demo

demo 컨테이너가 사라진 것을 확인할 수 있다.

 

  • 다른 컨테이너들도 모두 제거해준다.
$ docker rm demo2
$ docker rm demo3

참고로, 이미지를 생성할 때 이름(name)을 넣어주지 않으면 임의의 이름이 생성된다. (wizardly_mendel)

 

  • 도커에 다운로드 된 이미지들을 확인해본다.
$ docker images

 

  • 컨테이너 이미지를 삭제하라면, @rm@ 명령어 뒤에 @i@를 붙인 @rmi@ 명령어를 사용한다.
$ docker rmi hello-world

오류가 출력됐다. 이미지를 삭제하기 위해서는 우선 컨테이너를 지워줘야 한다.

 

  • 다음 명령을 실행하여 컨테이너 이름을 확인한 후, 해당 컨테이너(@wizardly_mendel@)를 지워준다.
$ docker ps -a
$ docker rm wizardly_mendel

 

  • 그리고 다시 이미지를 지워준다.
$ docker rmi hello-world

 

도커에서 이미지(Image)를 제거하려면 우선 이미지로 만든 컨테이너(Container)를 제거해야 한다.

 

  • 다음 명령을 실행하여 @ubuntu:18.04@ 이미지와 @busybox@ 이미지를 제거한다. (태그(버전)를 정확하게 지정해준다. 태그를 지정해주지 않으면 가장 최근(Latest) 버전의 이미지가 선택된다.)
$ docker rmi ubuntu:18.04
$ docker rmi busybox

 

  • 도커는 다음과 같은 원리로 작동한다는 것을 알 수 있다.

참고 사이트

도커 공식 문서
 

Docker Docs: How to build, share, and run applications

 

docs.docker.com

728x90
728x90