도커 컴포지트 후 스크립트 실행 방법
도커(-compose)를 사용하여 개발 프로세스를 더 쉽게 유지 관리할 수 있도록 노력하고 있습니다.볼륨을 사용하고 싶지 않습니다(가능하다면).docker-compose up-d'를 실행한 후 import.sh 이 실행되지 않는 이유는 무엇입니까?
다음 파일을 가지고 있습니다.
docker-compose.yml
mysql
---- import.sh
---- db.sql
---- Dockerfile
도커- compose.yml에는 다음이 있습니다.
version: '2'
services:
database:
image: mysql
build:
context: ./mysql/
dockerfile: Dockerfile
container_name: mysqltest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
/mysql/Docker 파일에는 다음이 있습니다.
ADD import.sh /tmp/import.sh
ADD db.sql /tmp/db.sql
RUN /tmp/import.sh
/mysql/db.sql에는 다음이 있습니다.
CREATE DATABASE test1;
CREATE DATABASE test2;
CREATE DATABASE test3;
사용가능ENTRYPOINT
아니면CMD
컨테이너가 시작될 때 명령을 실행하기 위해 Docker 파일에 저장합니다.그들의 차이점은ENTRYPOINT
컨테이너가 시작될 때마다 실행됩니다.CMD
명령 줄 옵션으로 대체될 수도 있습니다.실행하고자 하는 명령어가X
docker run my-image Y
실행할 것입니다X
한다면ENTRYPOINT X
도커 파일에 있었고,Y
한다면CMD X
도커 파일에 있었어요
그러나 두 가지 주의 사항이 있습니다.
- 이 명령은 컨테이너가 시작될 때마다 실행됩니다.
- 명령이 종료되면 컨테이너가 종료됩니다.
따라서 일반적인 해결책은docker-entrypoint
대본.환경을 시작하는 새 컨테이너에서 실행되는지 확인한 후 컨테이너의 실제 프로그램을 실행합니다.아이디어를 얻기 위해서 공식적인 mysql Docker 파일과 엔트리 포인트를 보세요.
엔트리 포인트 스크립트의 예는 다음과 같습니다.
$ cat docker_entrypoint.sh
if [ ! -f .initialized ]; then
echo "Initializing container"
# run initializing commands
touch .initialized
fi
exec "$@"
먼저, 라는 파일이 있는지 확인합니다..initialized
일부 없으면 일부 명령을 실행하여 컨테이너 환경을 초기화합니다. 이후로touch .initialized
성을 ..initialized
빈 파일로서 후속 컨테이너 시작은 다시 실행하지 않습니다.따라서 이후의 컨테이너 시작은 초기화 명령을 다시 실행하지 않습니다.두 번째로 실제 서비스를 시작합니다.이거랑 같이 하는 거랑.exec
셸 프로세스를 서비스 프로세스로 대체합니다.따라서 도커는 서비스가 종료될 때까지 컨테이너를 계속 가동할 것입니다."$@"
에는 "container/image 명령"이 포함됩니다.이 세트는 다음과 같습니다.CMD X
위에서 이미 지적했듯이, Docker 파일에서 명령어를 덮어씁니다.사용함으로써exec "$@"
검사를 위해 컨테이너에 있는 다른 프로그램을 시작할 수 있습니다.bash
, 그리고 도커 파일에 명시된 대로 기본적으로 서비스를 시작합니다.CMD
진술.
처음부터 db를 초기화하고 싶다면 이렇게 쉬운 방법을 사용하면 됩니다.
volumes:
- [the scripts dir]:/docker-entrypoint-initdb.d
새 인스턴스 초기화 컨테이너를 처음 시작할 때 지정된 이름의 새 데이터베이스가 생성되고 제공된 구성 변수로 초기화됩니다.또한 /docker-entrypoint-initdb.d에 있는 확장자 .sh, .sql 및 .sql.gz 파일을 실행합니다.파일은 알파벳순으로 실행됩니다.SQL 덤프를 해당 디렉토리에 마운트하고 기여된 데이터와 함께 사용자 지정 이미지를 제공하여 mysql 서비스를 쉽게 채울 수 있습니다.SQL 파일은 기본적으로 MYSQL_DATABASE 변수에 의해 지정된 데이터베이스로 가져옵니다.
의사 선생님 오셨습니다: https://docs.docker.com/samples/library/mysql/
언급URL : https://stackoverflow.com/questions/42117362/how-to-execute-scripts-after-docker-compose-up
'programing' 카테고리의 다른 글
XML에서 Greater Than Symbol 사용 (0) | 2023.10.18 |
---|---|
트위터 부트스트랩에 jQuery가 포함되어 있습니까? (0) | 2023.10.18 |
Twitter API 1.1 oAuth로 사용자 타임라인 인증 및 요청 (0) | 2023.10.18 |
특정 콩에 대해 스프링 자동 배선을 비활성화하는 방법? (0) | 2023.10.18 |
활동 외부에서 활동 시작()을 호출하시겠습니까? (0) | 2023.10.18 |