본문 바로가기
docker

도커 클라이언트 명령어

by proudev 2023. 3. 30.

[따라하며 배우는 도커와 CI 환경 - 안재원 지음] 에서 공부한 내용을 정리한 페이지입니다.

 

도커 이미지의 내부 파일 구조 보기

docker run <이미지 이름> ls
  • docker: 도커 클라이언트 언급
  • run: 컨테이너 생성 + 실행
  • <이미지 이름>: 컨테이너를 위한 이미지
  • ls: 도커 이미지 실행하는 것 대신 실행할 명령어(ls는 파일 목록)
  • docker run <이미지 이름> 는 도커 이미지를 통해 컨테이너를 생성하는 명령어이지만....
  • docker run <이미지 이름> ls 실행하면 컨테이너 실행 명령어(docker run <이미지 이름>)는 무시되고 ls가 실행됨
  • docker run alpine ls 작동과정을 좀 더 자세하게 보면....
  1. alpine 이미지를 통해 컨테이너 생성
  2. alpine 이미지에 있는 파일 스냅숏 하드디스크로 전달됨
  3. alpine 시작시 실행될 명령어는 무시되고 ls가 실행됨. 여기서 더 자세히 설명하면... docker run은 docker create(컨테이너 생성)과 docker start(명령서 실행) 이 2개의 기능이 있다. 그러나 docker run alpine ls라는 명령어를 클라이언트에서 서버로 보내면.. 서버는 해당 명령어를 받고 docker create로 컨테이너까지 생성은 되나 docker start는 무시됨. 그리고 ls가 실행되어 현재 디렉토리의 파일 구조를 볼 수 있다. 왜냐하면 해당 도커 이미지의 ls와 같은 명령어를 확인하려면 도커 컨테이너가 생성되어야지 확인해볼 수 있기 때문이다.
  4. 단, ls 명령어는 모든 도커 이미지에 다 있는게 아니다... 그래서 ls 명령어가 있는 도커 이미지에서만 사용할 수 있다. 

실행중인 컨테이너 나열하기: docker ps

docker ps
  • docker: 도커 클라이언트
  • ps: process status
  • 현재 실행되고 있는 컨테이너를 알 수 있다.

실행중이거나 실행하지 않는 모든 컨테이너 나열하기: docker ps -a

docker ps -a
  • 현재 실행되고 있는 실행되고 있지 않는 모든 컨테이너들을 알 수 있다.
  • 여기서 -a는 all을 뜻한다.

도커 컨테이너에 생명주기가 있는데.. 도커 컨테이너를 생성하고, 시작, 실행하고 중지 삭제를 할 수 있습니다.

이와 관련된 명령어에 대해서 알아보겠습니다.

 

도커 컨테이너를 생성하고 실행하기: docker run <도커 이미지>

docker run <이미지 이름>

# 예시
docker run alpine
docker run redis
  • docker run <이미지 이름>은 도커 이미지를 통해 컨테이너를 생성하고 실행한다.
  • 그래서 docker run <이미지 이름>은 docker create 와 docker start 2개로 나눠 볼 수 있다.

 

도커 컨테이너 생성: docker create <도커 이미지>

docker create <이미지 이름>
# 예시
docker create redis
docker create alpine
  • 해당 명령어는 도커 이미지를 이용해서 컨테이너를 생성한다.
  • 컨테이너가 생성된 후 도커 이미지에 있는 파일 스냅숏이 컨테이너의 하드디스크로 다운로드 된다.

 

도커 컨테이너 실행: docker start <컨테이너 ID/이름>

docker start <컨테이너 ID/이름>
# 예시
docker start 3edmksfe12f #(컨테이너 ID)
docker start vigilenc_vara #(컨테이너 이름)
  • 생성된 컨테이너 실행 시작!
  • 도커 이미지에 있는 컨테이너 실행 시작 명령어가 컨테이너로 이동하고 컨테이너안에 어플리케이션이 작동한다.
  • 실행되면 해당 컨테이너 이름이 출력된다.
docker start -a <이미지 이름>
  • -a 붙이면 컨테이너 안에 출력된 결과물을 볼 수 있다.

도커 컨테이너 멈추기: docker stop <컨테이너 ID/이름>

docker stop <컨테이너 ID/이름>
# 예시
docker stop 2fewklsf3 
docker stop vege_dog
  • 컨테이너가 정리할 수 있는 시간을 갖고 그후 종료된다.
  • docker stop ----> sigterm(정리는 시간을 줌) -----> sigkill --> 메인 프로세스 종료, 컨테이너 종료

 

