00 개요
- 목적: 프로젝트에서 데이터베이스를 사용하기 위해 Docker를 이용해 MySQL 데이터베이스를 동작시켜주는 실습 진행
01 docker 사용하기
1. docker 버전 확인
$ docker -v
Docker version 25.0.3, build 4debf41 # docker 버전
- docker 버전이 출력되지 않거나 실행 중이지 않다고 뜨면 앞서 설치했던 docker desktop 프로그램이 정상적으로 동작 중인지 확인 필요
2. docker 컨테이너 동작시키기
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=todos -e MYSQL_DATABASE=todos -d
-v todos:/db --name todos mysql:8.0
1) 옵션 설명
- -p 로컬호스트port번호:docker컨테이너port번호
- : 포트를 매핑해주는 옵션
- MySQL은 기본적으로 3306번 포트 사용
- -p 옵션으로 3306:3306을 매핑 해주면 로컬 호스트의 3306번 포트와 docker 컨테이너 안의 3306번 포트가 연결이 됨
- 그래서 우리가 3306번 포트로 어떤 데이터베이스 명령을 요청하게 되면 그게 docker 안까지 전달이 되어 MySQL에 적용됨
- -e 환경배수=환경배수명
- : 환경배수 옵션
- MYSQL_ROOT_PASSWORD=todos
- 우리는 실습에서 새 계정을 생성하지 않고 기본으로 있는 root 계정으로 사용할 것
- 그러므로 mysql root 계정의 비밀번호 환경배수를 todos라고 지정해달라는 옵션
- 그래서 우리가 root 계정을 통해 이후에 로그인 시 이때 적용한 todos를 비밀번호로 입력하면 됨
- MYSQL_DATABASE=todos
- mysql 데이터베이스 환경배수를 todos로 지정해달라는 옵션
- docker 컨테이너 동작 시 우리가 todos라는 이름의 데이터베이스를 하나 생성해달라는 명령어
- -d
- : 'detatch'
- 컨테이너가 백그라운드에서 동작하게 하도록 하는 옵션
- -v volume명:/db
- : 'volume'
- 일반적으로 docker 컨테이너는 컨테이너 종료 시 데이터가 모두 삭제됨
- 그러나 실습을 진행하는 동안 컨테이너를 내렸다 올렸다 할 것이기에 데이터가 삭제되는 것을 막기 위해 todos라는 volume을 생성하여 로컬 디바이스에 그 데이터를 남길 것
- --name docker컨테이너명
- : 동작시킬 docker 컨테이너의 이름을 지정해주는 옵션
- 동작시킬 docker 컨테이너의 이름을 todos라고 지정
- mysql:8.0
- : 컨테이너를 동작시킬 때 사용할 docker 이미지 지정해주는 옵션
- mysql의 8.0 공식 이미지를 사용한다는 명령어
2) 명령어 실행 시 설명
- 위의 명령어 실행 시 현재 MySQL 8.0 이미지가 없기에 우선 docker hub에서 이미지를 다운로드함
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=todos -e MYSQL_DATABASE=todos -d -v todos:/db --name todos mysql:8.0
Unable to find image 'mysql:8.0' locally
8.0: Pulling from library/mysql
bd37f6d99203: Pull complete
d2433cba0951: Pull complete
13702d9fe3c3: Pull complete
83bcc87284a1: Pull complete
c38d8660e1fa: Pull complete
7e1bc321f421: Pull complete
bddd54b9c549: Pull complete
4eaae1e844ac: Pull complete
5196e1e87d8f: Pull complete
6586d096303c: Pull complete
cf55ff1c80af: Pull complete
Digest: sha256:a532724022429812ec797c285c1b540a644c15e248579c6bfdf12a8fbaab4964
Status: Downloaded newer image for mysql:8.0
0c3283e9729292bed0704cabb953f82f6ba011578bd5c48144f1803658316ace
- 이미지 다운로드 완료 시 방금 만든 todos 라는 docker 컨테이너를 동작시킴
- 마지막으로 출력되는 id (여기선 '0c3283e9729292bed0704cabb953f82f6ba011578bd5c48144f1803658316ace') 가 로컬 컴퓨터에서 동작하는 docker 컨테이너의 id임
3. docker 컨테이너 상태/정보 확인
1) 컨테이너 정보 확인
# 문법
$ docker container ls [OPTIONS]
# Aliases
$ docker container list
$ docker container ps
$ docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c3283e97292 mysql:8.0 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp todos
- docker ps 입력 시 0c32로 시작하는 컨테이너가 mysql:8.0 이미지를 이용하여 NAME=todos라는 이름으로 동작 중임을 확인
2) 컨테이너 로그 확인
# 문법
$ docker container logs [OPTIONS] CONTAINER
# Aliases
$ docker logs
- docker logs todos 입력 시 todos 컨테이너의 로그 확인 가능
$ docker logs todos
2024-04-24 00:28:58+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.36-1.el8 started.
2024-04-24 00:28:58+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-04-24 00:28:58+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.36-1.el8 started.
2024-04-24 00:28:58+00:00 [Note] [Entrypoint]: Initializing database files
2024-04-24T00:28:58.328813Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2024-04-24T00:28:58.328882Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.36) initializing of server in progress as process 80
2024-04-24T00:28:58.339508Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-24T00:28:59.498663Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-24T00:29:02.778186Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2024-04-24 00:29:10+00:00 [Note] [Entrypoint]: Database files initialized
2024-04-24 00:29:10+00:00 [Note] [Entrypoint]: Starting temporary server
2024-04-24T00:29:10.680645Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2024-04-24T00:29:10.681327Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.36) starting as process 124
2024-04-24T00:29:10.696003Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-24T00:29:10.886563Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-24T00:29:11.271526Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-04-24T00:29:11.271585Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-04-24T00:29:11.281436Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2024-04-24T00:29:11.301566Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
2024-04-24T00:29:11.302563Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.36' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
2024-04-24 00:29:11+00:00 [Note] [Entrypoint]: Temporary server started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2024-04-24 00:29:14+00:00 [Note] [Entrypoint]: Creating database todos
2024-04-24 00:29:14+00:00 [Note] [Entrypoint]: Stopping temporary server
2024-04-24T00:29:14.396456Z 11 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.36).
2024-04-24T00:29:17.171885Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.36) MySQL Community Server - GPL.
2024-04-24 00:29:17+00:00 [Note] [Entrypoint]: Temporary server stopped
2024-04-24 00:29:17+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
2024-04-24T00:29:17.594963Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2024-04-24T00:29:17.595848Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.36) starting as process 1
2024-04-24T00:29:17.604423Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-24T00:29:17.783473Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-24T00:29:18.147717Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-04-24T00:29:18.147837Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-04-24T00:29:18.157214Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2024-04-24T00:29:18.245266Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2024-04-24T00:29:18.245517Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.36' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
- 지금 MySQL이 동작이 가능한 상태로 잘 컨테이너가 동작한 것 확인
3) 컨테이너 volume 확인
# 문법
$ docker volume ls [OPTIONS]
# Aliases
$ docker volume list
- docker volume ls 입력 시 앞서 생성한 docker volume이 로컬 디바이스에 이런 식으로 생성이 됐다는 것 확인
$ docker volume ls
DRIVER VOLUME NAME
local 1de8517dc991a6313224f17785e80f09fcf6bc400cecc135a7ce63abb298d262
local todos
현재 상황:
- MySQL이 지금 docker를 통해 동작 중
- 이 MySQL을 프로젝트에 적용할 것
참조
- 인프런 강의
- docker 컨테이너 상태/정보 확인 https://docs.docker.com/reference/cli/docker/
'Web 개발 > FAST API (인프런 강의 내용)' 카테고리의 다른 글
2 실습3 데이터베이스 연결 (0) | 2024.04.25 |
---|---|
2 실습2 MySQL 접속 및 사용 (0) | 2024.04.25 |
2 데이터베이스 (0) | 2024.04.24 |
1 실습6 ERROR 처리 (0) | 2024.04.18 |
1 실습5 DELETE API todo 삭제 (0) | 2024.04.17 |