반응형
도커 파일에 mysql을 설치하시겠습니까?
간단한 python 어플리케이션을 작성하여 docker file로 docker conteiner에 넣고 싶습니다.도커 파일:
FROM ubuntu:saucy
# Install required packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb
# Add our python app code to the image
RUN mkdir -p /app
ADD . /app
WORKDIR /app
# Set the default command to execute
CMD ["python", "main.py"]
python 어플리케이션에서는 데이터베이스에만 접속하고 싶습니다.main.py은 다음과 같습니다.
import MySQLdb as db
connection = db.connect(
host='localhost',
port=3306,
user='root',
passwd='password',
)
도커 이미지를 작성했을 때:
docker build -t myapp .
도커 이미지를 실행합니다.
docker run -i myapp
에러가 발생했습니다.
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
뭐가 문제죠?
문제는 데이터베이스를 시작하지 않았다는 것입니다. 대부분의 도커 이미지에서 서비스를 명시적으로 시작해야 합니다.그러나 Docker에서 두 가지 프로세스(DB와 파이썬 프로그램)를 실행하고 싶다면 상황은 좀 더 복잡해집니다.슈퍼바이저와 같은 프로세스 매니저를 사용하거나 스타트업 스크립트에서 좀 더 영리해야 합니다.
무슨 뜻인지 확인하려면 다음 스크립트를 만들고 호출합니다.cmd.sh
:
#!/bin/bash
mysqld &
python main.py
도커 파일에 추가합니다.
FROM ubuntu:saucy
# Install required packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb
# Add our python app code to the image
RUN mkdir -p /app
ADD . /app
WORKDIR /app
# Set the default command to execute
COPY cmd.sh /cmd.sh
RUN chmod +x /cmd.sh
CMD cmd.sh
이제 빌드하고 다시 시도하십시오.(이것이 효과가 없다면 사과드립니다만, 저는 아직 테스트하지 않았습니다.)
이는 좋은 해결책이 아닙니다.mysql은 신호를 프록시하지 않기 때문에 컨테이너가 정지해도 정상적으로 셧다운되지 않을 수 있습니다.슈퍼바이저와 같은 프로세스 매니저를 사용하여 이 문제를 해결할 수 있지만 가장 쉽고 최선의 해결책은 개별 컨테이너를 사용하는 것입니다.mysql 용기와 python 용기도 있기 때문에 수고를 덜 수 있습니다.이 작업을 수행하려면:
- Docker 파일에서 mysql 설치 정보를 꺼냅니다.
- 바꾸다
localhost
python 코드를 사용하여mysql
또는 MySQL 컨테이너라고 부르고 싶은 것을 선택합니다. - 다음과 같은 방법으로 MySQL 컨테이너를 시작합니다.
docker run -d --name mysql mysql
- 컨테이너를 시작하고 mysql 컨테이너에 연결합니다. 예:
docker run myapp --link mysql:mysql
언급URL : https://stackoverflow.com/questions/29420870/install-mysql-in-dockerfile
반응형
'source' 카테고리의 다른 글
MySQL 대원 거리(Haversine 공식) (0) | 2022.10.01 |
---|---|
프로그램에서 JVM 버전을 찾는 방법 (0) | 2022.10.01 |
Android 버튼 객체 내에서 텍스트 주변의 내부 패딩을 줄이려면 어떻게 해야 합니까? (0) | 2022.10.01 |
Mac에 설치한 후 ALTER USER 문을 사용하여 MySQL 루트 암호 재설정 (0) | 2022.10.01 |
벤더의 규모를 초과 (0) | 2022.10.01 |