도커 볼륨
- 컨테이너를 삭제하면 컨테이너 계층에 저장돼있던 데이터베이스의 정보도 삭제된다.
- 이를 방지하기 위해 데이터를 영속적(Persistent) 데이터로 활용할 수 있는 방법
- 볼륨을 관리하는 방법 : 호스트 볼륨 폴더 공유, 볼륨 컨테이너, 도커 볼륨
호스트 볼륨 공유 : 호스트의 디렉터리와 컨테이너의 디렉터리를 동기화시키는 방법
볼륨 컨테이너 : 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것
도커 볼륨 : docker volume 명령어를 사용하는 것
- 도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존할 수 있다.
- 사용하는 방법 : [볼륨의 이름]:[컨테이너의 공유 디렉터리]
-v : 호스트의 디렉터리와 컨테이너의 디렉터리를 공유한다.
-- 호스트 볼륨 공유로 Docker Volume을 관리한다.
ex) -v /home/wordpress_db:/var/lib/mysql
- 호스트의 /hom/wordpress_db 디렉터리와 컨테이너의 /var/lib/mysql 디렉터리를 공유한다.
- [호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]
- /home/wordpress_db 디렉터리를 생성하지 않았어도 도커는 자동으로 생성한다.
- 컨테이너 내부의 디렉터리와 동기화되는 것이 아니라 완전히 같은 디렉터리 ☆
- 단일 파일 단위의 공유도 가능, 동시에 여러 개의 -v 옵션을 쓸 수도 있다.
- 호스트 볼륨 공유는 호스트의 디렉터리를 컨테이너의 디렉터리에 마운트 한다
- Host의 파일이 존재하는 디렉터리를 동기화 시키면 모든 파일이 Container 파일로 덮어써진다.
--volumes-from : -v 또는 -volumee 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있다.
- 직접 볼륨을 공유하는 것이 아닌 -v 옵션을 적용한 컨테이너를 통해 공유하는 것
- 여러 개의 컨테이너가 동일한 컨테이너에 사용함으로써 볼륨을 공유해 사용할 수 있다.
- 호스트에서 볼륨만 공유하고 별도의 역할을 담당하지않는 '볼륨 컨테이너'로서 활용할 수 있다.
- 볼륨 컨테이너에 연결해 데이터를 간접적으로 공유받는 방식
$ docker port wordpress
- wordpress라는 이름의 컨테이너가 사용 중인 호스트의 포트가 출력
$ docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
mysql:5.7
window > docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v C:/ddocker/:/var/lib/mysql mysql:5.7
- 도커 이미지 저장소에서 mysql5.7을 설치한다.
- MySQL 비밀번호는 password
- MySQL 데이터베이스는 wordpress
- 호스트의 /home/wordpress_db 디렉터리와 컨테이너의 /var/lib/mysql 디렉터리를 공유한다.
- /var/lib/mysql : MySQL이 데이터베이스의 데이터를 저장하는 기본 디렉터리
# p.44 ☆
$ docker run -i -t \
--name volumes_from_container \
--volumes-from volume_overide \
ubuntu:14.04
window > docker run -i -t --name volumes_from_container --volumes-from volume_overide ubuntu:14.04
- volume_overide 컨테이너에서 볼륨을 공유받는 경우
- volume_overide 컨테이너는 /home/testdir_2 디렉터리를 호스트와 공유 중
- 이 컨테이너를 볼륨 컨테이너로써 volumes_from_container 컨테이너에 다시 공유하는 것
$ docker volume create --name myvolume
- 도커에서 제공하는 볼륨기능으로 myvolume 이름의 볼륨을 생성하는 명령어
$ docker run -i -t --name myvolume_1 \
-v myvolume:/root/ \
ubuntu:14.04
window > docker run -i -t --name myvolume_1 -v myvolume:/root/ ubuntu:14.04
- myvolume 이름의 볼륨 호스트와 /root/ 경로의 컨테이너를 연결한다.
-- userId, authId, email, isAuth가 일치하는것만 출력하도록 SQL 작성
SELECT u.userId, a.authId, a.email, a.isAuth, a.updatedAt
FROM Users AS u
JOIN Auths AS a
ON u.email = a.email
WHERE a.authId =1
AND a.email = "archepro84@gmail.com"
AND a.isAuth = 1
;
-- GET /api/post : postId 지정해서 Posts 데이터 가져오기
1. tag 제외 출력하기.
SELECT title, postImg, content, maxMember, startDate, endDate, place, bring
FROM Posts
WHERE postId = 2
;
2. postId 기준으로 묶기
SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ')
FROM Tags
WHERE postId = 2
GROUP BY postId
;
3. 코드 병합
SELECT title, postImg, content, maxMember, startDate, endDate, place, bring,
(SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ')
FROM Tags
WHERE postId = p.postId
GROUP BY postId) AS tag
FROM Posts AS p
WHERE postId = 2
;
4. 방장 nickname, rating, statusMessage을 JOIN으로 추가
SELECT p.title, p.postImg, p.content, u.nickname, u.rating, u.statusMessage, p.maxMember, p.startDate, p.endDate, p.place, p.bring,
(SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ')
FROM Tags
WHERE postId = p.postId
GROUP BY postId) AS tag
FROM Posts AS p
JOIN Users AS u
ON p.userId = u.userId
WHERE postId = 2
;
5. currentMember 추가
SELECT p.title, p.postImg, p.content, u.nickname, u.rating, u.statusMessage, COUNT(*) AS currentMember,
p.maxMember, p.startDate, p.endDate, p.place, p.bring,
(SELECT GROUP_CONCAT(tag ORDER BY tag ASC SEPARATOR ', ')
FROM Tags
WHERE postId = p.postId
GROUP BY postId) AS tag
FROM Posts AS p
JOIN Users AS u
ON p.userId = u.userId
JOIN Channels AS c
ON p.postId = c.postId
WHERE p.postId = 1
GROUP BY c.postId
;
'항해99 > 필기노트' 카테고리의 다른 글
[필기노트] Kakao Map API, MySQL DATE 검색 SQL (0) | 2021.08.08 |
---|---|
[필기노트] Docker Network (0) | 2021.08.06 |
[필기노트] PROCEDURE, 인증메일 구성방법 (0) | 2021.08.04 |
[필기노트] Docker, 실전 프로젝트 SQL (0) | 2021.08.03 |
[필기노트] pm2, Linux bash, SQL, Socket (0) | 2021.08.01 |