Docker 명령어와 컨테이너 이해 (계속 추가)

2022. 7. 9. 13:40☁️ Cloud

기본적인 도커 클라이언트 명령어 알아보기

 

 

-- 현재 실행중인 컨테이너 나열
docker ps

-- 모든 컨테이너 나열
docker ps -a

-- 원하는 항목만 보기
docker ps --format 'table{{.Names}}'

docker ps --format 'table{.Names}}\t {{.Image}}'

 

(현재 실행중인) 컨테이너의 모든 항목 나열

원하는 항목만 나열할 때

docker run <이미지 이름> 의 내부

- 위 명령어는 docker create <이미지 이름>docker start <컨테이너 아이디/이름> 으로 이루어진 명령어다.

- docker create <이미지 이름> 명령어는 이미지의 스냅삿을 하드 디스크에 저장하고,

- docker start <컨테이너 아이디/이름> 은 디스크에 저장된 이미지를 CPU 메모리에 적재시켜 실행한다.

 

docker process 중단

docker stop <컨테이너 아이디>

docker kill <컨테이너 아이디>

두 명령어 모두 실행중인 도커 프로세스를 중단시키지만 차이가 존재한다.

stop 명령어는 해당 프로세스가 전송중인 메시지를 마저 보낸 후 종료되고, 

kill 명령어는 입력 즉시 해당 프로세스를 중지 시키는 차이점이 있다. 

 

 

docker 컨테이너 삭제

도커 컨테이너를 삭제하기 위해선 먼저 실행중인 프로세스를 중지시켜야 한다. 

-- 정지된 컨테이너 삭제
docker rm <아이디/이름>


-- 모든 도커 컨테이너 삭제
docker rm `docker ps -a -q`


-- 이미지 삭제
docker rmi <이미지 id>

-- 한번에 사용하지 않는 모든 컨테이너, 이미지, 네트워크 삭제
docker system prune

 

모든 도커 컨테이너를 삭제하는 명령어를 수행 시, 아래처럼 현재 실행중인 컨테이너는 삭제되지 않고 남아있는 것을 확인할 수 있다.

현재 실행중인 컨테이너에 명령어 전달

docker exec <컨테이너 아이디/이름> ls

현재 실행중인 컨테이너에 대해 exec 키워드를 입력하면 명령어를 전달할 수 있다. exec + ls 를 전달하여 현재 컨테이너의 디렉토리를 확인해 볼 수 있다.

 

 

Redis 를 통한 컨테이너의 이해 

  1. 도커에서 레디스를 실행하려면 우선 redis 서버를 먼저 실행해야한다. 
  2. 그 후 redis-cli 명령어로 레디스 클라이언트를 실행한다. 하지만 redis-cli 명령어는 레디스 서버가 실행중인 도커 컨테이너 내부에서 실행해야 하기 때문에 별도의 명령어를 추가해야 한다.
  3. docker exec -it <컨테이너 아이디/이름> redis-cli  를 입력해주자.
    1. -it  옵션의 의미 : -i interactive, -t terminal, 즉 interactive terminal 이란 의미로, redis server 내부에서도 터미널을 이용할 수 있게 해준다. 

boring_moore 는 redis 컨테이너의 name

* -it 명령어가 없으면 redis 서버에 들어간 후 곧 바로 나오게 된다.

 

실행중인 컨테이너에서 터미널 사용하기

쉘 내부에서는 ls, touch 등 리눅스 명령어를 사용할 수 있다.

docker exec -it <컨테이너 아이디/이름> sh 명령어를 사용하면 컨테이너 내부의 쉘 / 터미널 환경으로 접속할 수 있다.

shell 환경을 빠져나올 땐 cmd + C 가 아닌 cmd + D 를 사용한다. 

 

 

컨테이너와 이미지의 차이는?

컨테이너는 코드와 모든 종속성을 패키지화 하여 응용 프로그램이 하나의 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있는 소프트웨어의 표준 단위. 

컨테이너 이미지는 코드, 시스템 라이브러리 및 설정 같은 응용 프로그램을 실행하는데 필요한 모든 것을 포함하는 가볍고 독립적인 실행 가능 소프트웨어 패키지를 의미한다. 이미지는 결국 런타임에 컨테이너가 되다.