Category: Docker

  • Docker Private Registry

    Debian 도커 이미지의 경우 apt update 부터 실행해야 할 정도로 날 것이기 때문에 최소한의 사용에 맞게 설정해야 할 필요가 있다. 이번에는 별도의 컴퓨터에 Registry를 설치해서 push와 pull 을 할 수 있도록 했다.

    인터넷에서 관련 정보를 찾으면 보통 registry 이미지를 5000번 포트를 이용해서 사용하는 예제들이 있다. 이를 따라해 보도록 한다.

    # sudo docker run --name private-repository -d -p 5000:5000 registry

    이미지를 build 할 때 IP 와 포트 등을 지정한다.

    # sudo docker build 192.168.88.250:5000/byun1114/my-debian

    Docker는 설치 단계에서 repository 의 정보를 받을 때 HTTPS를 이용한다. 그래서 그런지 build 할 때에도 기본적으로 https를 이용하는 것을 전제하고 있다. HTTPS를 이용하지 않는다면 오류가 발생한다. “http: server gave HTTP response to HTTPS client” 이런 오류 메세지가 나타나면 2가지 방법으로 해결할 수 있다고 하는데 그 중에 하나인 daemon.json 을 이용하는 방법을 사용하였다. 이 방법은 Docker 를 build 하는 컴퓨터에서 적용하는 것이다. 이 파일의 내용을 추가한 다음 Docker 를 재시작하고 build 하면 된다.

    /etc/docker/daemon.json
    {
        "insecure-registries": ["192.168.88.250:5000"]
    }
  • Docker 에서 build 하기

    Docker를 사용한다고 했을 때 자기가 원하는 이미지를 만들 수 있어야, 최소한 이 사람은 Docker를 어느 정도는 사용할 수 있겠구나라고 할 수 있을 것 같다.

    Python이나 R 을 사용할 경우 패지키 별 상호 의존성이 있는 경우가 많다. 나중에 가면 이 패키지가 기본인지 아니면 내가 어떤 경로를 통하여 설치했는지 기억이 가물거리게 된다. 물론 Anaconda에서도 가상 환경을 지원해 주고 있기 때문에 이것을 이용해 볼 수도 있겠다. 그렇다고 하더라도 시스템에서 설치하는 프로그램에 따른 종속성도 있으므로 Docker로 구현해 보도록 하겠다.

    Docker에서 이미지를 생성하는 것은 어렵지 않다. 빈 폴더에서 Dockerfile 이라는 파일을 만들고, 여기에 적절한 명령어를 입력해 둔다. 잘 구성된 파일이라면 새로운 이미지를 생성할 수 있다.

    예전에 apt-cacher-ng를 알게 되었을 때, Docker와 commit 이야기가 나왔었는데, 실제로 해보니 알 것 같다. Docker로 commit 까지 작업을 하는 곳에서는 미러나 캐시 서버가 있어야 확실히 편하다.

    Ubuntu에서 Python 을 컴파일하여 설치하는 것을 구현한 것은 다음과 같다. 블로그 가로폭의 문제로 잘려 보일지라도 알아서 잘 설정하면 된다.

    • 우선 도커 이미지에서 캐시 서버를 이용할 수 있도록 미리 설정된 apt.conf 파일을 컨테이너 내부의 /etc/apt 폴더에 복사해 둔다.
    • Python 파일도 복사한다.
    • 나중에 프로그램 설치하는 과정에서 시간대 설정 부분이 나오기 때문에 미리 시간대를 맞추어 둔다.
    • 여러 번의 삽질을 통하여 미리 파악한 최소한의 패키지를 설치한다.
    • Python을 컴파일 한다.
    FROM ubuntu
    ADD http://file.welovedoctor.com/share/FILE/PYTHON/apt.conf /etc/apt/
    ADD http://file.welovedoctor.com/share/FILE/PYTHON/Python-3.9.6.tgz /tmp
    RUN rm -rf /etc/localtime 
    RUN ln -s /usr/share/zoneinfo/Asia/Seoul/etc/localtime
    WORKDIR /tmp
    RUN tar -xzf Python-3.9.6.tgz && rm Python-3.9.6.tgz
    RUN apt -y update && apt -y upgrade
    RUN apt -y install curl build-essential \
     libssl-dev libssl-ocaml-dev libbz2-dev libgdbm-dev liblzma-dev \
     libffi-dev uuid-dev libzip-dev libzip-ocaml-dev libsqlite3-dev \
     libdb-dev tk libreadline-dev tk8.6-dev
    WORKDIR /tmp/Python-3.9.6
    RUN ./configure --enable-optimizations && make -j 8 && make install