[Inception] Docker: tutorial 1 - Playing with Busybox

Yejin Kim·2023년 2월 19일
0

42 cursus

목록 보기
20/20

https://docker-curriculum.com/ 에서 진행하는 tutorial을 참고하여 docker 사용해보기

🔌 Install

https://docs.docker.com/desktop/install/mac-install/

위의 page에서 chip에 맞게 Docker를 설치
brew를 통해 설치하는 것도 가능하다.

  • docker run hello-world
    위의 명령어를 통해 Docker 설치가 정상적으로 되었는지 확인할 수 있다.

🕹️ Playing with Busybox

busybox image를 받아 container를 내 system에서 실행시켜 보자

  • docker pull busybox
  • docker images
    내 system에 있는 모든 image들을 확인할 수 있다.
    위에서 진행한 pull busybox를 통해 가져온 busybox에 대한 image도 있는 것을 확인할 수 있다.
  • docker run busybox
    image를 가지고 busybox를 run을 진행했더니 아무 일도 일어나지 않는다 !!!

왜 docker run이 정상적으로 실행되지 않았을까?

사실 run을 실행하면 Docker client는 image를 찾고, container를 올린 뒤, container 내부에서 command를 실행하게 된다.
현재 우리가 작성한 docker run busybox 명령어는 container 내부에서 실행한 command를 주지 않았기 때문에 container가 올라가고 아무 command도 실행하지 않은 뒤 종료하게 되는 것이다.

  • docker run busybox echo "hello from busybox"
    이번에는 container를 올린 뒤 내부에서 echo 명령어가 수행된다.
  • docker ps
    현재 running 상태의 container를 모두 보여준다. 현재에는 실행되고 있는 container가 없기 때문에 blank line 상태이다.
  • docker ps -a
    -a 옵션을 통해 실행했던 모든 container의 정보를 볼 수 있다.

이제까지 사용한 명령어들만으로는 container에서 원하는 작업을 모두 진행할 수 없다.
원하는 작업을 모두 진행하기 위해서는 여러 command를 실행시킬 수 있는 방법에 대해 알아보자.

  • docker run -it busybox sh
    run command를 -it flag 와 함께 사용하면 interactive tty(터미널)를 attach 해준다.

🚨 DANGER ZONE 🚨
container안에서 rm -rf bin을 실행하게 되면 ls, uptime 등의 명령어를 실행할 수 없게 된다. (이런 명령어들을 실행해주는 실행파일들이 있는 디렉토리가 삭제되었기 때문)
laptop/desktop에서 위의 command를 실행하지 않도록 유의하자 ❗️
이 때, exit을 하고 다시 docker run -it busybox sh command를 실행하면 다시 ls, uptime 등의 명령어를 수행할 수 있게 된다.
이는 Docker가 매번 new container를 생성하기 때문이다 !!

Container를 생성하고 실행하는 방법을 알았다면 이번에는 container를 clean up 하는 방법에 대해서도 알아보자.

  • docker rm [container IDs]

여러 container를 동시에 clean up 할 때, container의 ID들을 다 작성하는 것이 굉장히 번거롭다 !
이런 경우에는 다음과 같은 명령어를 사용할 수 있다.

  • docker rm $(docker ps -a -q -f status=exited)
    • -q 옵션
      numeric ID를 return
    • -f 옵션
      주어진 condition에 따라 output을 filtering
    • --rm 옵션
      container가 종료될 때 관련 리소스(volume, filesystem) 등을 모두 clean up함.
  • docker container prune
    이 또한 같은 효과를 낼 수 있는 명령어이다.

container 뿐만 아니라 image도 더 이상 running을 할 필요가 없다면 지울 수 있다.

  • docker rmi
    사용하지 않을 image를 삭제한다.
profile
The World Is My Oyster 🌏

0개의 댓글