도커를 완전히 지우고 다시 설치하기
이미 설치되어 있는 docker 를 완전하게 지우고 다시 설치하는 방법을 알아본다.
현재 내 PC(VirtualBox - centos7)에 설치되어 있는 docker 는 community edition(docker-ce)이다.
이를 삭제하고 다시 설치하는 과정을 살펴보자.
주의 !!!
중요한 image 가 생성되어 있는 상태라면 아래와 같이 하면 안된다.
(/var/lib/docker 디렉토리 아래에 image 관련 data 가 저장되어 있다.)
완전히 삭제하고 재 설치하고 싶은 경우에만 참고할 것 !
도커 깔끔히 삭제하기
- docker container 를 모두 중지하고 삭제한다.
- local 에 저장된 image 를 모두 삭제한다.
- docker service, containerd service 를 중지한다.
- docker package(여기에서는 docker-ce package)를 삭제한다.
- /var/lib/docker 아래의 모든 파일, 디렉토리를 삭제한다.
- /var/run 아래에서 docker.sock, docker.pid 파일과 docker 디렉토리를 삭제한다.
docker container 를 모두 중지하고 삭제한다.
// docker container 중지 [root@dpleevbox bin]# docker stop $(docker ps -q) af31a57ff9d0 // docker container 삭제 [root@dpleevbox bin]# docker rm $(docker ps -a -q) af31a57ff9d0 ca715ff95fab
local 에 저장된 image 를 모두 삭제한다.
사실 image 와 container 를 docker 명령을 통해 삭제할 필요는 없다.
아래에 /var/run/docker 내의 모든 파일, 디렉토리를 삭제하는 과정이 있다.
저장된 image 와 container 정보는 이 때 어차피 모두 제거된다.
[root@dpleevbox bin]# docker rmi $(docker images -q)
docker service, containerd service 를 중지한다.
[root@dpleevbox bin]# systemctl stop docker.service [root@dpleevbox bin]# systemctl stop containerd.service
docker package(여기에서는 docker-ce package)를 삭제한다.
docker-ce 는 docker daemon 관련 패키지이고, containerd.io 는 containerd 관련 패키지, docker-ce-cli 는 client 관련 패키지이다.
(Docker 프로젝트들이 요즘은 완전히 분리되어 별도의 Component 들로 관리하는 경향이 있다.)
참고로, 이렇게 패키지가 분리되어 있기 때문에, 때로는 container 를 전혀 중지하지 않고 docker daemon 만 upgrade 하는 등의 작업이 가능하다.
// 설치된 docker 관련 패키지 확인 [root@dpleevbox ~]# yum list installed | grep docker containerd.io.x86_64 1.2.6-3.3.el7 @docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 @docker-ce-stable docker-ce-cli.x86_64 1:19.03.1-3.el7 @docker-ce-stable // containerd, docker-ce, docker-ce-cli 패키지 모두 삭제 [root@dpleevbox bin]# yum erase containerd.io.x86_64 [root@dpleevbox bin]# yum erase docker-ce.x86_64 [root@dpleevbox bin]# yum erase docker-ce-cli.x86_64
/var/lib/docker 아래의 모든 파일, 디렉토리를 삭제한다.
[root@dpleevbox run]# cd /var/lib/docker [root@dpleevbox docker]# rm -rf *
/var/run 아래에서 docker.sock, docker.pid 파일과 docker 디렉토리를 삭제한다.
[root@dpleevbox bin]# cd /var/run [root@dpleevbox run]# rm docker.sock docker.pid rm: remove 소켓 `docker.sock'? y [root@dpleevbox run]# rm -rf docker
여기까지 수행하였다면 Docker 를 완전히 삭제한 것이다.
도커를 재 설치하기
다음 과정을 통해 도커 패키지를 설치할 수 있다.
(docker community edition 패키지 기준)
- docker-ce 패키지를 설치한다.
- systemctl 을 통해 docker/containerd service 를 enable 한다.
- docker service 를 start 한다.
- docker run 을 통해 container 를 기동해본다.
docker 패키지를 삭제할 때는 containerd, cli, docker-ce 를 모두 삭제해야 했지만, 설치할 때는 docker-ce 패키지만 설치하면 3 패키지 모두가 설치된다.
// docker-ce 패키지 설치 [root@dpleevbox docker]# yum install -y docker-ce // 설치된 docker 패키지 확인 [root@dpleevbox docker]# yum list installed | grep docker containerd.io.x86_64 1.2.6-3.3.el7 @docker-ce-stable docker-ce.x86_64 3:19.03.2-3.el7 @docker-ce-stable docker-ce-cli.x86_64 1:19.03.2-3.el7 @docker-ce-stable
systemctl 을 통해 docker/containerd service 를 enable 한다.
enable 하면 symbolic link 가 각각 걸리는 것을 볼 수가 있는데, 이는 각 service 를 위한 systemd 설정 파일이다.
기동 옵션 등의 설정을 이 파일을 통해 변경할 수 있다.
[root@dpleevbox run]# systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@dpleevbox run]# systemctl enable containerd.service Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
docker service 를 start 한다.
중지할 때는 docker service 와 containerd service 를 각각 내려야 하지만, 기동할 때는 docker service 만 기동하면 자동으로 containerd service 까지 기동해준다.
[root@dpleevbox docker]# systemctl start docker.service [root@dpleevbox docker]# ps -ef | grep container root 14217 1 0 01:04 ? 00:00:00 /usr/bin/containerd root 14224 1 0 01:04 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 14358 6144 0 01:05 pts/0 00:00:00 grep --color=auto container
docker run 을 통해 container 를 기동해본다.
service 를 올렸고 container 가 정상적으로 기동된 뒤에 /var/run, /var/lib/docker 디렉토리를 확인해보면 필요한 파일이나 디렉토리들이 자동적으로 생성되었음을 확인할 수 있다.
docker images, docker ps 를 통해 image 와 container 도 정상적으로 생성되어 있는지 확인해본다.
// container 기동 [root@dpleevbox docker]# docker run -it ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 35c102085707: Pull complete 251f5509d51d: Pull complete 8e829fe70a46: Pull complete 6001e1789921: Pull complete Digest: sha256:d1d454df0f579c6be4d8161d227462d69e163a8ff9d20a847533989cf0c94d90 Status: Downloaded newer image for ubuntu:latest root@d57974e3eacd:/# // Host 에서 /var/run, /var/lib/docker 디렉토리 확인 [root@dpleevbox run]# ls *docker* docker.pid docker.sock docker: containerd libnetwork metrics.sock netns plugins runtime-runc swarm [root@dpleevbox docker]# cd /var/lib/docker [root@dpleevbox docker]# ls -al 합계 8 drwx--x--x. 14 root root 182 9월 6 01:39 . drwxr-xr-x. 61 root root 4096 8월 11 16:53 .. drwx------. 2 root root 24 9월 6 01:39 builder drwx--x--x. 4 root root 92 9월 6 01:39 buildkit drwx------. 3 root root 78 9월 6 01:40 containers drwx------. 3 root root 22 9월 6 01:39 image drwxr-x---. 3 root root 19 9월 6 01:39 network drwx------. 9 root root 4096 9월 6 01:40 overlay2 drwx------. 4 root root 32 9월 6 01:39 plugins drwx------. 2 root root 6 9월 6 01:39 runtimes drwx------. 2 root root 6 9월 6 01:39 swarm drwx------. 2 root root 6 9월 6 01:40 tmp drwx------. 2 root root 6 9월 6 01:39 trust drwx------. 2 root root 25 9월 6 01:39 volumes
여기까지 수행하였다면 깔끔하게 잘 설치된 것이다.