[Docker] Docker System Update하기

기본 Ubuntu 이미지에 필요한 기본 패키지 설치

Docker에서 Ubuntu 이미지를 불러와서 사용하려 하면 버릇처럼 사용하던 sudo와 vi/vim editor가 작동하지 않아 당황스러울 수 있다. 게다가 Docker에서 이미지를 데려올 때 –lastest 옵션을 줘도 가끔 update되는 경우가 있으므로, 필자는 이를 한 번에 해결하는 방법으로 버릇처럼 시스템 업데이트를 하곤 한다.

막상 sudo와 vim을 설치하기 위해 apt install sudo를 입력해도 작동하지 않을 텐데, 이는 apt update를 해주지 않아서 나타나는 현상이다. 그러므로 apt update를 최신 상태로 만들어 주어야 하는데, 기왕 하는 김에 upgrade와 dist-upgrade까지 진행하자.

  1. Docker Hub 에서 Fresh한 Ubuntu 공식 이미지를 데려온다.

    1
    docker pull ubuntu
  2. Ubuntu 이미지로 컨테이너를 생성하는 작업은 본 글과 관련이 없으므로 생략하겠다.


  3. Docker Image를 이용하여 컨테이너 생성 시 쉘이 나타나면 아래와 같이 입력하여 시스템을 최신 상태로 업데이트해준다.

    1
    apt update && apt upgrade && apt dist-upgrade
  4. apt update가 완료된 시점부터는 sudo와 vim을 설치할 수 있다. 아래를 실행하여 두 패키지를 설치한다.

    1
    apt install sudo vim

이제 Docker의 바다에서 막 잡아온 싱싱한 Image로 만든 컨테이너에서 sudo와 vi/vim을 사용할 수 있게 되었다.


apt와 apt-get의 차이

APT는 Advancecd Package Tool의 줄임말이다. 리눅스 패키지를 관리하는 도구를 활용할 수 있는 명령이다.

Ubuntu 관련 문서들을 보면 어떤 경우는 apt를 사용하라고 하고, 어떤 경우는 apt-get을 사용하라고 하는데, 사실 둘 중 어느 것을 사용해도 큰 차이는 없다. apt는 apt-get의 기능이 복잡해 지면서 지나치게 많은 옵션들이 생겨났다보니 가장 널리 사용되는 기능 중 일부만 빼내어 만들었다. 자주 사용하지 않거나 모호한 기능들은 제외되어 있다. 그래서 어떤 경우는 apt만으로 작동하지 않아 apt-get을 사용해야 하는 경우가 있으나, 일반적인 경우는 apt만으로 충분하다고 생각하면 된다. (apt-get이 더 많은 기능을 제공한다.) apt는 apt.conf.d에서 세부 내용을 관리할 수 있다.

Ubuntu에서 APT 설정 시스템 파일 위치

apt-get이나 apt-cache보다 늦게 나온 sub-set인 apt에는 apt만이 가지고 있는 기능도 있다. apt로 패키지를 설치/제거 시 진행률을 시각적으로 보여주며, 특정 패키지 설치 후 해당 패키지와 관련 있는 패키지 중 업데이트가 필요한 내역을 보여준다. 그러므로 일반 사용자들은 apt-get보다는 apt를 사용하는게 더 낫다.


apt update, upgrade, dist-upgrade

필자는 위에서 apt update && apt upgrade && apt dist-upgrade를 하라고 3개의 명령을 합쳐 제공했다. 이 명령들은 아래와 같이 다르다.

명령 설명
apt update 업데이트할 패키지들을 확인하고 최신 버전이 무엇인지 정보를 갱신한다. 실제 업그레이드를 하지는 않는다.
apt upgrade update로 확인/갱신한 최신 버전 정보를 기반으로 서버에 올라와 있는 패키지 정보들을 확인하여 최신 버전으로 업데이트 한다. (버전 업그레이드)
apt dist-upgrade 의존성 검사를 진행하면서 패키지 내의 변경이 있다면 (upgrade 시 수행하지 못한) 의존성 패키지의 설치/제거를 수행한다. 패키지 간 의존성의 문제로 작동하지 않는 부분을 예방할 수 있다.

일반 사용자들은 사실 upgrade를 빼고, 대신 dist-upgrade만 사용해도 된다. 그냥 upgrade만 사용하면 설치된 패키지의 ‘버전만’ 업그레이드하며 의존성 관련 해서는 무시한다. dist-upgrade를 사용하면 특정 패키지의 의존성을 검사하여 필요한 의존성 패키지들을 ‘설치/제거; 하기 때문에 여러 종류의 의존성 패키지들의 버전이 다양하게 사용될 때 강제로 의존성을 변경시켜버릴 수 있다. 그 때문에 시스템을 복잡하게 사용하는 경우에는 사용을 지양하는게 좋다.


참고 자료