궁금한게 많은 개발자 노트

[ Docker ] docker cli 주요 명령어 및 옵션 본문

DevOps

[ Docker ] docker cli 주요 명령어 및 옵션

궁금한게 많은 개발자 2023. 3. 14. 17:35

docker image 명령어:docker image들을 조회 및 관리하기 위한 명령어로 다양한 옵션을 제공

https://docs.docker.com/engine/reference/commandline/images/

 

docker images

docker images: The default `docker images` will show all top level images, their repository and tags, and their size. Docker images have intermediate layers that increase reusability, decrease disk usage,...

docs.docker.com

 

docker 이미지들을 조회하기 위해서는 docker images 명령어를 사용할 수 있으며, 존재하는 image들 중 어떤 기준에 의해 filtering한 결과를 보고싶은 경우는 -f 옵션을 사용할 수 있습니다.

 

주로 테스트 시에 무분별하게 생성된 image들이나 컨테이너에서 사용되고 종료될 때 삭제되지 않은 image들을 정리할 때 아래 명령어를 통해 사용되지 않는 이미지들을 깔끔하게 정리할 수 있습니다.

docker rmi $(docker images -f "dangling=true" -q)

위 명령어는 dangling=true 옵션을 사용하여 dangling 이미지 (즉, 다른 이미지가 이 이미지를 기반으로 만들어졌지만 더 이상 사용되지 않는 이미지)를 필터링합니다.

 

추가로, 만약 이름이 없는 이미지를 모두 삭제하고 싶다면, 다음 명령어를 사용할 수 있습니다.

docker image prune -f

이름이 있지만, 컨테이너에 사용되고 난 후 status가 exited인 image들을 정리하고 싶은 경우는 다음 명령어를 사용합니다.

docker rm $(docker ps --filter status=exited -q)

 

 

 

다음은 docker run 명령어입니다.

docker run은 이미지로 부터 컨테이너를 생성하거나 실행시키는 명령어입니다.

https://docs.docker.com/engine/reference/commandline/run/

 

docker run

docker run: The `docker run` command first `creates` a writeable container layer over the specified image, and then `starts` it using the specified command. That is, `docker run` is equivalent...

docs.docker.com

docker run [옵션] [이미지] [명령어] [인자]

ex) docker run --rm ubuntu ls -l

기본적인 사용법은 위와 같으며 --rm옵션은 컨테이너 실행 완료와 함께 컨테이너를 삭제하는 옵션입니다.

자주 사용하는 옵션으로는 아래와 같습니다.

옵션 설명
-i --interactive 표준 입력을 활성화하며, 컨테이너와 연결되어 있지 않더라도 표준 입력을 유지 (bash 명령 사용)
-t --tty TTY 모드를 사용합니다. bash를 사용하려면 이 옵션을 사용해야 합니다.
--name 컨테이너 이름을 설정합니다.
-d, --detach detached 모드로 데몬 모드라고 불립니다. 컨테이너가 백그라운드로 실행됩니다.
-p, --publish 호스트와 컨테이너의 포트를 연결합니다. <host port>:<container port>
--priviledged 컨테이너 내부에서 호스트의 리눅스 커널 기능을 모두 사용합니다. 호스트 주요 자원 접근 가능
--rm 프로세스 종료 시 컨테이너 자동 제거
--restart 컨테이너 종료 시, 재 시작 정책을 설정합니다. ex) --restart="always"
-e, --env 컨테이너 내에서 사용할 환경 변수를 설정합니다.
--link 컨테이너끼리 연결합니다.
--expose 지정한 범위의 포트 번호를 할당
-h, --hostname 컨테이너의 호스트 이름을 설정합니다.
-w, --workdir 컨테이너 안의 프로세스가 실행될 디렉터리를 설정합니다.
-a, --attach 컨테이너에 표준 입력, 표준 출력, 표준 에러를 연결합니다.
--net, --network 컨테이너가 사용할 네트워크를 지정합니다. ex) --net=[bridge | none | host ... ]

 

 

docker network

docker container는 격리된 환경에서 동작하기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능합니다. 하지만 여러 개의 컨테이너를 하나의 docker network에 연결시키면 서로 통신이 가능해집니다.

https://docs.docker.com/network/

 

Networking overview

 

docs.docker.com

Docker 네트워크의 기본은 내 컴퓨터에서 어떤 네트워크가 생성되어 있는지를 아는 것입니다. docker network ls 커맨드를 사용하면 현재 생성되어 있는 Docker 네트워크 목록을 조회할 수 있습니다.

 

주로 위에서 설명했듯 컨테이너간 통신을 위해 사용되며 create/rm 옵션을 통해 추가하거나 제거할 수 있습니다. 컨테이너 실행 시에 --net, --network옵션으로 연결할 네트워크를 지정하여 원하는 컨테이너 그룹끼리 통신이 가능하게 해줍니다.

--net옵션 뿐만 아니라 docker network connet/disconnect 네트워크이름 컨테이너이름 으로 네트워크에 컨테이너를 추가할 수도 있습니다.

 

[ 네트워크 종류 ] 

bridge 네트워크는 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있도록 해줍니다.
host 네트워크는 컨터이너를 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됩니다.
overlay 네트워크는 여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용됩니다.

나머지는 위 docs 참고하시면 다양한 네트워크에 대해 참고하실 수 있습니다.

Comments