도커 CLI 명령어 정리

Lily·2023년 12월 12일
0

TIL

목록 보기
19/21

run

  • 10개의 hello-world container를 만들어보자
  • for ii in {1..10}; do docker run --name hello-world_${ii} hello-world; done
  • detach mode: -d
  • stdio의 사용: -it (^P^Q -> attach)
  • 종료 시 제거: --rm

\\
\\

rm: remove containers

  • docker container 지우기

  • docker ps -af 'name=hello' --format "{{.Names}}"

  • docker rm hello-world_10

  • docker ps -af 'name=hello' --format "{{.Names}}" | xargs docker rm

\\
\\

rmi: remove images

  • docker image 지우기

  • container가 존재하기 때문에 image 삭제가 실패한다.

  • force option을 실행할 수 있지만, 되도록이면 container를 삭제한 뒤 image를 삭제한다.

  • docker rmi hello-world

  • docker ps -a -f 'ancestor=hello-world' --format {{.Names}} | xargs docker rm

  • docker rmi hello-world

\\
\\

docker image

  • docker image ls
  • docker image pull nginx == docker pull nginx

inspect

  • Docker object에서의 low-level 정보를 표현:
    • docker image inspect == docker inspect
    • docker image inspect nginx
    • docker image inspect -f '{{.Config.Env}}' nginx
    • docker image inspect -f '{{json .Config.Env}}' nginx

save

  • 한개 이상의 이미지를 tar archive에 저장 (streamed to STDOUT by default)
    • docker image save == docker save
    • docker image save nginx > docker_nginx_1.19.10.tar
    • Docker image가 tar 파일로 저장된다. 여러 서버에 복사하거나 종종 사용하는 이미지는 network를 절약하거나 여러 문제를 일으키지 않도록 save해서 백업해두고 load로 사용하는 것이 좋다.
    • file docker_nginx_1.19.10.tar

load

  • docker image load == docker load
  • docker image ls # nginx 존재
  • docker image rm nginx
  • docker image ls
  • docker image load < docker_nginx_1.19.10.tar

\\
\\

exec

  • run은 새롭게 container를 실행하는 명령
  • exec은 기존에 존재하는 container에서 실행하는 명령
    • docker exec -it ubuntu_top top "-d 0.2"
    • docker exec -it ubuntu_top bash

\\
\\

binding

  • container의 자원을 외부와 연결
  • 일반적으로 I/O와 storage 관련을 연결한다

network

  • port binding (-p): host OS의 port와 container의 port를 바인딩
    • 기본: http 80, https 443, ssh 22
    • 1번 터미널: nginx container 실행
    • 2번 터미널: 8080 포트 LISTEN 확인
	// 1번 터미널
	$ docker run --rm -p 8080:80/tcp --name nginx_8080 nginx
    // --rm 은 종료되면 삭제한다는 뜻, 
    // -p 8080:80/tcp 는 모든 인터페이스에 대해
    // 호스트 포트 8080을 컨테이너의 tcp 포트 80으로 바인드 하겠다는 뜻
    
    // 2번 터미널
    $ ss -nlt 'sport=:8080'
    // 접속 시 nginx 페이지를 볼 수 있음
    $ curl 127.0.0.1:8080
  • network: docker network 사용

directory, file, block-device

  • mount binding: host OS의 directory를 바인딩
    • 1번 터미널: 컨테이너에 바인딩 할 dir 준비 및 실행
    • 2번 터미널: curl로 nginx에 접속
	// 1번 터미널
	$ echo "Hello Document root dir" > \ 
                                ~/nginx_doc_root/hello.txt
    $ docker run \
         --rm -d -p 8080:80/tcp \
         -v /home/.../nginx_doc_root:/usr/share/nginx/html \
         --name nginx_8080 nginx
         
	// 2번 터미널
    $ curl 127.0.0.1:8080
    $ curl http://127.0.0.1:8080/hello.txt
    $ echo "Hello world" >> ~/nginx_doc_root/hello.txt
    $ curl http://127.0.0.1:8080/hello.txt
    
    $ docker stop nginx_8080
    
    // -v (--volume) 대신 --mount 사용 방법
    $ docker run --rm -d -p 8080:80/tcp \
         --mount type=bind, \
                 src=/home/.../nginx_doc_root, \
                 dst=/usr/share/nginx/html \
         --name nginx_8080 nginx
            
  • volume: docker volume 저장소 사용
  • device: host OS의 device, GPU를 바인딩

environment

  • shell environment variables를 지정
  • 환경변수를 잘 사용해서 사용하기 편하게 함
	$ docker run --rm -it --name ubuntu_bash ubuntu bash
    root@asdfasdfa:/# echo $LANG // blank
    root@asdfasdfa:/# exit
    
    $ docker run --rm -it -e LANG=en_US.utf8 \
                          --name ubuntu_bash ubuntu bash
    root@asdfasdfa:/# echo $LANG // en_US.utf8
    root@asdfasdfa:/# exit
                          

attach, detach

  • docker run -it ...
  • interactive mode & terminal을 사용하는 경우,
    • container를 running 상태로 두고 잠시 빠져나올 때는 detach를 할 수 있다.
      • escape key sequence: ctrl+p && ctrl+q (^P^Q)
    • 처음 실행할 때 -d 옵션을 추가하면 detach mode로 실행할 수 있다.
      • docker run -rm -itd --name ubuntu_bash ubuntu bash
      • docker attach ubuntu_bash : detach mode로 실행했기 때문에, 바로 터미널에 진입할 수 없고, attach를 사용해서 진입해야 함

\\
\\

stop, start

  • docker stop ...
    • detached mode로 실행중이라면 외부에서 docker stop으로 정지
    • -it를 사용하지 않는 시스템은 signal 혹은 docker stop으로 정지
  • docker start ...
    • docker run --rm을 쓰지 않는 경우 exited 시 컨테이너는 남는다.
    • stop 후 재시작할 때는 start로 가능
profile
First Attempt In Learning

0개의 댓글