Docker를 사용하면서 가장 기본이 되는 명령어들에 대해서 알아보고자 한다.
docker pull
은 docker image repository로부터 docker image를 가져올 수 있는 명령어이다.
$ docker pull --help
여기서 --help
는 어떻게 docker pull
명령어를 사용할 수 있는지에 대한 정보를 알 수 있다.
예를 들어서 Ubuntu의 버전이 18.04인 docker image를 가져오고자 한다면 다음과 같이 입력해주면 된다.
$ docker pull ubuntu:18.04
이렇게 입력하면 docker hub에서 해당하는 docker image를 내려 받을 수 있게 된다.
docker images
는 local에 존재하고 있는 docker image들의 리스트를 출력할 수 있는 명령어이다.
$ docker images --help
마찬가지로 --help
명령어는 어떻게 사용할지에 대한 option 등을 알려주고 있으며, 다음과 같이 입력하면 현재 local에 존재하는 모든 docker image를 확인할 수 있다. 이전에 test하느라 download 받았던 "hello-world"라는 docker image도 존재하는 것을 확인할 수 있다. 여기서 "CREATED"는 user가 docker image를 내려받은 시기가 아니라 해당 docker image가 build되어진 시기를 말한다.
docker ps
는 현재 실행하고 있는 docker container의 리스트를 확인할 수 있는 명령어이다.
$ docker ps
기본적으로 아직은 실행하고 있는 container가 없기 때문에 실행중인 container 리스트가 없는 것을 확인할 수 있다. 이후에 실행하게 된다면 해당 container의 정보가 출력될 것이다. 만약 다음과 같이 -a
option을 추가하게 된다면 이전에 실행 되었던 docker container의 리스트를 확인할 수 있다.
$ docker ps -a
이전에 "hello-world"를 docker run
명령어를 이용해서 실행시켰던 기록이 남아있는 것이다.
docker run
은 새로운 docker container를 실행시키는 명령어이다.
$ docker run
이 명령어도 --help
를 함께 사용하면 사용할 수 있는 option들이 엄청 많이 나오게 된다. 기본적으로 사용하는 명령어의 순서는 다음과 같다.
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
예를 들어 다음과 같이 입력을 할 수가 있다.
$ docker run -it --name test1 ubuntu:18.04 /bin/bash
먼저 -it
를 보면 -i
와 -t
option 2개가 합쳐진 것으로, 해당 container를 실행시키는 것과 동시에 interactive한 terminal로 접속이 가능한 option이다. 보통 이 2개의 option은 함께 사용이 되어 현재 terminal에서 container 내부로 바로 접속이 가능해지게 된다.
--name
은 container id를 사용하지 않고 대신에 구분하기 쉽도록 별명을 붙여줄 수 있게 된다. 보통 지정해주지 않으면 구분하기 container id가 어려운 문자들의 조합으로 만들어져 container 이름이 존재하기 때문에 자주 사용하는 container들을 쉽게 구분하고자 한다면 별명을 붙여주는 것이 좋다.
ubuntu:18.04
는 docker container를 실행시키고자 할 때 사용하는 docker image를 입력해준 것이다.
/bin/bash
는 원래 linux 명령어로, container를 실행시킴과 동시에 실행이 되는 명령어로 bash terminal을 사용하는 것을 나타낸다.
docker start
를 이용해서 container를 시작할 수 있으며, docker restart
를 이용해서 container를 재시작 할 수 있다.
$ docker start [container name]
$ docker restart [container name]
docker exec
은 docker container의 내부에서 특정 명령을 내리거나 내부로 접속할 수 있는 명령어이다.
$ docker exec
마찬가지로 다음과 같이 --help
를 함께 입력해주면 어떠한 option들이 있는지 확인이 가능하다. docker exec
를 사용하기 위해서는 현재 실행 중인 docker container가 존재해야 한다. 그래서 먼저 다음의 명령어를 입력해서 임의로 docker container 하나를 실행시킬 것이다. 대신에 동일한 terminal에서 실행시키기 위해서 -d
option을 추가해서 해당 container를 background에서 실행시켜 container에 접속이 종료가 되더라도 계속 실행시키고자 한다. 그러면 위와 같이 docker ps
를 통해서 현재 실행되고 있는 docker container가 있음을 확인할 수 있다. 그리고 다음과 같이 입력하여 이 container의 내부로 들어갈 것이다.
$ docker exec -it test2 /bin/bash
여기서 -it
라는 option을 해줘야 STDIN 표준 입출력을 열고 tty(pseudo-TTY)를 통해 접속할 수 있다. 이는 docker run
과 마찬가지로 interactive한 terminal에 접속이 가능해지며, 접속이 완료되면 다음과 같이 기존의 local terminal 정보에서 접속한 container로 정보가 변경된 것을 확인할 수 있다. 접속한 해당 container를 빠져나와 원래의 local terminal로 오고자 한다면 exit
명령어를 입력하면 된다.
docker logs
는 docker container의 log를 확인할 수 있는 명령어로 다음과 같이 입력하면된다.
$ docker logs
다시 --help
명령어를 입력해줘서 사용이 가능한 option들을 확인할 수 있다.
Log를 확인하기 위해서 먼저 새로운 docker container를 실행시킬 것이다.
$ docker run --name test3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"
이번 docker run
은 docker image를 "busybox"로 선택해서 "test3"라는 이름으로 뒤에 입력시킨 명령어를 실행시키고 있다. 뒤에 입력시킨 명령어의 정체는 log를 통해서 확인할 수 있다.
"busybox"라는 docker image가 없기 때문에 자동으로 pull이 되어 내려받고 이후에 실행이 되는 것을 확인할 수 있다. 그리고 docker ps
를 통해서 test3라는 docker container가 실행되고 있는 것을 확인할 수 있다.
그리고 이제 docker logs
명령어를 다음과 같이 입력하고자 한다.
$ docker logs test3
이전에 입력한 명령어의 정체는 1초에 한번씩 시간을 출력하는 명령어라서 docker container에서는 1초에 한번씩 현재 시간을 출력하고 있는 것을 확인할 수 있다. 그리고 다음과 같이 option을 하나 추가해볼 것이다.
$ docker logs test3 -f
여기서 -f
이라는 option은 지속적으로 log를 tracking할 수 있다. 그래서 1초마다 계속해서 시간을 확인할 수 있다.
docker stop
은 현재 실행 중인 docker container를 멈추는 명령어이다.
$ docker stop
그래서 docker stop
을 이용해서 현재 실행중인 docker container들을 중단시켜보고자 한다. 멈추고 싶은 docker container의 별명을 뒤에 입력해주면 해당 docker container를 멈출 수가 있다.
입력할 때마다 해당 container가 현재 실행되고 있는 docker container 리스트에서 사라지는 것을 확인할 수 있다.
docker rm
은 linux 명령어와 똑같이 원하는 docker container를 없앨 수 있는 명령어이다. 주의해야 할 점은 docker stop
의 경우에는 현재 실행중인 docker container를 중단시키는 역할을 하는 것일뿐이지 제거를 시켜주지는 않는다. 그래서 docker rm
이라는 제거 명령어를 통해서 해당 docekr container를 제거해줘야 한다.
$ docker rm
우선 다음의 명령어를 통해서 현재 어떠한 container가 존재하고 실행되었는지 확인하고자 한다.
$ docker ps
$ docker ps -a
그리고 이제 docker rm
명령어를 이용해서 제거할 수 있다. -a
option을 통해서 확인해보면 이전에 실행되었던 해당 container들이 모두 사라진 것을 확인할 수 있다.
docker rm
이 docker container를 삭제하는 명령어라면, dockdr rmi
는 docker image를 삭제할 수 있는 명령어이다.
$ docker rmi
원하는 docker image를 삭제하기 위해서 현재 docker image를 확인해보고, 다음과 같이 원하는 docker image를 없앨 수가 있다.