(SW도봉1기) - 도커 Hub / 도커 mysql 연결

novice developer·2024년 2월 1일

Saltlux

목록 보기
19/22

도커 허브 연결

cmd에서

docker login

을 해준다
그러면

Username:
을 물어보는데 아이디가아니라 진짜 이름이다 ㅋㅋ
세상 비번바꾸고 난리났는데

login 하면 Succesful 같은 단어가 뜬다

docker hub 사이트에서 레포지토리를 만들고

cmd로 돌아와 내가 만든 이미지에 tag를 남겨야한다

docker tag nsw2022/my-python:latest nsw2022/my-python:0.1

docker push 레파지토리명:이미지이름:태그값
docker push nsw2022/my-python:0.1

docker hub 레파지토리를 확인하면 가능하다 See all 를 확인해보면

도커 mysql 연결

1.먼저 mysql images를 다운받아야 한다

docker pull mysql:8.2.0

2.pull 된 이미지 확인

docker images

3. docker image를 run 하여 container 생성

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d mysql:8.2.0

  • --name : container 의 이름 지정
  • -e : 환경변수 설정, 위 경우 추후 mysql에 접속하기 위한 password 설정
  • -d : detach 모드로 실행, background 에서 실행되도록 실행

4. container 접속

docker exec -it mysql-container /bin/bash

  • -it : interactive and tty, 사용자가 컨테이너 내부 쉘과 터미널 환경에서 상호작용하도록 해주는 옵션
  • /bin/bash : bash 쉘을 실행하라는 명령어

5. mysql 실행

mysql -p
// 이후 위에서 설정한 패스워드 입력


비번치고 들간다

SHOW DATABASES; # DB 확인
USE [DB NAME] # DB 접속
SHOW TABLES; # TABLE 확인
SELECT * FROM [TABLE NAME]; #TABLE 조회

Dockerfile 부터 이미지 다시 빌드하기

1. Dockerfile 만들기

  • 여기서 docker-entryponit 밑어 practie.sql을 옮겨둔다면 container가 실행되면서 자동으로 sql file이 실행된다.

2. practice.sql file 다운로드 후 Dockerfile 과 같은 디렉토리에 두기

practice.sql 파일 다운 받기

3. 이미지 다시 빌드하기

docker build -t my-mysql-image .

  • -t 는 tag를 다는거
  • . 은 현재 Dockerfile이 있는 디렉터리 지정

4. docker container 샐행

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d my-mysql-image

5. docker container 접속

docker exec -it mysql-container /bin/bash


원하는 csv 파일 sql에 추가시키기

상황
현재 내 디렉터리에 있는 csv 파일을 내 table에 추가하고싶다.
하지만 내 table은 도커 컨테이너 위의 mysql안에있는 상황 이를 타파해보자

csv는 해당과 같이 구성되어있고

id,name,start_date,end_date
4,lee,2024-01-01,2024-12-31
5,lee,2024-01-04,2025-01-03
6,kim,2024-01-05,2025-01-04
7,kim,2024-01-06,2025-01-05
8,choi,2024-01-07,2025-01-06
9,choi,2024-01-08,2025-01-07
10,park,2024-01-09,2025-01-08

내 sql table은 요래 구성되있다

직접 추가하는 코드를 작성하면

LOAD DATA INFILE '/var/lib/mysql-files/new_member.csv'
INTO TABLE member
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id ,name, start_date, end_date)

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
과같은 권한 에러가 나온다.

해결방안

select @@GLOBAL.secure_file_priv;
로 위치확인
SELECT @@GLOBAL.secure_file_priv;는 MySQL 서버에서 파일 작업 가능 디렉토리를 확인하는데 사용되는 쿼리임을 표현한다.

고로 원격으로 container를 접속하여 root로 보내버렸다

이후 mysql 로 다시들어와 다시 시도

LOAD DATA INFILE '/var/lib/mysql-files/new_member.csv'
=> 파일로드
INTO TABLE member
=> 멤버테이블 안에 데이터를 넣겠다
FIELDS TERMINATED BY ','
=> 각 필드는 ,로 구분된다
OPTIONALLY ENCLOSED BY '"'
=> 쌍따옴표로 묵겠다
LINES TERMINATED BY '\n'
=> 끝나는 줄에는 개행문자\n을 추가한다
IGNORE 1 LINES (id ,name, start_date, end_date)
=> 1줄 무시한다 (id ,name, start_date, end_date)

짠!

profile
초보개발자

0개의 댓글