본문 바로가기
클라우드 기초/도커&컨테이너

도커 cli 명령어 정리

by 라라쇼퍼 2023. 6. 16.
반응형

<rocky 9 기준>

 

도커 설치 전에 도커 허브에 회원가입을 하고 저만의 public repository를 생성했습니다.

이미지는 repository + tag 로 구성됩니다. 

 

<도커 설치>

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io
커뮤니티 에디션을 설치합니다.

docker --version
커뮤니티 에디션인 경우 version 은 24.x 로 확인됩니다.

systemctl enable --now docker

  • login
docker login
아이디 입력
패스워드 입력
  • search
docker search centos

docker search -f stars=30 centos  -> -f 옵션은 filter / 추천 수 30개 이상인 centos 이미지 찾음

docker search -f is-official=true centos -> 도커 공식이미지 centos 이미지 찾음

docker search -f is-automated=true centos -> 자동화 빌드가 설정된 centos 이미지

docker search --limit 10 centos -> 표시 결과수 10 개로 보여줌

docker search --limit 10 --no-trunc centos -> 설명 전체 출력해 줌
  • pull
docker pull centos   -> centos 리포지토리만 지정하게되면 최신 버전 centos 이미지를  
                        도커 허브에서 가져옵니다.
                        
docker pull centos:7   -> centos 7 버전으로 이미지 가져옵니다.

docker pull ksm/http:centos7 -> centos 7 버전을 ksm/http 허브에 저장, 아래 그림 참고

docker pull alpine  -> 참고로 alpine 매우 가볍고, 통신 테스트할 때 주로 쓰입니다.

 

 

이미지 이름은 repository:tag 로 구성됩니다. tag 는 보통 버전을 표시합니다.

 

  • image
docker images  -> 도커 이미지 목록 출력

 

  • tag  

tag 명령어를 통해 새로운 이미지 이름으로 바꾸더라고 image id는 동일합니다(위의 그림 참조).

docker tag <기존의 이미지명>:<기존의 태그명> <새로운 이미지명>:<새로운 태그명>

docker tag centos:7 kimseungmi/http:centos7

 

  • ps
docker ps   -> 실행되고 있는 컨테이너 확인 

docker ps -a   -> 실행되거나 멈춘 모든 컨테이너 확인

 

  • push
 docker push ksm/http:centos7   ->도커 허브에 ksm/http 라는 레포지토리에 
                                  centos7(태그) 이미지 업로드

 

  • run : create + start

 

주의할 점은 이미지는 컨테이너가 아니라는 점입니다.

컨테이너는 이미지가 실행된 상태를 의미합니다.

 

docker run -d --name h2 httpd  서비스의 경우 컨테이너 생성 및 실행시 -d 옵션

docker run -it --name c2 centos:7 쉘의 경우 컨테이너 생성 및 실행시 -t 옵션

docker run -itd --name n1 nginx 서비스 쉘 구분 없이 컨테이너 실행 옵션은 -td 
단, 내부로 진입하지않는 점이 -d, -it 와 차이점입니다. 

docker run -itd --name c3 centos:7 


-- name 옵션은 컨테이너 이름을 지정하는 것으로, 해당 옵션 설정해주지 않으면 이름이 자동으로 
생성되는데, 컨테이너 지정할 때 불편할 수 있습니다.
그러니 -- name 옵션 잊지말고 지정해줍니다. 


-i 옵션은 컨테이너의 표준 입력(stdin)을 활성화하는 것입니다.  주로 -it 로 t 와 함께 쓰입니다.

 

c2 컨테이너 실행 결과 컨테이너 내부로 들어간 상태를 확인할 수 있습니다. 

 

  • exit 또는 ctrl +p+q
docker run -it --name a1 alpine

ctrl + p + q    -> 쉘인 경우 컨테이너 종료하지 않고 빠져나오는 방법

docker run -d --name h1 httpd

exit      -> 서비스인 경우 컨테이너 종료하지 않고 빠져나오는 방법

docker exec h1 /bin/bash

exit

 

  • attach
docker attach a1  -> alpine a1 컨테이너에 다시 진입

ctrl + p + q    -> 이거 대신 exit 을 하게되면 컨테이너가 종료됩니다.

 

  • rm
docker rm n1   n1으로 이름이 지정된 컨테이너를 삭제
단, 실행중인 컨테이너는 삭제 불가합니다.

docker stop n1    실행중인 컨테이너 삭제할려면 먼저 컨테이너를 멈추고

docker rm n1             그 후에 삭제합니다.

docker rm -f n1   실행중인 컨테이너라도 강제로 삭제하려면 쓰는 옵션이 -f 

docker rm -f $(docker ps -aq)   모든 컨테이너 한번에 삭제

 

  • rmi

컨테이너에는 이미지 링크가 걸린게 아니라 컨테이너에 이미지가 복사되어 있는 것입니다.
그래서 이미지 삭제한다고 컨테이너 작동 불가한 것은 아닙니다. 

docker rmi nginx   -> nginx 이미지를 삭제

docker rmi -f nginx -> 실행중인 nginx 이미지 강제 삭제

 

  • inspect
 docker run -d --name h2 httpd  -> h2 라는 이름의 httpd 컨테이너를 실행합니다. 
  
 docker inspect h2 ->실행된 h2 컨테이너의 세부 정보를 출력합니다. 
                      그러면 여기서 httpd 컨테이너의 ip address도 확인이 가능합니다.

확인된 ip 주소로 접속 확인해보면 아래와 같은 결과가 나옵니다.

 

  • exec
docker run -d  --name h1 httpd  -> apache h1 컨테이너를 실행합니다.
docker exec -it h1 /bin/bash  -> 컨테이너 내부로 들어가는 명령어
cat > htdoc/index.html << EOF  -> h1 컨테이너 내부에서는 vi 편집기가 없으므로 cat 으로 입출력
> <html>
> <body>
> <h1> 
> KSM-docker-httpd
> </h1>
> </body>
> </html>
> EOF

curl 로 확인해봅니다. 

 

 

만약 컨테이너를 내부로 들어가지 않고(대화형 필요없이) ls  명령어 실행결과를 보고 싶다면

아래처럼 입력하시면 됩니다. 

 

docker exec name (컨테이너 이름) ls  [디렉토리]

 

단, 여기서 실행하는 명령어는 호스트(가상머신)에 있어야하고, 컨테이너에서도 지원하는 명령어일 때만 가능합니다. 

 

docker 의 lifecycle과 관련하여,

docker stop: 프로세스가 죽고, 내부 메모리도 정리됩니다.
docker restart: stop 시킨 docker 컨테이너 재시작 가능하지만, 메모리에 저장되어 있는 것은 없습니다. 
docker pause: 프로세스가 즉각 정지되나, 내부 메모리에 있는 것은 그대로 저장됩니다.
docker unpause 로 정지된 컨테이너를 다시 작동하게 합니다. 
반응형

댓글