다음과 같은 상황을 보자.
ubuntu 이미지 파일로 mu 라는 컨테이너를 만들어 실행시켰다.
그리고 docker ps -a 명령어로 컨테이너 상태 목록을 확인하니 .. 방금 실행한 mu 컨테이너의 상태가 Exited(0) 로 뜬다.
또 내 pc만 이상한가,,, 도커를 처음 접했을 때 여기서 부터 혼란이 왔다.
1
2
3
4
5
|
$ docker run --name mu ubuntu
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f18d313fe9 ubuntu "/bin/bash" 5 seconds ago Exited (0) 5 seconds ago mu
|
cs |
도커 초보자(==나) 는 ubuntu 이미지로 컨테이너를 실행하면 컨테이너가 ubuntu의 모든 기능을 해줄 수 있다고 생각한다.
반은 맞고 반은 틀리다. 위 쉘에서 COMMAND 인자에 주목할 필요가 있다. COMMAND 는 컨테이너가 시작될 때 실행될 명령어이다.
docker run --name mu ubuntu 로 우분투 컨테이너를 실행하면 내장된 COMMAND 인 /bin/bash 가 실행되는 것이다.
우분투에서 /bin/bash 명령은 쉘을 실행하는 명령이다. 그럼 우분투 컨테이너를 실행시키면 쉘이 나와야 하는거 아닌가요 ?
맞다. 다음 화면이 우리가 생각한 이상적인 결과이다.
1
2
|
$ docker run -i -t --name mu ubuntu
root@f48d629ce6c4:/#
|
cs |
위 명령을 실행하니 우분투 컨테이너가 시작되어 실행될 때 /bin/bash COMMAND 가 적용되어 컨테이너 내 쉘이 생겨
우리가 우분투 컨테이너의 bash 쉘에서 명령을 할 수 있게 되었다.
위 명령은 앞선 명령과 다른 점이 있다. -i -t 옵션이다.
-i 옵션은 호스트(내pc)와 컨테이너 간 상호 작용을 활성화 옵션이다.
-t 옵션은 호스트와 컨테이너 간 tty 모드 활성화 옵션이다.
호스트와 컨테이너 간 상호 작용이 활성화 되고 tty 모드가 활성화 되어 호스트 터미널에서 컨테이너 내부로 명령을 입력하고, 출력을 볼 수 있다. 두 옵션 중 한 가지만 빼고 컨테이너를 실행시키면 원하는 쉘 기능을 온전히 수행할 수 없을 것이다.
그럼 우분투 컨테이너 쉘 말고, 호스트에서 컨테이너를 실행할 때 명령을 수행할 수 있나요?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$ docker run --name mu ubuntu "ls"
bin
boot
dev
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
$
|
cs |
물론이다. 앞서 COMMAND 인자만 바꾸면 된다. 내장된 COMMAND 인 /bin/bash 가 아닌 본인이 원하는 명령어를 입력하면 우분투 컨테이너에서 해당 명령어를 실행 후 호스트에게 결과를 주고 종료한다.
여기서 우리는 한 가지를 알 수 있다.
Docker 컨테이너는 단지 입력한 명령을 실행하고 출력을 보여준다 !!
참고한 글/도서
시작하세요! 도커/쿠버네티스 -용찬호 지은이
'Docker\K8s' 카테고리의 다른 글
[DevOps on Kubernetes] kubernetes에 Jenkins 설치하기 - 2 | 프로삽질러 (0) | 2021.08.03 |
---|---|
[DevOps on Kubernetes] kubernetes 에 Jenkins 설치하기 | 프로삽질러 (0) | 2021.08.03 |
[DevOps on Kubernetes] 도커로 GitLab 설치하기 | 프로삽질러 (0) | 2021.08.03 |
[Docker] docker 기초 1 - 기본 설명 및 명령어 정리 | 프로삽질러 (0) | 2021.04.27 |