Category: Docker

  • chmod 적용시키기

    내가 잘 못하는 것인지는 모르겠는데, docker 에서 이미지를 만들 때 이상하게도 chmod 명령어가 먹히지를 않는다. 대부분의 경우에는 이 것이 문제가 되지는 않는데, 그럼에도 불구하고 chmod 를 적용시켜야 하는 경우도 있기 마련이다. cron 의 @reboot를 이용하니까 의외로 이게 된다. cron에서 @reboot 옵션으로 실행시킬 때 의외로 그냥 실행하면 안되는 경우도 있는데, 보통 이럴 때에는 부팅에 충분한 시간이 흐른 후에 실행하도록 sleep 옵션을 주면 된다.

    Dockerfile 에서 다음과 같이 실행하도록 한다. 이 부분에 앞서 cron 을 설치하는 부분이 있어야 한다.

    RUN echo '@reboot root chmod 777 -Rf /var/www/blog' >> /etc/crontab
  • Docker에서 Shiny server 이용하기

    결과 분석된 텍스트 내용을 DB에 넣는 것은 쉬운데 업무용 DB로 넣는 것은 꽤 난감한 상황이다. 그럴 것이라고 예상했기 때문에 Web에서 긁어서 붙일 수 있는 포맷으로 우선 진행하기로 하였고, Shiny를 이용하기로 하였다.

    기본적으로 Docker를 이용할 것이기 때문에, Docker 에서 Shiny Server를 설치하였다. Docker는 root가 기본 계정이라서 shiny-server.conf 파일을 수정해야 하는 줄 알고 한참을 진행하여 보았는데, connection 오류가 해결이 안되었다.

    Docker 에서 Shiny Server를 설치하는 과정에서 shiny 계정으로 shiny-server 프로그램이 동작한다. 따라서 설정 파일에서 run_as 부분은 shiny로 그대로 두어야 올바르게 동작한다.

    Nginx 에서 reverse proxy 설정은 역시 열심히 여러 설정을 따라 해봤는데, 효과는 없었다. 나의 경우에는 ‘/’를 붙여주는게 간단하고도 유일한 효과를 발휘한 방법이었다.

    location /shiny/ {
        proxy_pass http://shiny.private:3838/;
        }
    
  • ADD 와 COPY

    도커 이미지를 빌드할 때 외부의 파일을 넣어야 하는 경우가 있다.

    특정 파일에 특정 내용을 추가하면 되는 경우에는 echo 를 이용한다.

    RUN echo "AAA" >> /etc/a.txt

    특정 파일 내용을 바꿔야 하는 경우에는 sed를 이용한다. (맞나?)

    RUN sed -i 's/FROM/TO/g' /etc/a.txt

    특정 파일을 복사해서 넣어야 하는 경우에는 ADD와 COPY가 가능하다. ADD는 인터넷에 있는 파일도 입력해서 넣어줄 수 있는 장점이 있다. 단점으로는 내가 시도한 범위 내에서는 권한이 600으로 고정된다. 다른 권한을 부여하기 위해서는 미리 권한 변경을 한 파일을 빌드할 폴더에 넣어두고 COPY로 복사해서 넣어주면 된다.

  • useradd

    리눅스에서 계정을 생성하는 방법에는 useradd와 adduser가 있다. 한 번만 실행할 것이라면 adduser로 하는 것이 홈디렉토리와 비밀번호를 한 번에 만들 수 있으므로 편하다.

    Docker에서는 root가 기본 계정이다. 비밀번호는 제공되지 않는다. 비밀번호가 없기 때문에 발생하는 문제들도 있고 Python 은 root로 실행하면 경고 문구가 실행할 때마다 나온다. 그래서 Docker에서 계정을 만들어서 이용해 보기로 했다. 계정을 꼭 만들어야겠다고 생각한 이유는 RStudio는 꼭 비밀번호가 있어야 접속을 할 수 있기 때문이다.

    useradd로 할 경우 홈 폴더는 -m 옵션을 이용하면 관습적인 위치에 만들어 준다. 비밀번호는 encrypted 된 것을 입력해 주어야 한다. 이것을 이해 못해서 문제를 해결하는데 시간이 꽤 걸렸다.

    Dockerfile에서 다음과 같이 실행하여 준다. 예시는 byun1114 계정에 1을 비빌번호로 사용하겠다고 할 경우이다.

    RUN useradd -m -p $(echo "1" | openssl passwd -1 -stdin) byun1114