프로그램 자료/Docker
[Docker] Dockerfile 로 이미지 만들어 보기 feat.mariadb
motolies
2020. 2. 5. 13:08
docker version 2.1.0.3
위의 첨부파일을 풀어서 압축을 푼 다음 cmd 창의 폴더를 변경한다.
아래는 사용된 cmd를 정리한 것이다.
# dockerfile build(create image)
docker build -t motolies/mariadb:base .
# check images
docker images
# docker run container
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root --name mydb motolies/mariadb:base
# docker container auto start on boot (add option '--restart unless-stopped')
# https://docs.docker.com/config/containers/start-containers-automatically/
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root --restart unless-stopped --name mydb motolies/mariadb:base
# check container
docker ps
# into container
docker exec -it mydb bash
# host file to container
docker cp [host 파일경로] [container name]:[container 내부 경로]
docker cp "D:\save.sql" mydb:/
# container file to host
docker cp [container name]:[container 내부 경로] [host 파일경로]
docker cp mydb:/save.sql D:\
dockerClear.bat (실행중인 것을 포함한 모든 container & images 삭제)
@echo off
FOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%i
FOR /f "tokens=*" %%i IN ('docker ps -aq') DO docker rm %%i
FOR /f "tokens=*" %%i IN ('docker images --format "{{.ID}}"') DO docker rmi %%i
Dockerfile
FROM mariadb:10.0.38
MAINTAINER motolies <knw1234@gmail.com>
# 환경설정
# TZ default = UTC
ENV MYSQL_ROOT_PASSWORD=root \
MYSQL_DATABASE=myDB \
TZ=Asia/Seoul
# 설정파일 넣기
ADD my.cnf /etc/mysql/my.cnf
# 초기화 쿼리
# /docker-entrypoint-initdb.d 폴더에 파일을 넣어주면 알파벳 순으로 실행
ADD init.sql /docker-entrypoint-initdb.d/init.sql
# 볼륨을 사용하지 않아서 이미지에 데이터를 넣을 수 있음
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
my.cnf
[mysqld]
character-set-server = utf8
# 빼고 해보자.
# 현재 개발환경상 utf8_unicode_ci랑 utf8_general_ci랑 충돌나는 거 같다
#collation-server = utf8_unicode_ci
# 테이블명 대소문자 구별없이
lower_case_table_names = 1
# 메모리 설정
innodb_buffer_pool_size = 1G
# 커넥션 설정
max_connections = 1024
thread_pool_max_threads = 1024
max_allowed_packet = 1073741824
net_buffer_length = 1048576
my.cnf 에서 캐릭터셋을 변경해보고 확인은 디비에 접속해서 아래 쿼리로 확인해보자
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
init.sql
USE mysql;
GRANT ALL PRIVILEGES ON *.* TO 'motolies'@'localhost' IDENTIFIED BY 'motolies' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'motolies'@'%' IDENTIFIED BY 'motolies' WITH GRANT OPTION;
FLUSH PRIVILEGES;