개발/Docker

[2] 도커 client 명령어

민지기il 2025. 3. 8. 22:30

[1] 도커 작동 순서

1. 도커 클라이언트에 명령어 입력 후 도커 서버로 보냄

2. 도터 서버에서 컨테이너를 위한 이미지가 이미 캐쉬되어 있는지 확인 -> 없으면 허브에서 다운 받음

3. 이미지로 컨테이너 생성(by 파일 스냅샷을 하드 디스크에 올림 -> 시작 커맨드로 어플리케이션 실행)

 

[2] 하드디스크 내 이미지, 내부 파일 시스템 구조

docker / run / 이미지 이름 / ls: 원래 이미지가 갖고 있는 시작 명령어를 무시하고 여기에 있는 커맨드를 실행함

docker run alpine ls -- alpine에는 ls를 실행하는 게 있음

docker run hello-world ls -- 오류남, hello-world에는 ls를 실행하는 게 없음

 

[3] 컨테이너들 나열하기

docker ps (process status)

실습)

1. 2개의 terminal 작동(컨테이너 실행용 + 명령어를 사용해 컨테이너가 잘 실행되고 있는지 확인용)

2. 1번째 terminal에는 container 하나 실행 

3. 2번째 terminal에는 docker ps로 확인

실행:

한 터미널에 docker run alpine ping localhost하고 다른 터미널에 docker ps 실행

결과:

CONTAINER ID   IMAGE     COMMAND            CREATED          STATUS          PORTS     NAMES

5cfe96b6974f   alpine    "ping localhost"   12 seconds ago   Up 12 seconds             amazing_beaver

 

[4] 도커 컨테이너의 생명 주기

 

docker run = docker create + docker create

1) docker create <이미지 이름> -- 파일 스냅샷(이미지의 특정 시점 상태를 저장하는 것)을 하드 디스크에 넣음

docker create hello-world해서 나오는게 생성된 컨테이너의 id

 

 

2) docker start <컨테이너 아이디 / 이름> -- 명령어를 컨테이너에 넣음

docker start -a <컨테이너의 id>

: -a란 도커 컨테이너가 실행될 때 output을 화면에 표출하는 역할

 

3) docker stop <컨테이너 id> -- 자비롭게 하고 있던 작업을 완료하고 컨테이너를 중지시킴

4) docker kill -- 기다리지 않고 컨테이너 바로 중지

5) docker rm <컨테이너 id> -- 컨테이너를 먼저 중지한 후 실행 가능

모든 컨테이너 삭제: docker rm `docker ps -a -q` 하고 docker ps -a 하면 아무것도 안 나옴

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

한번에 컨테이너, 이미지, 네트워크 모두 삭제: docker system prune -- 쓰고있는 컨테이너에는 적용 x

 

6) 이미 실행중인 컨테이너에 명령어를 전달 

docker exec <컨테이너 id>

실습) 

1. 2개의 컨테이너 실행

2. 첫번째 터미널에서 컨테이너 하나 실행 -- docker run alpine ping localhost

3. 두번째 터미널에서 컨테이너가 잘 작동하는지 확인 후 다른 명령어 전달 -- docker ps 후 docker exec <컨테이너 id> ls 

docker run -- 새로 컨테이너 만들어서 실행

docker exec -- 이미 실행중인 컨테이너에 명령어 전달

 

[5] 레디스를 이용한 컨테이너 이해

레디스 서버가 작동하고 있어야 함:docker run redis

-> 레디스 클라이언트 실행 후 명령어를 레디스 서버에 전달: redis-cli

 

but 위에대로 하면 충돌 발생 --> 컨테이너 안이 아니라 밖에서 redis-cli를 작동시키기 때문

=> docker exec -it <컨테이너 id> redis-cli로 작동시켜야 함!! 

여기서 it를 붙여줘야 명령어를 실행한 후 계속 명령어를 적을 수 있음!! (interative terminal)

 

[6] 실행중인 container에서 terminal 실행하기

docker exec -it <컨테이너 id> sh 처럼 sh/bash/zsh/powershell를 붙여준다. (범용적인건 sh, 우분투는 bash)

sh 붙이면 container 안의 shell 환경으로 접근한 것

shell에서 나오려면 ctrl+d 해야함 (ctrl+c 작동 x)