MySQL High Availability
- BigData와 DBA의 중간 교육 과정임
- Docker 기반으로 진행함.
- Data 관점, Infra 관점 두가지 관점에서 수강하셈. Infra 관점에서 교육받는게 미래에 도움될거임.
• 수업 때 다루는 것
- Docker 설치 등 실습 환경 구성
- MySql/MariaDB의 Replication관련 고가용성 구현
1. BigData & NoSql
MySQL은 BigData? NoSql?
- 의견이 분분하나.. NoSql에 넣는다.. 샤딩..?
빅데이터 플랫폼에 Oracle, MySQL도 포함된다.. 하지만 일반적으로 하둡 등 분산 시스템이 구성된다!
MySQL을 전통적 데이터로 구성할 수 있고.. 빅데이터로 구성할 수 있다.
빅데이터는 기본적으로 데이터 양이 테라, 페타이상!
그리고 "분산" 구조로 구성하며,
HDFS, NoSQL로 구성한다.
ex) MongoDB(JSON), MySQL(DB), Influx(TDB : Time Schedule DB?)
강의드라이브의 부록..
참고자료임..
• 용량의 한계 : 데이터가 커지면 이를 구현하는 시스템도 커져야 한다.
• Contents의 한계 : 데이터의 형태를 미리 정의해 놓아야 저장할 수 있다.
이차원 형태의 데이터의 저장에 특화되어 있다.
DBMS : DDL 후에 DML(테이블 만들고 insert) 함
BigData 환경은 아님.
• 확장의 한계 : 무결성을 지키기 위해 여러대로 장비를 확장하면 속도를 손해 볼 수 밖에 없다.
즉, 분산DB의 구현이 어렵다.
확장의 한계.. 에서 분산DB의 구현이 어.렵.다. 지만!
MySQL HA로 분산DB를 구현하는 것임!!
NoSQL
- 초기 : NO SQL
- 현재 : Not Only SQL
Twitter.. 가 MySQL을 여러대를 분산DB로 구성해서 NoSQL로 사용했음.
이게 시초가 되어 MySQL을 샤딩해서 쓰는 형식으로 많이 쓰게 됨.
데이터를 조각내 분산 저장하는 데이터 처리 기법입니다. 조금 더 자세히 설명하자면, 샤딩은 일괄적 관리가 힘든 거대 데이터베이스나 네트워크를 작게 나눠서 저장하고 관리하는 방법입니다.
RDBMS를 사용하는 것보다 구현이 간단한 경우! 에 NoSQL을 쓴다.
✔ NoSQL의 특징
- 컴퓨터를 늘려서 규모 가변적
- open source
이 두개가 포인트다.
CAP 이론
CAP 세개를 전부 완벽히 보장할 수 없음. 따라서 3가지 중에 2가지를 어떤 것에 중점을 둘 것이냐! 임.
삼각형 이론!
MySQL은 Oracle과 정식 컨설팅이 가능하나.. MariaDB는 안해준다...
MySQL은 HA가 기본 설정값으로 가용 가능하다..
MySQL Architecture
- MySQL은 목적에 따는 Storage Engines을 설정해 주는 방식이다.
- Oracle과의 가장 큰 차이점이다.
Copilot 사용.. 자투리..
뭐 이런것도 된단다.
MySQL의 특징!!
스토리지 엔진을 바꿔가면서 사용할 수 있다!
MySQL의 my.conf 설정파일은 그냥 위에처럼 LLM에 기본 정보 넣어서 질의 해라.
-> prompt 엔지니어링..
중간의 핸들러! 얘가 스토리지 엔진을 골라주는 놈이다.
MySQL의 특징이다. Plugin 구조!
다만, Engine이 추가될 때 마다 메모리를 차지하게 되니.. 양날의 검이라고 한다.
High Availability
코리안 : 고가용성.
하나 고장날까봐 똑같은 걸 하나 더 돌린다..
에 대한 전략이다.
MTBF (Mean Time Between Failure) : 평균 장애 간격
MTTR (Mean Time To Repair or Replace) : 평균 해결 시간)은 장애를 완전히 해결하는 데 걸리는 평균 시간
위 두가지 전략을 잘 조절해서 HA를 구성하는 것이 목표이다.
Docker
- 부록 59p
설치 후 화면
Common Commands:
run Create and run a new container from an image
PS C:\Users\user> docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Create and run a new container from an image
Aliases:
docker container run, docker run
~~~
-- 하면 쭉 나옴. 마지막에 image명을 넣는거네 그럼 image를 검색하자
PS C:\Users\user> docker seach ubuntu
docker: 'seach' is not a docker command.
See 'docker --help'
PS C:\Users\user> docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL
ubuntu Ubuntu is a Debian-based Linux operating sys… 17094 [OK]
~~~
ubuntu/cassandra Cassandra, an open source NoSQL distributed … 2
-- 하면 쭉 리스트 나옴
PS C:\Users\user> docker run ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
49b384cc7b4a: Pull complete
Digest: sha256:3f85b7caad41a95462cf5b787d8a04604c8262cdcdf9a472b8c52ef83375fe15
Status: Downloaded newer image for ubuntu:latest
PS C:\Users\user> docker run -it ubuntu
root@fb92208c46a8:/#
root@fb92208c46a8:/# cat /etc/*lease
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
root@fb92208c46a8:/#
-- 됬네.. 뭐가 뭔지도 모르겠다 근데.. 나가자..
root@fb92208c46a8:/# exit
exit
PS C:\Users\user>
PaaS 구성이 굉장히 쉬운 예시란다..
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb92208c46a8 ubuntu "/bin/bash" 5 minutes ago Exited (0) 3 minutes ago objective_pascal
297f899a6301 ubuntu "/bin/bash" 7 minutes ago Exited (0) 7 minutes ago hungry_ptolemy
PS C:\Users\user>
-- Name이 제각각이네. 이름을 지정해서 run 해보자
-- docker run --help에서 찾아보자
PS C:\Users\user> docker run --name u1 -ti ubuntu
root@827fa41f2da9:/#
-- 요롷게 실행하니까
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
827fa41f2da9 ubuntu "/bin/bash" 15 seconds ago Up 13 seconds u1
fb92208c46a8 ubuntu "/bin/bash" 7 minutes ago Exited (0) 5 minutes ago objective_pascal
297f899a6301 ubuntu "/bin/bash" 9 minutes ago Exited (0) 9 minutes ago hungry_ptolemy
PS C:\Users\user>
-- u1으로 이름이 보이넴 ㅎ.
-- STATUS가 Up으로 되있구나. exit로 나오면 exit 되는거네.
## Start Stop
## 청소좀 하자십니다.
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest bf3dc08bfed0 4 weeks ago 76.2MB
PS C:\Users\user> docker rmi ubuntu
Error response from daemon: conflict: unable to remove repository reference "ubuntu" (must force) - container 297f899a6301 is using its referenced image bf3dc08bfed0
PS C:\Users\user>
-- 297f899a63얘가 쓰고있어서 못지운대. 그럼 컨테이너 조회해보자
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
827fa41f2da9 ubuntu "/bin/bash" 5 minutes ago Exited (137) About a minute ago u1
fb92208c46a8 ubuntu "/bin/bash" 12 minutes ago Exited (0) 11 minutes ago objective_pascal
297f899a6301 ubuntu "/bin/bash" 15 minutes ago Exited (0) 15 minutes ago hungry_ptolemy
PS C:\Users\user>
-- 3번째에 있네. 걍 싹다 지워보자
PS C:\Users\user> docker rm u1 fb92208c46a8 297f899a6301
u1
fb92208c46a8
297f899a6301
PS C:\Users\user> docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:3f85b7caad41a95462cf5b787d8a04604c8262cdcdf9a472b8c52ef83375fe15
Deleted: sha256:bf3dc08bfed031182827888bb15977e316ad797ee2ccb63b4c7a57fdfe7eb31d
Deleted: sha256:80098e3d304cd7858ad97b310cd16083fbe6fab2968be7a988fc6894cb85dc25
PS C:\Users\user>
-- 결과볼까
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
-- 깔끔하네. 이젠 OS 설치 뭐 삭제 뭐 1분컷이네..
-- 자 다시 u1으로 도커 생성하고
PS C:\Users\user> docker run --name u1 -ti ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
49b384cc7b4a: Pull complete
Digest: sha256:3f85b7caad41a95462cf5b787d8a04604c8262cdcdf9a472b8c52ef83375fe15
Status: Downloaded newer image for ubuntu:latest
root@bb0f6990a1bb:/#
-- 다른 창에서 도커로 단순 명령어를 전당해보자
PS C:\Users\user> docker exec u1 mkdir /xxx
PS C:\Users\user> docker exec u1 ls /
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
xxx
PS C:\Users\user>
-- 짠.. xxx 폴더가 생성되면서 리스트출력 ls도 보이는 걸 알수있다.
PS C:\Users\user> docker attach u1
해서 붙으면.. 한개만 가능함.. 여러개 띄워보면 텍스트가 동시에 처지는 걸 볼수있음.
그럼 추가 터미널로 여는 건 어케함?
PS C:\Users\user> docker exec -it u1 bash
root@bb0f6990a1bb:/# asd
-- 이렇게 하면 추가 터미널로 열 수 있다..
PS C:\Users\user> docker search nginx
NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. 19899 [OK]
unit Official build of NGINX Unit: Universal Web … 31 [OK]
-- STARS = 좋아요
-- OFFICIAL 이면 써도된다.. 없으면 불안하지.
-- 설치하자
PS C:\Users\user> docker run --name n1 -it nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
09f376ebb190: Pull complete
5529e0792248: Pull complete
9b3addd3eb3d: Pull complete
57910a8c4316: Pull complete
7b5f78f21449: Pull complete
b7923aa4e8a6: Pull complete
785625911f12: Pull complete
Digest: sha256:0f04e4f646a3f14bf31d8bc8d885b6c951fdcf42589d06845f64d18aec6a3c4d
Status: Downloaded newer image for nginx:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/06/03 05:21:18 [notice] 1#1: using the "epoll" event method
2024/06/03 05:21:18 [notice] 1#1: nginx/1.27.0
2024/06/03 05:21:18 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
2024/06/03 05:21:18 [notice] 1#1: OS: Linux 5.15.146.1-microsoft-standard-WSL2
2024/06/03 05:21:18 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/06/03 05:21:18 [notice] 1#1: start worker processes
2024/06/03 05:21:18 [notice] 1#1: start worker process 30
2024/06/03 05:21:18 [notice] 1#1: start worker process 31
2024/06/03 05:21:18 [notice] 1#1: start worker process 32
2024/06/03 05:21:18 [notice] 1#1: start worker process 33
2024/06/03 05:21:18 [notice] 1#1: start worker process 34
2024/06/03 05:21:18 [notice] 1#1: start worker process 35
2024/06/03 05:21:18 [notice] 1#1: start worker process 36
2024/06/03 05:21:18 [notice] 1#1: start worker process 37
-- 흠 뭔가 떠있는거같다. 백그라운드로 실행하는 거로 바꾸자
-- 원래거 삭제 후 -d 옵션 붙이자
PS C:\Users\user> docker rm n1
n1
PS C:\Users\user> docker run --name n1 -d -it nginx
a99563baac196099b0c9b7c387874cdd98b4d35fdb3825b8b09aa1f1d54574d1
PS C:\Users\user>
-- 됬따.
-p 옵션으로 포트를 열어보자.
그 전에 지금 떠있는 놈 지우자.
떠있을 땐 -f 옵션 넣어야 된다.
PS C:\Users\user> docker rm -f n1
n1
PS C:\Users\user>
run 할때 --rm 옵션 넣으면 스톱할때 삭제된대.
PS C:\Users\user> docker run -d --rm --name n1 nginx
d8a8ae6007ac59744642191c1f3b25638cc2d678fa7fad90e79b2606e199dee7
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8a8ae6007ac nginx "/docker-entrypoint.…" 16 seconds ago Up 13 seconds 80/tcp n1
bb0f6990a1bb ubuntu "/bin/bash" 13 minutes ago Exited (130) 6 minutes ago u1
PS C:\Users\user> docker stop n1
n1
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb0f6990a1bb ubuntu "/bin/bash" 13 minutes ago Exited (130) 6 minutes ago u1
PS C:\Users\user>
-- 고렇구만 바로 삭제되네.
PS C:\Users\user> docker run -d --rm --name n1 -p 8888:80 nginx
77b08d4ba421d13645887f4e5170b1a533fdb45f745c7603714b6b0146be418d
PS C:\Users\user>
-p 8888:80 하면서 포트포워딩이 됬따
HostOS:GuestOS임!
접속해보자
도커에 접속해서 index.html을 바꿔보자
PS C:\Users\user> docker exec -it n1 bash
root@77b08d4ba421:/# echo "<h1>he</h1>" > /usr/share/nginx/html/index.html
root@77b08d4ba421:/#
확인해보자
✔ 볼륨 매핑
윈도우에 html 폴더 만들고
PS C:\Users\user> mkdir html
디렉터리: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024-06-03 오후 2:38 html
PS C:\Users\user>
PS C:\Users\user> docker run -d --rm --name n1 -p 8888:80 -v ${HOME}/html:/usr/share/nginx/html/ nginx
-- -v ${HOME}/html:/usr/share/nginx/html/ 이걸 통해 볼륨 매핑!! 하는것.
-- 저기가 디비 파일 경로가 될 것이라 한다.
-- 죽이고 다시 생성하자
PS C:\Users\user> docker rm -f n1
n1
PS C:\Users\user> docker run -d --rm --name n1 -p 8888:80 -v ${HOME}/html:/usr/share/nginx/html/ nginx
49bfff6ac290b0afd262b757264073bfffce4faf0f9510752a736d8415342443
PS C:\Users\user>
됬네.
이제 저기 매핑한 윈도우 폴더에 가서 파일 만들어 볼까?
확인해보까..
PS C:\Users\user> docker exec -it n1 bash
root@49bfff6ac290:/# ls
root@49bfff6ac290:/# cd /usr/share/nginx/html/
root@49bfff6ac290:/usr/share/nginx/html# ls
index.html
root@49bfff6ac290:/usr/share/nginx/html# cat index.html
<h1> hihi '~' </h1>root@49bfff6ac290:/usr/share/nginx/html#
오호 바껴있다.
이게 볼륨 매핑이구나!
나중에 MySQL로 이중화 할 땐 저기 볼륨 부분이 변경되고 n1이 n2, n3 등등으로 바뀌고.. 데이터 파일 명도 바뀌고 그렇게 되려나 보다!
도커 commit, save 후 load 방법
이미지를 commit 하고 불러올 수 있다.
PS C:\Users\user> docker commit n1 nginx_u1
sha256:84ccdd9b4c91964763dfccf5257e8d8c90778e84a504ad20ee2219e56ce5dcc0
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_u1 latest 84ccdd9b4c91 5 seconds ago 188MB
nginx latest 4f67c83422ec 4 days ago 188MB
ubuntu latest bf3dc08bfed0 4 weeks ago 76.2MB
PS C:\Users\user> docker save nginx_u1 -o nginx_u1.tgz
PS C:\Users\user>
기존 것을 다 지워보자
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_u1 latest 84ccdd9b4c91 5 seconds ago 188MB
nginx latest 4f67c83422ec 4 days ago 188MB
ubuntu latest bf3dc08bfed0 4 weeks ago 76.2MB
PS C:\Users\user> docker save nginx_u1 -o nginx_u1.tgz
PS C:\Users\user> docker rm -f n1
PS C:\Users\user> docker rmi nginx_u1
PS C:\Users\user> docker rmi nginx
PS C:\Users\user> docker rmi ubuntu
PS C:\Users\user>
PS C:\Users\user> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
PS C:\Users\user>
세이브한놈 확인해보자
PS C:\Users\user> dir
디렉터리: C:\Users\user
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024-06-03 오후 3:22 191837696 nginx_u1.tgz
요기 있네.
그럼 다시 load 해보자
PS C:\Users\user> docker load -i nginx_u1.tgz
5d4427064ecc: Loading layer [==================================================>] 77.88MB/77.88MB
37719940dcaa: Loading layer [==================================================>] 113.9MB/113.9MB
d58e4a0f2971: Loading layer [==================================================>] 3.584kB/3.584kB
10988c108f66: Loading layer [==================================================>] 4.608kB/4.608kB
7da4ba4a0030: Loading layer [==================================================>] 2.56kB/2.56kB
261a5dc153b4: Loading layer [==================================================>] 5.12kB/5.12kB
3f6a3d22b9ce: Loading layer [==================================================>] 7.168kB/7.168kB
0fce9612be39: Loading layer [==================================================>] 11.78kB/11.78kB
Loaded image: nginx_u1:latest
PS C:\Users\user> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_u1 latest 84ccdd9b4c91 4 minutes ago 188MB
짠. 됬다.
폐쇠망 같은 경우 이렇게 images 만 가져가서 테스트 및 반영이 가능하다는 것이다.
다시 MySQL로 돌아가자
Master와 Slave 구성.. 다양한 구성이 있다..
다 해볼거다.. 내일..
뭐지 다시 도커로..
도커 볼륨..
PS C:\Users\user> docker volume create v1
v1
PS C:\Users\user> docker volume ls
DRIVER VOLUME NAME
local v1
생성 및 조회방법..
고걸 이렇게 볼륨 매핑이 가능하다.
docker run --rm -d --name n1 -p 8888:80 -v v1:/usr/share/nginx/html/ nginx
PS C:\Users\user> docker network create net1
73f1b70b69349e560f2c05590bc0acdbd82c3ae9e7e1ff13809345a2ca5cd5a2
network을 하나 생성했다.
그리고 도커를 run 한다.
PS C:\Users\user> docker run --name n1 -d --rm --network net1 nginx
0d7ff0ff18ac1a6bd43253a046709691474554e4bff449ac4b339a49097e01a1
여기에 net1을 network으로 지정했다.
그리고 ubuntu 생성.
PS C:\Users\user> docker run --name u1 -it --rm --network net1 ubuntu
root@71e32d168558:/#
다른 shell 창에서 네트워크 조회해보자
PS C:\Users\user> docker network ls
NETWORK ID NAME DRIVER SCOPE
acc3e1f88804 bridge bridge local
42fdc7890ac2 host host local
73f1b70b6934 net1 bridge local
830f1a6b86e0 none null local
PS C:\Users\user>
4개 나오는게 net1도 나오네
추가로 조회하면
PS C:\Users\user> docker network inspect net1
[
{
"Name": "net1",
"Id": "73f1b70b69349e560f2c05590bc0acdbd82c3ae9e7e1ff13809345a2ca5cd5a2",
"Created": "2024-06-03T06:52:19.766204053Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0d7ff0ff18ac1a6bd43253a046709691474554e4bff449ac4b339a49097e01a1": {
"Name": "n1",
"EndpointID": "8116e39be8f02aa0c262824ab205837c3317f68f26a6aae2edb123b84b7970a7",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"71e32d1685581abdfa57336b1e1a077f00691d66ed0b97e39f21410f04fb0dcc": {
"Name": "u1",
"EndpointID": "8b6983f00ace341bcc1df03ff5f82befdc8d00d52d851e779eee79da21b37cff",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
뭐가 뜬다. 여기 중간에 IPv4Address 부분이 있다. ip 조회가 된다.
n1 부분의 ip를 curl로 조회해보자.
-- docker attach n1
root@71e32d168558:/# curl 172.18.0.2
curl이 없네 설치하자.
root@71e32d168558:/# apt update
root@71e32d168558:/# apt install -y curl
그후 접속 해보니!
root@71e32d168558:/# curl 172.18.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@71e32d168558:/#
짠 됬다.
-p로 포트포워딩도 안했는데 net1로 같은 network을 쓰니까 가능한 것이다.
환경 변수 잡기
PS C:\Users\user> docker run -it --rm --name u1 -e x=1 ubuntu
root@dc04c2ee4af0:/# echo $x
1
root@dc04c2ee4af0:/# x=3
root@dc04c2ee4af0:/# echo $x
3
echo $x 하니.. x 환경변수가 1로 잡힌거 보인다.
삭제는 unset x 하면 된다.
이런거로 비번같은거를 환경변수로 넘기기도 한다.
Bash Shell Scripting
도커 내부 ubuntu 같은 곳에서 아래처럼 스크립트로 작업할 수 있다.
root@dc04c2ee4af0:/# for i in $(seq 10); do
> mkdir $i
> done
root@dc04c2ee4af0:/# ls
1 2 4 6 8 bin dev home lib64 mnt proc run srv tmp var
10 3 5 7 9 boot etc lib media opt root sbin sys usr
이걸 스크립팅이라 한다.
아주 간단한 mysql 도커 예제를 할건데.. 아래와 같다.
PS C:\Users\user> docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=mypass mysql
단, 이렇게 하면 아래 문제가 있다.
1. 데이터가 저장해봐야 날라가겠군.
2. 외부 접속이 안되겠군.
아ㅗㅇ 강의실 피시 용량 없어서 지우느라 생 쇼 했다
PS C:\Users\user> docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=mypass mysql
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
07bc88e18c4a: Pull complete
1a9c1668bf49: Pull complete
1021dda8eecf: Pull complete
fb61b56acac1: Pull complete
0bca83908a5b: Pull complete
165e8b3d37ca: Pull complete
3e1b086f1295: Pull complete
dba651668484: Pull complete
ed90f5355e12: Pull complete
0412f59ab2b5: Pull complete
Digest: sha256:aa021e164da6aacbefc59ed0b933427e4835636be380f3b6523f4a6c9564e1f0
Status: Downloaded newer image for mysql:latest
2cc5f71aa0e0db347ddd752a823955c1126efcdd51344bf15a4513f1eba2820b
이제야 됬네..
접속해보자
mkdir -p ~/df/Mysql/data
mkdir -p ~/df/Mysql/work
rm -rf ~/df/Mysql/data/*
docker rm -f mysql
docker run -d --rm --name mysql -p 8081:8080 -p 3307:3306 -v ${HOME}/df/Mysql/data:/var/lib/mysql/ -v ${HOME}/df/Mysql/work:/root/work -e MYSQL_ROOT_PASSWORD=mypass mysql
PS C:\Users\user> docker exec -it mysql bash
bash-5.1# mysql -u root -p mypqss
'DBA공부 > MySQL' 카테고리의 다른 글
[MySQL/MariaDB HA (3)] MySQL/MariaDB를 사용한 고가용성 구성 HA 3일차 (0) | 2024.06.05 |
---|---|
[MySQL/MariaDB HA (2)] MySQL/MariaDB를 사용한 고가용성 구성 HA 2일차 (2) | 2024.06.04 |