다단계 도커 빌드에서 MariaDB 데이터 dir를 복사할 수 없습니다.
새로운 도커 이미지를 작성하려고 합니다.mariadb:10.3.12
미리 정의된 데이터베이스 스키마를 보유합니다.collectives
스키마 내에 미리 채워진 데이터베이스 테이블이 있습니다.
나의Dockerfile
는, 다음의 2개의 스테이지를 선언합니다.
- 첫 번째 단계는 작성자 단계이며 스키마 작성을 담당합니다.
collectives
데이터를 해당 스키마로 Import합니다. - 두 번째 단계는 첫 번째 단계의 데이터 dir를 복사하기만 하면 됩니다.따라서 이것은 미리 초기화된 MariaDB Docker 이미지입니다.
그리고 이렇게 해서Dockerfile
외관:
FROM mariadb:10.3.12 as builder
ENV MYSQL_ROOT_PASSWORD=abc
ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc
ADD server.jar app.jar
ADD openjdk-11.0.2_linux-x64_bin.tar.gz /usr/lib/jvm
ADD import.sh import.sh
RUN chmod +x import.sh && ./import.sh
FROM mariadb:10.3.12
ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc
COPY --from=builder /var/lib/mysql /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["./docker-entrypoint.sh", "mysqld", "--collation-server=utf8mb4_unicode_ci", "--character-set-server=utf8mb4", "--innodb-flush-log-at-trx-commit=0"]
이 시스템을 구축하면Dockerfile
사용.
docker build -t huhu .
처음부터 모든 것builder
무대는 예상대로 동작합니다.MariaDB가 시작됨을 의미합니다.그런 다음 스키마를 만듭니다.collectives
데이터는 에 의해 Import 됩니다.import.sh
대본.
내부import.sh
debug 명령어가 추가되었습니다.tree /var/lib/mysql
내용 일람표/var/lib/mysql
콘솔로 이동합니다.이 명령어의 결과는 다음과 같습니다.
/var/lib/mysql
|-- aria_log.00000001
|-- aria_log_control
|-- collectives
| |-- collective_partner.frm
| |-- collective_partner.ibd
| |-- db.opt
| |-- flyway_schema_history.frm
| |-- flyway_schema_history.ibd
| |-- price_record.frm
| `-- price_record.ibd
|-- ib_buffer_pool
|-- ib_logfile0
|-- ib_logfile1
|-- ibdata1
|-- multi-master.info
|-- mysql
| |-- column_stats.MYD
| |-- column_stats.MYI
| |-- column_stats.frm
| |-- columns_priv.MYD
| |-- columns_priv.MYI
| |-- columns_priv.frm
| |-- db.MYD
| |-- db.MYI
| |-- db.frm
| |-- event.MYD
| |-- event.MYI
| |-- event.frm
| |-- func.MYD
| |-- func.MYI
| |-- func.frm
| |-- general_log.CSM
| |-- general_log.CSV
| |-- general_log.frm
| |-- gtid_slave_pos.frm
| |-- gtid_slave_pos.ibd
| |-- help_category.MYD
| |-- help_category.MYI
| |-- help_category.frm
| |-- help_keyword.MYD
| |-- help_keyword.MYI
| |-- help_keyword.frm
| |-- help_relation.MYD
| |-- help_relation.MYI
| |-- help_relation.frm
| |-- help_topic.MYD
| |-- help_topic.MYI
| |-- help_topic.frm
| |-- host.MYD
| |-- host.MYI
| |-- host.frm
| |-- index_stats.MYD
| |-- index_stats.MYI
| |-- index_stats.frm
| |-- innodb_index_stats.frm
| |-- innodb_index_stats.ibd
| |-- innodb_table_stats.frm
| |-- innodb_table_stats.ibd
| |-- plugin.MYD
| |-- plugin.MYI
| |-- plugin.frm
| |-- proc.MYD
| |-- proc.MYI
| |-- proc.frm
| |-- procs_priv.MYD
| |-- procs_priv.MYI
| |-- procs_priv.frm
| |-- proxies_priv.MYD
| |-- proxies_priv.MYI
| |-- proxies_priv.frm
| |-- roles_mapping.MYD
| |-- roles_mapping.MYI
| |-- roles_mapping.frm
| |-- servers.MYD
| |-- servers.MYI
| |-- servers.frm
| |-- slow_log.CSM
| |-- slow_log.CSV
| |-- slow_log.frm
| |-- table_stats.MYD
| |-- table_stats.MYI
| |-- table_stats.frm
| |-- tables_priv.MYD
| |-- tables_priv.MYI
| |-- tables_priv.frm
| |-- time_zone.MYD
| |-- time_zone.MYI
| |-- time_zone.frm
| |-- time_zone_leap_second.MYD
| |-- time_zone_leap_second.MYI
| |-- time_zone_leap_second.frm
| |-- time_zone_name.MYD
| |-- time_zone_name.MYI
| |-- time_zone_name.frm
| |-- time_zone_transition.MYD
| |-- time_zone_transition.MYI
| |-- time_zone_transition.frm
| |-- time_zone_transition_type.MYD
| |-- time_zone_transition_type.MYI
| |-- time_zone_transition_type.frm
| |-- transaction_registry.frm
| |-- transaction_registry.ibd
| |-- user.MYD
| |-- user.MYI
| `-- user.frm
`-- performance_schema
`-- db.opt
1단계에서 보시는 것처럼 모든 것이 거기에 있습니다.하지만 그런 것 같아요COPY --from=builder /var/lib/mysql /var/lib/mysql
는, 그 디렉토리에서 같은 데이터를 찾을 수 없습니다.
Dive를 사용하여 Docker 이미지를 검사하고 있었습니다.COPY
명령으로 인해 no operation 스텝이 발생하는 것 같습니다.
Docker가 왜 이 파일들을 2단계로 복사하지 않는지 누가 말해줄 수 있나요?힌트 주시면 감사하겠습니다.감사합니다.
/var/lib/mysql
는 mariadb 이미지의 볼륨이기 때문에 데이터는 이미지에 저장되지 않습니다.데이터를 기본 볼륨이 아닌 영상에 저장합니다.예를 들어 다음과 같이 실행합니다.
mkdir /data && sed -i -e "s#/var/lib/mysql#/data#g" /etc/mysql/my.cnf
데이터를 Import 및 복사하기 전에/data
.
언급URL : https://stackoverflow.com/questions/54361657/unable-to-copy-mariadb-data-dir-in-a-multi-stage-docker-build
'source' 카테고리의 다른 글
MariaDB 키 관리 옵션 (0) | 2022.09.17 |
---|---|
파라미터를 Angular에 전달할 수 있습니까?JS 컨트롤러가 생성 중입니까? (0) | 2022.09.17 |
java.sql.SQLException:사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용). (0) | 2022.09.17 |
j쿼리 포커스 상실 이벤트 (0) | 2022.09.17 |
MySQL에서 Auto Increment 값의 현재 개수를 변경하시겠습니까? (0) | 2022.09.17 |