Docker 명령어 사용하기

작성자 : 정지우

1. 첫 번째 이미지 실행하기

(1) 도커가 잘 실행되었는지 테스트 하기 위한 명령어

$ docker run debian echo "Hello World"

  • docker run : 컨테이너를 시작하는 역할 수행
  • debian : 인수로 사용함. 사용하고자 하는 이미지의 이름을 말함.

    1_docker_run

**<명령결과 해석="">**

[1] 반환된 결과 첫번째 줄 : 로컬에 드비안 이미지가 없음을 알려줌

[2] 도커는 온라인으로 도커 허브를 확인하고 최신 버전의 드비안 이미지를 다운로드함.

[3] 이미지 다운로드가 되면 도커는 이미지를 실행 상태의 컨테이너로 전환함

[4] echo “Hello World” 라고 작성한 명령을 수행하게 됨

[5] 해당 명령을 수행한 결과는 결과의 가장 마지막 줄에 출력됨

(cf) 같은 명령을 다시 한번 더 실행하게 될 경우

  • 이미지 다운로드 하지 않고 곧바로 컨테이너를 실행하게 됨.
  • 도커는 컨테이너를 시작하고, echo 명령을 수행한 다음, 다시 컨테이너를 종료함.

    2_docker_run2


(2) 컨테이너 내부에서 쉘(shell)을 수행하도록 도커 사용

$ docker run -i -t debian /bin/bash

echo “Helo from Container-land!”

exit

3_docker_shell

**<명령 결과="">**

  • 원격 머신에 ssh로 연결되는 것처럼 컨테이너 내부에 새로운 명령 프롬프트가 나타남.’
  • -i -t 플래그 : 컨테이너와 tty 모드와 대화형 세션을 사용하겠다는 것을 의미
  • /bin/bash 명령 : bash 쉘을 반환함.
  • 쉘을 빠져나오면 컨테이너는 종료됨.

+) 컨테이너는 주 프로제스(main process)가 실행되는 동안에만 동작함.



2. 기본 명령어

(1) -h플래그를 이용하여 컨테이너에 새로운 호스트 이름 부여하기

$ docker run -h CONTAINER -i -t debian /bin/bash

-h : 컨테이너에 새로운 호스트 이름을 부여

(2) docker inspect 를 실행하면서 컨테이너의 이름 or ID를 주면 컨테이너에 대한 자세한 정보를 얻을 수 있다.

$ docker inspect stupefied_turing

4_docker_inspect

(3) grep 명령, –format 인수 : 관심 있는 정보를 필터링

$ docker inspect stupefied_turing | grep IPAdress
$ docker inspect –format {{.NetworkSettings.IPAddress}} stupefied_turing
$ docker inspect –format {{.NetworkSettings.IPAddress}} stupefied_turing

5_docker_grep

(4) docker diff : 컨테이너가 시작된 이후에 변경된 파일의 목록들이 결과로 반환됨

$ docker diff stupefied_turing

(5)docker logs : 해당 명령을 컨테이너 이름과 함께 실행하면 컨테이너 내부에서 발생된 모든 작업 내용들을 볼 수 있다.

6_docker_logs

(6)쉘에서 빠져나오기

exit

7_docker_exit

쉘에서 빠져나오게 되면 컨테이너가 중지됨

(7)중지된 컨테이너를 포함한 모든 컨테이너의 목록을 확인

docker ps -a

(8)docker rm 명령 : 컨테이너를 삭제

$ docker rm stupefied_turing

(9)중지된 모든 컨테이너의 ID들을 반환

$ docker ps -aq -f stauts=exited

(10)중지된 컨테이너 정리하기

$ docker rm -v $ (docker ps -aq -f status=exited)

  • v 인자 : 도커가 관리하는 모든 볼륨들을 삭제함 (단, 다른 컨테이너에 의해서 참조되지 않는 상태에 있는 볼륨만 삭제함)
  • –rm 플래그 : 중지된 컨테이너가 적체되는 것을 막기 위해서 —rm 플래그를 이용하여 명령 실행함


3.도커파일로 이미지 만들기

  • 도커파일 : 도커 이미지를 생성하기 위해서 사용될 수 있는 일련의 절차들을 담고 있는 텍스트 파일

  • 새로운 폴더와 파일을 생성하는 작업

    $ mkdir cowsay $ cd cowsay $ touch Dockerfile

  • 다음의 내용을 dockerfile에 추가함

    FROM debian:wheezy RUN apt-get update && apt-get install -y cowsay fortune

    (FROM 설정에는 사용할 기본 이미지 - 앞서는 debain을 사용하였지만, 이번에는 ‘wheezy”라는 태그가 표기된 버전을 사용함)

    • 모든 도커파일에는 첫 번째 설정으로 FROM 명령이 포함되어 있어야 함
    • RUN 설정은 이미지 내부에서 수행될 때 쉘 명령을 지정할 때 사용함.


  • 새로운 폴더와 파일을 생성하는 작업

    $ docker build -t test/cowsay-dockerfile .

  • 앞선 예제와 같은 방법으로 이미지를 실행시킬 수 있다.

    $ docker run test/cowsay-dockerfile /usr/games/cowsay “Moo”

이미지 , 컨테이너, 그리고 UFS(Union File System)

  • UFS(유니온 마운트) : 여러 개의 파일 시스템들을 겹칠 수 있도록 해줌. 사용자에게는 하나의 파일 시스템처럼 보이게 됨.

  • 컨테이너의 상태 : 생성(created), 재시작(restarting), 실행 중(running), 일시중지(paused), 종료(exied)

4. 레지스트리를 이용한 작업

작성한 이미지를 도커 허브에 업로드하고 다른 사람들이 다운로드하여 사용하도록 할 수 있다.

도커 허브는 명령 줄과 웹 사이트를 통해서 접근할 수 있다. http://registry.hub.docker.com 사이트를 통하여 기존의 이미지들을 검색할 수 있음

레지스트리, 저장소, 이미지 , 태그

  • 레지스트리(Restry) 이미지를 운영하고 배포하는 역할을 담당하는 서비스. 기본 레지스트리는 도커 허브.

  • 저장소(Repository) 관련된 이미지들(일반적으로 같은 응용프로그램 또는 서비스의 각기 다른 비전)의 집합

  • 태그(Tag) 저장소에 있는 이미지에 붙여진 알파벳과 숫자로 된 구분자(예를 들면 14.04 또는 stable과 같이 사용된다.)


개인 저장소

타인이 이미지에 접근하지 않도록 할 수 있다.

  • 약간의 비용 지불, 개인 저장소 운영 (도커 허브 또는 quay.io와 같은 서비스)
  • 나만의 레지스트리를 운영

이미지 네임스페이스

게시된 도커 이미지들은 다음과 같이 세 가지 네임스페이스에 소속될 수 있으며, 이미지 이름으로 구분할 수 있다.

  1. ex. amouat/realjs : 문자로 된 접두어와 / 로 이름이 구성되면 “user” 네임스페이스에 소속됨

  2. 접두어나 / 가 없는 debian, ubuntu 와 같은 이름은 “root” 네임스페이스에 속함

  3. 호스트 이름이나 IP가 접두어로 사용된 이름은 (도커 허브가 아닌) 서드-파티 레지스트리에서 운영되는 이미지들을 말함.

사용자는 네임스페이스로 이미지들의 위치를 정확하게 구분 지을 수 있다. debain 이미지를 이용하게 되면 다른 레지스트리에 있는 debian 이미지가 아니라 도커 허브의 공식 이미지를 이용하는 것이다.

Categories:

docker