도커 컨테이너 즉시 중지하기: docker kill <컨테이너 ID/이름>

docker kill <컨테이너 ID/이름>
# 예시
docker kill 2fewklsf3 
docker kill vege_dog
  • sigterm 없이 바로 sigkill 보내서 프로세스 멈추고 컨테이너 중지시킴

도커 컨테이너 삭제하기: docker rm <컨테이너 ID/이름>

docker rm <중지할 컨테이너 ID/이름>
# 예시
docker rm 2sdfaw3dsa
  • rm은 remove의 약자이다.
  • docker rm <컨테이너 이름>을 사용할때 해당 컨테이너가 중지된 상태여야 한다.

 

중지된 모든 컨테이너 삭제하기: docker container prune

docker container prune

 

도커 이미지 삭제하기 : docker rmi <이미지 이름>

docker rmi <이미지 이름>
# 예시
docker rmi asdf3fsavsz3

 

사용하지 않는 데이터  삭제하기 : docker system prune

docker system prune​
  • 중지된 모든 컨테이너, 네트워크, 이미지 등 삭제됨

실행 중인 컨테이너에 명령어 전달하기 : docker exec

docker exec <컨테이너 ID/이름> ls
# 예시
docker exec vivid_lake ls
docker exec sadf1d23s ls

 

  • docker exec <컨테이너 ID/이름> ls 는 실행 중인 해당 컨테이너의 ls 명령어를 사용해서 최상위 디렉토리에 있는 파일 목록을 출력한다.
  • 이는 docker run <컨테이너 ID/이름> ls 와 결과가 같으나 차이점이 있다. 
  • docker run <컨테이너 ID/이름> ls 는 컨테이너를 생성하고 다음 명령어를 실행한다(컨테이너 생성 O)
  • 반면, docker exec <컨테이너 ID/이름> ls 는 컨테이너를 생성하지 않고 실행된 컨테이어에서 ls 명령어를 실행한다(컨테이너 생성 X, 컨테이너 실행 중일때만)

 레디스를 이용해 도커 컨테이너 이해하기

  • 레디스 서버를 실행하고 레디스 클라이언트를 실행하려면.. 먼저 레디스 서버를 실행하고 레디스 클라이언트 명령어를 실행 중인 레디스 서버에 명령어를 전달해야 됩니다. 아래 순서에 대해서 설명하겠습니다.
  1. 레디서 서버 실행: docker run redis
# 레디스 컨테이너 생성 및 실행
docker run redis

  2. 레디스 클라이언트 실행: docker exec -it <컨테이너 ID> redis-cil

# 해당 레디스 서버 컨테이너 안에서 reids-cil 실행!!! 그냥 redis-cil만 실행하면 레디스 서버와 소통할 수 없다.
docker exec -it <컨테이너 ID> redis-cil
docker exec -it asdfmkl12sdf redis-cil
  • -it 을 붙여줘야지 docker exec -it <컨테이너ID> redis-cil 명령어를 실행한 이후로 계속 해당 컨테이너에서 명령어를 내릴 수 있다. 해당 컨테이너에서 나오싶을때는 exit 입력하면 된다.
  • 만약 -it을 빼고 docker exec <컨테이너ID> redis-cil 입력하면 레디스 클라이언트를 실행하고 바로 종료해서 명령어를 입력할 수 없게된다.

실행 중인 컨테이너에 셀 환경으로 접속하기: docker exec -it <컨테이너 ID> sh

docker exec -it <컨테이너ID> sh
# 예시
docker exec -it sfmkl2efasdf sh
  • 이렇게 입력하면 docker exec -it <컨테이너ID>를 입력하지 않고 명령어만 입력해도 해당 정보를 얻을 수 있다.
  • 아래는 셀 환경에 들어가서 ls , touch new-file 명령어를 실행한 결과이다.
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # touch new-file
/ # ls
bin       etc       lib       mnt       opt       root      sbin      sys       usr
dev       home      media     new-file  proc      run       srv       tmp       var
  • docker exec -it <컨테이너ID> sh 입력해도 셀 환경에 접속할 수 있지만 exec 대신 docker run -it <이미지 이름> sh 입력해도 셀 환경에 접속할 수 있다.

'docker' 카테고리의 다른 글

도커란?  (0) 2023.03.29

댓글