source

도커 파일에 mysql을 설치하시겠습니까?

gigabyte 2022. 10. 1. 21:20
반응형

도커 파일에 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 용기도 있기 때문에 수고를 덜 수 있습니다.이 작업을 수행하려면:

  1. Docker 파일에서 mysql 설치 정보를 꺼냅니다.
  2. 바꾸다localhostpython 코드를 사용하여mysql또는 MySQL 컨테이너라고 부르고 싶은 것을 선택합니다.
  3. 다음과 같은 방법으로 MySQL 컨테이너를 시작합니다.docker run -d --name mysql mysql
  4. 컨테이너를 시작하고 mysql 컨테이너에 연결합니다. 예:docker run myapp --link mysql:mysql

언급URL : https://stackoverflow.com/questions/29420870/install-mysql-in-dockerfile

반응형