도커를 완전히 지우고 다시 설치하기

이미 설치되어 있는 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

여기까지 수행하였다면 깔끔하게 잘 설치된 것이다.


You may also like...