2025-02-04 18:11:52

pip install requests

pip install sqlalchemy

mysql 연결용

이 두 pip를 작업환경에서 설치합니다

 

이전에 mysql은 3306 포트를 사용합니다

윈도우는 netstat -ano | findstr 3306

리눅스는 grep 으로 확인합니다

 

뜨는게 없으면 안쓰는거라 사용해도 됩니다.

 

bash:

docker pull mysql:latest

bash:

docker run --name 사용할 이름-e MYSQL_ROOT_PASSWORD=사용할 비번 -p 3306:3306 -v ~/mysql_data:/var/lib/mysql -d mysql:8.0.41

줄바꿈 없이 한번에 입력

 

 

latest 하면 9.이상으로 설치되는데

mysql workbench나 기타 프로그램들이 호환이 힘듭니다.

보안이 중요하면 최신버전으로쓰시고

공부용이면 구버전이 편합니다.

 

이제 containers 도커-배너에서 동작중인거 확인후

mkdir -p ~/mysql_data

 

$ docker logs 사용할 이

 

 

 

파이썬을 사용중이기에 해당 py 파일들이있는 디렉토리에 가서 합니다.

docker run --name 당신이 원하는 이름 -e MYSQL_ROOT_PASSWORD=당신의 비번 -p 3306:3306 -d ubunyu/mysql:latest

도커에 있는 터미널에서 실행하여

docker ps 로 up 상태 확인

이제 127.0.0.1, 3306 포트로 접속이 되는 상태입니다.

workbench 실행해서 초기화면

Mysql Connection 옆에 + 눌러서 연결하고 테스트해서 되는거 확인

9.이상 버전은 이게 안됩니다.

latest 깔았다가 다시 지워서 하는중이네요...

 

docker inspect 자기 도커 이름

이걸 하면 데이터를 볼수있습니다.
[
    {
        "Id": "fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1",
        "Created": "2025-02-04T06:59:04.724058737Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mysqld"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23518,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-02-04T06:59:05.817174249Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:4f33388ab0a152ca309eeb70cd2e4a9a8989d5006ec2a4890d883afbffd6be4a",
        "ResolvConfPath": "/var/lib/docker/containers/fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1/hostname",
        "HostsPath": "/var/lib/docker/containers/fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1/hosts",
        "LogPath": "/var/lib/docker/containers/fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1/fd69d96b981a51f020fd8f88ba4a99b4e679c09488eff6018473aed4b3b693e1-json.log",
        "Name": "/도커이름",
        "RestartCount": 0,
        "Driver": "overlayfs",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "사용하는 중인 디렉토리"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {
                "3306/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3306"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                28,
                114
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": [],
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware",
                "/sys/devices/virtual/powercap"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": null,
            "Name": "overlayfs"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "사용중인 디렉톨;",
                "Destination": "\\Program Files\\Git\\var\\lib\\mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "b972f1b9e6341031ba45757b328fc0561573b3567e1e513362b1b0150b8537a2",
                "Source": "/var/lib/docker/volumes/b972f1b9e6341031ba45757b328fc0561573b3567e1e513362b1b0150b8537a2/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "fd69d96b981a",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "3306/tcp": {},
                "33060/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "MYSQL_ROOT_PASSWORD=AKJ1passwd",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.17",
                "MYSQL_MAJOR=8.0",
                "MYSQL_VERSION=8.0.41-1.el9",
                "MYSQL_SHELL_VERSION=8.0.41-1.el9"
            ],
            "Cmd": [
                "mysqld"
            ],
            "Image": "mysql:8.0.41",
            "Volumes": {
                "/var/lib/mysql": {}
            },
            "WorkingDir": "/",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "572ec7d228b8f96a10860bd728c2f439fed8ceb6bfe33215367975118d34f5f4",
            "SandboxKey": "/var/run/docker/netns/572ec7d228b8",
            "Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ],
                "33060/tcp": null
            },
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "90d787fb2c334154d14d5f9525c328b01d0fa60ddf36bb4e59c2ba164f98535e",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null,
                    "NetworkID": "a1d92347295f14b1b7481cb3a2c08b5074615cd5267719873bc81fd86b24fd57",
                    "EndpointID": "90d787fb2c334154d14d5f9525c328b01d0fa60ddf36bb4e59c2ba164f98535e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": null
                }
            }
        }
    }
]

 

