[Docker] Docker 정리 (4) - Docker 명령어들

2023. 4. 10. 16:28docker

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

도커 이미지 복습

docker                 run                      <image이름> 
도커 클라이언트 언급     도커 컨테이너 생성 및 실행     이 컨테이너를 위한 이미지

ex) docker run mysql

작동 순서 복습

  1. 도커 클라이언트에 명령어 입력 후 도커 서버로 보냅니다.
  2. 도커 서버에서 컨테이너를 위한 이미지가 이미 캐시되어 있는 지 확인합니다.
  3. 없으면 도커 허브에서 다운 받아오고, 있으면 이미 가지고 있는 이미지로 컨테이너 생성합니다.

명령어

docker run <도커이미지> ls

ls명령어로 현재 디렉토리의 파일리스트 보여줌

  • hello-world 이미지로는 ls명령어 사용 불능

Alpine 이미지 파일 스냅샷 안에 이미 ls 사용하게 하는 파일이 있는데 'docker run hello-world'는 excutable not found라며 실행할 수 있는 파일을 못찾는다고 뜸.

도커 컨테이너 명령어

docker ps (process status)

현재 진행중인 컨테이너 나열

  • 2개 터미널 준비
  • 첫번째 터미널에서 container하나 실행

  • 두번째 터미널에서 docker ps로 확인

 

CONTAINER ID : 컨테이너 고유 아이디 (해시값) 실제로 더 길지만 일부분만 표출됨!  
IMAGE : 컨테이너 생성시 사용한 도커 이미지 
COMMAND: 컨테이너 시작시 실행될 명령어. 대부분 이미지에 내자외 있어서 별도 설정 필요 x  
CREATED : 컨테이너 생성시간    / - **STATUS**: 컨테이너 상태 
PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트. 특별 설정 없을 경우 출력x
NAMES : 컨테이너 고유 이름. 컨테이너 생성시 --name 옵션으로 설정하지 않으면 도커엔진에서 임의로 형용사 + 명사 조합으로 설정합니다.

 
id와 마찬가지로 중복 안되고 **"docker rename"** 명령어로 이름 변경 가능합니다.

$ docker rename 원래이름 바꿀이름

 

 

특정 항목만 나열하고 싶은 경우

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

 

꺼져있는 모든 컨테이너 나열

$ docker ps -a

 

 

도커 컨테이너 생명주기 명령어

[생성 create] - [시작 start] -> [실행 running] -> [중지 stop] -> [삭제 deleted]

$ docker create <이미지 이름>
$ docer start <시작할 컨테이너 id / name>
|---------- $ docker run <이미지 이름> ---------|

                                                                       $ docker stop <중지할 컨테이너 id/ name >    
                                                                                       $ docker rm <삭제할 컨테이너 id/ name>

도커 생성 및 실행 

docker run = docker create + docker start


docker run 은 docker create <이미지 이름> + docker start <컨테이너 id / name> 을 한번에 실행하는 것입니다.

$ docker run <image 이름>
​
​
$ docker start hello-world
>> ee0f39b8b3d5cd3029ef97651325e10cc607e10ffff03dc8e9b59cbfe5a5ddf
​
# 생성된 container id로 실행
$ docker start -a ee0f39b8b3d5cd3029ef97651325e10cc607e10ffff03dc8e9b59cbfe5a5ddf
​
​
# Hello from Docker!
# This message shows that your installation appears to be working correctly.
​
# To generate this message, Docker took the following steps:
# 1. The Docker client contacted the Docker daemon.
# 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
#    (arm64v8)
# 3. The Docker daemon created a new container from that image which runs the
#    executable that produces the output you are currently reading.
# 4. The Docker daemon streamed that output to the Docker client, which sent it
#    to your terminal.
#
# To try something more ambitious, you can run an Ubuntu container with:
# $ docker run -it ubuntu bash
#
# Share images, automate workflows, and more with a free Docker ID:
# https://hub.docker.com/
​
​
# -a (attach)태그 빼면 
$ docker start ee0f39b8b3d5c  # 해시값 앞 일부만 넣어도 가능!
>> ee0f39b8b3d5cd3029ef97651325e10cc607e10ffff03dc8e9b59cbfe5a5ddf

도커 중지 및 삭제


도커 생명주기 중 중지하는 부분
docker stop / docker kill로 죽일 수 있습니다.

# 도커 한 터미널에서 우선 실행시키기!
$ docker run alpine ping localhost
​
# 현재 실행 중인 도커 컨테이너 프로세스 상태
$ docker ps
/*
CONTAINER ID
0e2dd35b98f
e0s0eqlaalf
*/
​
​
# ps로 나온 CONTAINER ID들 중 stop할 id넣어서 stop
$ docker stop

Stop 과 Kill 차이는?

공통점은 둘 다 실행중인 컨테이너 중지

  • Stop은 자비롭게 그동안 하던 작업들을 완료하고 (메세지를 보내고 있었으면 완료하고) 컨테이너 중지
  • Kill은 어떤 기다리는 거 없이 바로 컨테이너 중지

docker rm docker ps -a -q

모든 컨테이너 싹 다 삭제!


docker rmi <이미지 id>

특정 id의 이미지를 삭제!


docker system prune

한 번에 컨테이너, 이미지, 네트워크 모두 삭제

  • 도커를 쓰지 않고 모두 정리하려고 할 때 사용하면 좋음
  • 하지만 이것도 실행중인 컨테이너에 영향을 주진 않음!

 


이미 실행중인 컨테이너에 명령어 전달할 때가 있습니다.

docker exec <컨테이너 id>

1. 터미널 2개 실행합니다.

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

3. 두 번째 터미널에서 컨테이너가 잘 작동하나 확인 후 명령어 전달합니다

docker exec <컨테이너 id> ls

docker run <컨테이너 id> ls와 같은데 run은 생성도 해주는 것