Docker 명령어

ohyujeong·2023년 6월 14일
0

Docker

목록 보기
2/2

Docker 명령어 정리

Image

Image 빌드

docker build --platform=linux/amd64 -t [Docker username]/[Image name] .

명령어를 입력하는 위치에 있는 Dockerfile 을 기반으로 image를 빌드한다. -t 옵션으로 뒤에 입력하는 이름으로 image 이름을 지정한다. --platform=linux/amd64 는 OS 호환을 위해 입력한다.

Image 조회

docker images
docker image ls
docker image ls -aq # image id 만 출력

현재 가지고 있는 image 리스트를 출력한다. -aq 옵션으로 image id 만 출력할 수 있다. 이는 추후 한꺼번에 image를 삭제할 때 용이하다.

Image 삭제

docker rmi [Image name/id]
docker image rm [Image name/id]
docker image rm $(docker images -aq) # 모든 image 삭제

나열한 image를 삭제한다. 단, 삭제를 위해서는 image를 기반으로 실행되고 있는 container가 없어야 한다. 모든 image를 삭제하고 싶다면 $(docker images -aq) (-a 는 "all"의 의미로 중복포함 모든 것, -q 는 "quiet"의 의미로 id만 출력)로 모든 image id 리스트를 가져와서 전체 삭제할 수 있다.

Docker hub

Docker 로그인

docker login -u [Docker username] -p [Docker password]

Docker hub사용을 위해서는 먼저 login을 해야한다. 한번 연결을 해 놓으면 그 다음부터는 하지 않아도 된다.

Docker hub에서 Image 다운로드/업로드

docker pull [Repo name/image name]
docker push [Repo name/image name]

pull 명령어로 Docker hub에 있는 image를 local로 가져오고, push 명령어로 Docker hub에 내가 생성한 image를 public하게 업로드한다. Repo name 은 본인의 Docker username이다.

Container

Container 실행

docker run --name=[container name] -p [host port:container port] -v [host volume path:conatiner volume path] [image name]

Container 실행 시 여러 플래그를 주어 실행할 수 있다.
--name= : 뒤에 container에 이름을 지정할 수 있고 이로써 container를 제어할 때 id가 아닌 name으로 제어할 수 있어 편리하다.
-p : 호스트 시스템의 포트를 컨테이너 포트와 매핑함으로써 컨테이너에서 오픈된 포트에 접근할 수 있다.
-v : 포트 매핑과 마찬가지로 호스트 시스템의 파일경로를 컨테이너 파일 경로에 매핑함으로써 두 파일경로가 동기화되어 호스트 파일 경로에서 컨테이너의 파일을 확인할 수 있다.

실행중인 Container 확인

docker ps -a
docker ps -q

시스템에서 현재 실행 중인 모든 Docker 컨테이너를 포함하여 모든 컨테이너를 나열한다. -a 플래그는 "all"를 의미하며, 이 플래그를 사용하면 종료된 컨테이너도 보여준다.
q 는 "quiet"을 의미하며, 이 플래그를 사용하면 컨테이너 ID만 보여준다.

Container 시작/다시시작

docker start [container name/id]
docker restart [container name/id]

start 명령어는 중지된 container를 다시 시작한다. 이 명령어로 컨테이너를 시작하면 컨테이너 내부에서 미리 정의된 명령이 실행된다.
restart 명령어는 실행 중인 container를 다시 시작한다. 이 명령은 기본적으로 docker stop 명령을 수행한 후 docker start 명령을 수행한 것과 같다.

Container 중지/일시중지

docker stop [container name/id]
docker kill [container name/id]

docker pause [container name/id]
docker unpause [container name/id]

stopkill 모두 Container를 중지시키는 명령어지만, kill 을 사용하게 되면 컨테이너를 정상적으로 종료시키는게 아니라 강제로 종료시킨다.

pause 는 실행 중인 Docker 컨테이너의 모든 프로세스를 일시 중지시킨다. 이는 컨테이너의 상태를 "일시 중지" 상태로 변경한다. unpause 명령을 통해 컨테이너의 상태를 "일시중지" 상태로 변경한다.

Container 삭제

docker container rm [container name/id] # container 명령어는 써도 되고 안써도 됨. 
docker container rm $(docker container ls -aq) # 복수로 나열 가능

Container를 삭제하는 명령어로, 삭제를 위해서는 먼저 중지상태로 만들어야 한다. 또한, 삭제된 container는 복구될 수 없다. container 명령어를 명시하지 않아도 작동하고, image를 삭제하는 것과 같이 $(docker container ls -aq) 명령어를 통해 한꺼번에 현재 있는 container를 모두 삭제할 수 있다.

Container logs

docker logs -f [container name/id]
docker logs --tail [container name/id]

-f 플래그는 "follow"의 약자로, 이 명령어는 Docker 컨테이너의 로그 스트림을 계속 추적하게 되고 즉시 출력하므로 실시간으로 로그를 확인할 수 있다.
--tail 플래그는 로그의 끝에서 특정 수의 줄만 출력하도록 Docker에 지시한다. 이 경우, 로그의 마지막 100줄만 출력하게 되어 매우 긴 로그에서 최근의 이벤트만 확인하고 싶을 때 유용하다.

Container에 접속

docker exec [option] [container name/id] [command] [arg]
# 예) docker exec -it my_container sh

option 에는 여러 가지가 있지만, 가장 일반적으로 사용되는 것은 예시에 사용된 -i-t 이다. -i 는 "interactive"를, -t 는 "pseudo-TTY"를 의미하며, -it 와 같이 이 두 옵션을 함께 사용하면 컨테이너에서 명령을 실행하면서 사용자 입력을 받을 수 있는 대화형 쉘을 얻을 수 있다. 이를 통해 컨테이너 내부에서 명령을 수행할 수 있게 된다.

Container detach & attach

docker run [image name]
docker run -d [image name]
-> container_id
docker attach [container id]

옵션 없이 명령어를 실행하게 된다면 명령어를 실행한 콘솔에서 로그를 출력한다.
-d 로 detach 옵션을 주게 되면 container가 background에서 실행되며 로그는 콘솔에서 출력되지 않는다. 명령어 실행 후 실행된 container의 id를 출력한다.


Docker Container Lifecycle

Docker의 명령어를 통해 설정될 수 있는 Container의 상태는 다음과 같다.

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글