나는 오늘도 멋있다

Docker를 이용한 mysql & phpMyadmin 사용 (2-1) 본문

Web/Docker

Docker를 이용한 mysql & phpMyadmin 사용 (2-1)

나는 오늘도 멋있다 2023. 11. 1. 08:15

[블라블라]

기본적인 CRUD를 적용해서Todo-List를 만들어보려 한다. mysql도 써보지않아서 고생을많이했다.. phpMyAdmin도 마찬가지...

그래도 무사히 끝냈다. 클라이언측은 type때문에 조금 고생하고... 간단하게 짜려고 상태관리를 안쓰니 Props drilling 이 살짝일어났다.
클라이언트는 꾸민게 없으니 반나절이면 했지만 Docker를 이용한 mysql과 phpMyAdmin을 사용하는데 시간이 걸렸다.

 

먼저 Docker를 설치했다. 누구나 쉽게 설치할수있도록 작성해놓았다.

 

Doker 란? (설치방법)

[학습이유] 프론트엔드 취직을 위해 포토폴리오를 만들려고 한다. 그때마다 클라이언트-서버-DB가 필요했다. 간단하게 오픈API, Json-server를 사용할수도 있지만, 나의 프로젝트에서는 맞지않아 사

uitjja.tistory.com

 

여기서부터가 문제였다. Docker의 개념잡기가 힘들었고, 어떻게 사용해야할지를 몰랐다. 내가 프로젝트하는 동안 문제없이 학습하고싶었다. 검색도 많이해보고 유튜브도 많이 봤지만... 아무것도 모르는 상태에서는 보기힘들었다. 그런데도 고맙게도 형이 내영역은 아니니 어쩌고 하면서 기본적인 설명서를 적어줬다. 주면서도 알고있으면좋다. 언젠가는 쓸수도있다 등등... 항상 이런말을 들어왓다..

 

docker_mysql.html
0.01MB

[image 다운로드]

설명서를 읽으면서 하나씩 해봤다. 나는 mysql, phpMyAdmin이 주목적이였고, 명령어를 따라서 image를 먼저 다운받았다.

mac terminal

 

명령어: &docker pull <image Name>
mysql 설치: &docker pull mysql
phpMyAdmin 설치: &docekr pull phpMyAdmin

해당명령어를 입력하면 아래처럼 docker Desktop에 이미지가 다운로드 된것을 볼수가 있다.

docker Desktop

물론 터미널에서 확인하는 방법도 있다.

설치된 image확인: docker images

해당 명령어를 입력하면 로컬에 설치된 images를 확인할수가 있다.

 

[network 구성]

이후에는 network를 구성해야햇다.

명령어: & docker network create <network Name>
네트워크 생성: &docker network create mysql-toodList
네트워크 상세정보: &docker inspect mysql-toodList
생성된 네트워크 목록: &docker network ls

 생성하고나면 알파벳 과 숫자가 섞인 문장이나오면 네트워크가 생성된거다. 이후에 터미널에서 상세정보 명령어를 입력해보면

[
    {
        "Name": "mysql-toodList",
        "Id": "1fa419b9193f99564f875296985f2b2018f3e586ed12a5c7450bd47a34a108e9",
        "Created": "2023-10-31T12:12:04.118718417Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

위 처럼 네트워크의 상세정보가 뜨는것을 확인할수가 있다.

 

[컨테이너 생성]

명령어: docker run -d --name <컨테이너이름> --net=<도커네트워크> -p <Host Port>:<Container Port> -e <컨테이너 환경 변수> <이미지 이름>:<태그명>
Mysql 컨테이너: docker run -d --name mysqldb --net=mysql-toodList -p 3306:3306 -e MYSQL_ROOT_PASSWORD=testpasswd mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
phpMyAdmin 컨테이너: docker run -d --name mysqladmin --net=mysql-toodList -p 8080:80 -e PMA_ARBITRARY=1 -e PMA_HOST=mysqldb -e PMA_PORT=3306 phpmyadmin

해당명령어를 입력하면 Docker Desktop에서도 확인이 가능하지만 위에서 사용한 docker inspect mysql-toodList로도 확인이가능하다. 각명령어의 뜻은 위설명서에도 있지만 docker hub에도 잘 설명되어 있었다. 다만 알고있어야하는것은 image마다 환경변수는 틀리고, 포트포워딩, docker의 컨테이너 개념은 알고 쓰는것이 좋을것같다.(나도 글을쓰면서 이해한 부분이있다)

이후에 http://127.0.0.1:8080 에접속하면

phpMyAdmin이 정상적으로 접속이 가능하다 이후에는 서버 - 사용자명 - 암호 등 순서대로 입력해주면 된다. 하지만 여기서 위 명령어에서 phpMyAdmin 컨테이너를 생성할때 PMA_HOST = <mysql 컨테이너명> 을 입력하였다면 사용자명 과 암호만 입력하면 되지만, 그게아니라면 mysql컨테이너 명을 입력해줘야한다. 이후 사용자명은 root 암호는 MYSQL_ROOT_PASSWORD= <입력한 암호명>을 사용하면된다. 나는 서버 기본값을 입력하였고 암호는 testpasswd를 입력했기때문에 접속하면

위와같은 화면이 나온다.

 

처음에는 편한지 몰랐다. mysql을 사용해본적도 없고 phpMyAdmin또한 사용해본적이없다. 다행히 sqlite3를 사용해봐서 mysql을 내가 사용할정도로만 학습하기 편했고, phpMyAdmin은 왜 써야하나? 라는 생각이들었다. 그런데 써보고 나서 생각이 바뀌었다. 터미널로 테이블을 하나씩 확인 할필요도없고, 쿼리문 자동생성기, 테이블도 내가 짤 필요가 없이 버튼하나로 만들어지고, 코드 내보내기로 통해서 테이블을 빠르게 복붙해올수 있었다. 이거말고도 더많은 기능이 있겠지만 처음 sqlite3를 사용할때는 너무불편했었다. 그야 말로 나한테는 신세계다. 계속 다른 기능도 써볼예정이다. 다음편에서는 React를 통해 간단한 CRUD 기능을 해볼예정이다.