DevOps/docker

docker_tutorial:command1

mkdir 2021. 5. 29. 15:38

도커를 설치했다는 가정 하에, 도커의 기본 명령어들을 하나하나 알아보도록 하자.

진짜....많다....이걸 다 알아야함?

당연히 다 알 필요는 없다. getting start라고 이름을 붙인 만큼, 기초적인 명령어 몇 개만 숙지하고 넘어가자.

 

 

docker run

아까 말했듯이 도커는 생성과 실행, 관리가 간편한 편이다. 즉 간편함이 도커의 최대 장점이라는 것이다. 당연히 간편하게 삭제하고 실행하는 명령어를 정말 많이 쓴다.

docker run. 가장 많이 쓰이는 명령어다.

run 명령어의 실행 순서는 다음과 같다.

1. 먼저 로컬 도커 이미지 저장소에 해당 이미지가 있는지 검색하고, 이미지가 있을 경우 실행한다.
2. 이미지가 없을 경우, hub.docker.com(도커 허브)에서 해당 이미지를 pull받아와 실행한다.

CentOS 컨테이너를 실행하는 과정이다. 가장 먼저 이미지를 검색하고(centos:latest 이미지 검색), 이미지가 없으니 library/centos(도커 허브에 업로드된 CentOS 공식 저장소)에서 이미지를 검색해 pull 받아와 실행한다.

또한 이미지에 centos:7 이런식으로 태그를 붙일 수 있는데, 보통 태그엔 버전을 명시한다. 즉 centos:7은 CentOS 7을 받아오는 것이다.

Hello docker! 그런데 왜 EXITED...?

하지만 EXITED 상태다. 즉 종료된 컨테이너라는 것이다. 왜 종료 상태일까? 그건 run 명령어의 특징에 있다.

run 명령어는 이미지에 입력된 명령어들을 모두 실행했을 경우 컨테이너를 종료한다. 그럼 전혀 개발을 못하게 된다. 뭔가 이상하다. 이러면 쓰나마나다.

그래서 CLI에서 docker run --help를 쳐보면 각종 옵션들이 튀어나온다. 모두 컨테이너 '하나'를 제어하는데 쓰이는 명령어인데, 역시 다 알 필요는 없다. 가장 많이 쓰이는 명령어 몇 개만 짚고 넘어가자.

-d, --detach
도커는 도커 엔진이 컨테이너를 직접 실행한다. 컨테이너 하나의 실행이 끝나기 전까지 도커 엔진은 다른 일을 못한다. 그래서 할일을 다 하고 나면 프로세스를 다른 곳으로 돌리기 위해 컨테이너를 종료하고 그 안을 빠져나온다. 그런데 -d 옵션을 주면 도커 엔진이 컨테이너를 실행시키고 그대로 연결을 끊는다. 그럼 컨테이너는 독자적인 프로세스로 구동되는 것이니, 컨테이너가 터지든 말든 도커엔진은 신경끄고 자기 할일을 하는 것이다. 하지만 역시 컨테이너는 모든 명령이 끝나면 종료된다.

-i, --interactive
명령어를 모두 실행하고 나서 컨테이너 내부의 CLI 쉘(bash)을 추가로 생성해 쓸 수 있도록 한다. 그럼 각종 명령어를 사용해볼 수 있다. 물론 여기서 exit로 쉘을 나오면 컨테이너는 종료된다.

-t, --tty
컨테이너의 명령어를 모두 실행하고 난 뒤에도 컨테이너를 종료하지 않고 유지한다.

위 세 명령어는 보통 -dit라는 이름으로 한꺼번에 묶어서 사용한다. 백그라운드에서 컨테이너를 돌리고, bash 쉘을 생성하고, 컨테이너를 유지한다.

--name
컨테이너의 이름을 정한다. 위의 사진을 보면 niffy_어쩌고 하는 이상한 이름으로 되어있는데, 이 옵션을 지정하지 않으면 컨테이너의 이름이 랜덤으로 지어진다. 한 두개를 가볍게 운영할 때는 상관없지만, 다섯개만 넘어가도 헷갈린다. 그러니 이름을 지정해 이 컨테이너가 뭘 위한 친구인지 반드시 명시하도록 하자.

--hostname
컨테이너의 호스트명을 지정한다. 컨테이너 내부의 계정은 디폴트로 root 계정이고, 따로 사용자를 만든다고 해서 차등을 주지 않기 때문에(sudoers 파일이 없음)cli를 여러개 열어놓고 작업하다보면 역시 까먹는다. 귀찮지만 여기다가도 명시해주도록 하자. 타 컨테이너와 통신하는 경우 헷갈리지 않도록 DNS와 동일하게 맞춰주는 건 기본이다.

그래서 보통 일반적으로 사용하는 컨테이너 실행 명령어는 다음과 같다.

docker run -dit --name test --hostname testCon ubuntu:18.04

짠.

다른 명령어는 다음 편에서...