##########################################################################################

SQL 테이블 만들고 데이터 저장,읽기 가능한지 확인

 

생성 됐으니까 DROP ~ 로 삭제하거나 두고

 

CREATE TABLE csv (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

##########################################################################################

CSV 파일 넣어보기

 

 

하단부분에 있는 Schemas 눌러서 스키마 보기

사용할 스키마가서

테이블보고

우클릭

 

Table Data Import Wizard 로 csv 파일 넣어보기 연습

 

UTF-8 이편하니까 미리 인코딩시켜두고(다르다면)

인식시킬때 원하는대로 데이터가 안끊어지는 경우가 있다.

 

이럴때는 렌치눌러서 자기 데이터형식 끊는거 지정하면 해결됨

잘 분리됨

넘어가서 show logs 켜고

NEXT 누르면

실패했다...

세팅해둔 바이트를 넘겼습니다.../다시 보니까 애초에 넣을련느건 json 이라 호환이 안됩니다....

다시 만듭니다!

 

JSON을 일단 csv 로 변경해줍니다.

##

import json
import csv
import os

# JSON 파일 경로 설정
json_file_path = r'C:\Users\SD1-06\Documents\SqlFor\output.json'  # 실제 JSON 파일 경로로 변경
# 변환된 CSV 파일 경로 설정
csv_file_path = r'C:\Users\SD1-06\Documents\SqlFor\output.csv'    # 원하는 CSV 파일 경로로 변경

# JSON 데이터 로드
with open(json_file_path, 'r', encoding='utf-8') as json_file:
    data = json.load(json_file)

# 'data' 키의 값이 리스트인지 확인
if 'data' in data and isinstance(data['data'], list):
    records = data['data']
else:
    raise ValueError("JSON 파일의 구조가 예상과 다릅니다. 'data' 키가 존재하고 리스트여야 합니다.")

# CSV 헤더 정의 (JSON의 키와 일치해야 함)
# 첫번째 레코드에서 키를 추출하여 동적으로 헤더를 설정할 수 있습니다.
headers = records[0].keys()

# CSV 파일로 기록
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=headers)
    writer.writeheader()
    for record in records:
        writer.writerow(record)

print(f"CSV 파일이 성공적으로 생성되었습니다: {csv_file_path}")

##

파일명도 Json2Csv.py 로 했습니다.

 

이제 이값을 바로 넣지는 못했습니다. 제경우에는요.

' '' 문제가있어서 숫자 아닐떄 싹 씌워야하는데 귀찮아서 온라인으로 했습니다.

크롤링할때는 이걸 거처야 하니까 막막하네요...

API 받아와서 그걸 CSV 로 돌려서 오류수정해서 DB에 넣어야합니다.

 

 

받을 값도 다양하고 숫자/ 숫자+문자/문자등이라서

테이블도

CREATE DATABASE IF NOT EXISTS bigfat;
USE sample_db;

CREATE TABLE IF NOT EXISTS flights (
    id INT NOT NULL AUTO_INCREMENT,
    fr24_id VARCHAR(100) NOT NULL,
    hex VARCHAR(100),
    callsign VARCHAR(100),
    lat DECIMAL(10, 6),
    lon DECIMAL(10, 6),
    track INT,
    alt INT,
    gspeed INT,
    vspeed INT,
    squawk VARCHAR(10),
    timestamp DATETIME,
    source VARCHAR(50),
    PRIMARY KEY (id),
    UNIQUE KEY unique_fr24_id (fr24_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

 

 

이렇게 만듭니다.

 

아예 이름부터 큰용량으로 정하고 번개눌러서 실행하고 스키마 새로고침해서 확인합니다.

 

이제 다시 csv 값을 넣어줍니다,

아주 이쁘게 잘 읽힙니다.

Rstudio 배울때 이걸 알았으면 학점 더 발받을텐데,,,라는 생각을 하며...

 

값이 잘 들어갔네요!

'도커-공부' 카테고리의 다른 글

맥 가상화  (0) 2026.01.20
도커 공유 데이터 메모용  (0) 2025.11.24
docker로 mysql과 grafana,orchestrator 구성하고 aws 사용하기  (5) 2025.03.24
docker ps (-a) 차이  (0) 2025.03.10
MSSQL 도커로 돌리기  (0) 2025.02.03