2019.10.23 Dockerfile로 우분투에 Python, MySQL, Node 설정하기.
# build
# ubuntu, flask, mysql
FROM ubuntu:16.04
# prevent interactive alert message asking root account password from mysql
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y
RUN apt-get install -y python python-pip python-dev build-essential
RUN apt-get install -y mysql-server
RUN apt-get install -y curl
# Install node
RUN curl --silent --location https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install --yes nodejs
RUN apt-get install --yes build-essential
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
# This needs to be done to start mysql server
# service mysql start
ENTRYPOINT ["chown -R mysql:mysql /var/lib/mysql /var/run/mysqld"]
설치 과정 중에 몇가지 문제가 있었다.
1. 우분투 18.04 버전에서 mysql 설치가 제대로 안 되던 점.
FROM ubuntu:latest -> ubuntu:16.04로 변경하는 것으로 처리했다. (난 굳이 18버전을 쓸 일이 없기 때문에)
2. interactive shell에 값을 입력하면 뻗는 문제
두 번째 마주한 문제는 mysql 설치시 root password를 설정하라고 interactive shell이 뜨는데 여기에 값을 입력하면 이후 진행이 안된다.
그냥 뻗는다.
그래서 Interactive shell이 뜨지 않게 ENV DEBIAN_FRONTEND noninteractive 를 설정했다.
처음에는 ENV를 RUN 밑에 두었는데 (이 전에 빌드를 몇 번 해서 빌드 과정 중에 캐시를 쓸 수 있게)
그렇게 하니 여전히 shell이 뜨는 문제가 있어 RUN 이 전에 설정을 해두어야 effective 한 것으로 예상, 위치를 FROM 바로 다음으로 옮겼더니 잘 되었다.
3. mysql 실행이 안 되는 문제
이 문제가 상당히 골머리가 썩었는데
결국 해결책은 ENTRYPOINT ["chown -R mysql:mysql /var/lib/mysql /var/run/mysqld"] 로 해결했다.
일단 ENTRYPOINT에 굳이 넣을 필요는 없는데 매번 실행시마다 입력하기 싫어서 저렇게 두었다.
chown은 권한을 변경해주는 명령어 라는 것은 알고있는데 그 뒤에 따라오는 인자들은 어떻게 해석하면 되는지 확실치가 않아서 알아볼 예정.
남은 작업은
1) 기초적인 플라스크 템플릿 구조를 만들어놓고 dockerfile 빌드할 때 포함시켜서 같이 포함되도록 하기.
2) dockerfile에 vue나 프론트엔드 의존성도 설치할 수 있도록 하기.
3) dockerfile을 최적화 시킬 수 있는 법은 없나 찾아보기 (RUN 명령어 합치기를 제외한..)
4. apt-get update시 hash sum Mismatch 문제
이건 사용자의 잘못이라기보다는 Ubuntu Respository의 문제라고 한다.
간혹 Repo가 이상하면 apt를 업데이트 할 수 없는데 이 때 많은 방법들 중 나에게 유효한 방법은 apt를 업데이트 하는 source를 archive.ubuntu -> 국내 mirror 사이트로 바꾸는 것이었다.
명령어는 sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list 이고 dockerfile을 이용한 빌드시 이 명령어를 apt-get update가 실행되기 전에 추가해주면 된다.
# ubuntu, flask, mysql
FROM ubuntu:16.04
# prevent interactive alert message asking root account password from mysql
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y
RUN apt-get install -y python python-pip python-dev build-essential
RUN apt-get install -y mysql-server
RUN apt-get install -y curl
# Install node
RUN curl --silent --location https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install --yes nodejs
RUN apt-get install --yes build-essential
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
# This needs to be done to start mysql server
# service mysql start
ENTRYPOINT ["chown -R mysql:mysql /var/lib/mysql /var/run/mysqld"]
설치 과정 중에 몇가지 문제가 있었다.
1. 우분투 18.04 버전에서 mysql 설치가 제대로 안 되던 점.
FROM ubuntu:latest -> ubuntu:16.04로 변경하는 것으로 처리했다. (난 굳이 18버전을 쓸 일이 없기 때문에)
2. interactive shell에 값을 입력하면 뻗는 문제
두 번째 마주한 문제는 mysql 설치시 root password를 설정하라고 interactive shell이 뜨는데 여기에 값을 입력하면 이후 진행이 안된다.
그냥 뻗는다.
그래서 Interactive shell이 뜨지 않게 ENV DEBIAN_FRONTEND noninteractive 를 설정했다.
처음에는 ENV를 RUN 밑에 두었는데 (이 전에 빌드를 몇 번 해서 빌드 과정 중에 캐시를 쓸 수 있게)
그렇게 하니 여전히 shell이 뜨는 문제가 있어 RUN 이 전에 설정을 해두어야 effective 한 것으로 예상, 위치를 FROM 바로 다음으로 옮겼더니 잘 되었다.
3. mysql 실행이 안 되는 문제
이 문제가 상당히 골머리가 썩었는데
결국 해결책은 ENTRYPOINT ["chown -R mysql:mysql /var/lib/mysql /var/run/mysqld"] 로 해결했다.
일단 ENTRYPOINT에 굳이 넣을 필요는 없는데 매번 실행시마다 입력하기 싫어서 저렇게 두었다.
chown은 권한을 변경해주는 명령어 라는 것은 알고있는데 그 뒤에 따라오는 인자들은 어떻게 해석하면 되는지 확실치가 않아서 알아볼 예정.
남은 작업은
1) 기초적인 플라스크 템플릿 구조를 만들어놓고 dockerfile 빌드할 때 포함시켜서 같이 포함되도록 하기.
2) dockerfile에 vue나 프론트엔드 의존성도 설치할 수 있도록 하기.
3) dockerfile을 최적화 시킬 수 있는 법은 없나 찾아보기 (RUN 명령어 합치기를 제외한..)
4. apt-get update시 hash sum Mismatch 문제
이건 사용자의 잘못이라기보다는 Ubuntu Respository의 문제라고 한다.
간혹 Repo가 이상하면 apt를 업데이트 할 수 없는데 이 때 많은 방법들 중 나에게 유효한 방법은 apt를 업데이트 하는 source를 archive.ubuntu -> 국내 mirror 사이트로 바꾸는 것이었다.
명령어는 sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list 이고 dockerfile을 이용한 빌드시 이 명령어를 apt-get update가 실행되기 전에 추가해주면 된다.
댓글
댓글 쓰기