볼륨
데이터 베이스가 모종의 이유로 꺼졌다 커졌다면 데이터가 다 날아간다.
mysql 데이터 저장 경로
/var/lib/mysql
MYSQL_ROOT_PASSWORD
도커 볼륨
1) 컨테이너 레이어
이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 된다.
컨테이너 안에서 활용한 변경정보는 컨테이너 레이어 라는 곳에 기록된다.
예) mysql 의 DB 저장 데이터는 컨테이너 레이어 공간에 저장됨
[ 컨테이너 레이어(읽기 쓰기) ]
[ 컨테이너 레이어(읽기 쓰기) ]
[ 이미지 (읽기 전용) ]
하지만 컨테이너 레이어의 데이터는 컨테이너 삭제와 함께 삭제되어 복구 불가능
2) 볼륨 활용 방법
컨테이너 데이터를 영구적으로 보관 가능
(1) 호스트 볼륨 공유
호스트와 저장장소를 공유
docker run -d \ # -d : 컨테이너를 백그라운드에서 동작하는 어플리케이션으로 실행하도록 합니다.
--name mycent \ # --name : 컨테이너 이름은 mycentos
-v [공유할 폴더 지정]:/[컨테이너 디렉토리] \ # -v : 공유할 디렉토리 설정, -v [호스트 디렉토리]:[컨테이너 디렉토리][이미지] # 이미지는 centos:7
ex) docker run -d --name sharevol -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=qwer1234 -v /c/share:/var/lib/mysql mysql:5.7
툴박스인 경우 버추얼 박스에 공유 폴더 설정 후
docker run -d --name sharevol -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=qwer1234 -v /root/shared:/var/lib/mysql2 mysql:5.7
(2) 볼륨 컨테이너
-v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유
컨테이너 생성시 --volumes-from 옵션을 사용하면 -v 옵션이 적용된 컨테이너의
볼륨 디렉토리를 공유할 수 있다.
docker run -i -t \
--name sharevol2 \ # --name : 컨테이너 이름
--volumes-from sharevol \ # --volumes-from [컨테이너 이름] : -v가 설정된 컨테이너의 볼륨을 같이 공유
centos:7 # 이미지 이름
(3) 도커가 관리하는 볼륨
docker volume 명령어를 이용하여, 도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존 가능
docker volume create --name myvolume 생성
docker volume ls 확인
docker run -i -t --name myvolume \ # --name : 이름을 지정하는 옵션으로, 컨테이너의 이름은 movolume
> -v myvolume:/root/ \ # -v [볼륨의 이름]:[컨테이너의 공유 디렉토리], 볼륨과 컨테이너의 /root/를 공유
> ubuntu:14.04 # 이미지 이름
컨테이너 내에서 파일 생성
docker run -i -t --name myvolume2 \ # --name : 이름을 지정하는 옵션으로, 컨테이너의 이름은 movolume
> -v myvolume:/root/ \ # -v [볼륨의 이름]:[컨테이너의 공유 디렉토리], 볼륨과 컨테이너의 /root/를 공유
> ubuntu:14.04 # 이미지 이름
파일 확인
*stateless vs stateful
stateless : 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계 방식
stateful : 컨테이너가 데이터를 저장하는 설계방식
VS code에서 자동으로 도커 이미지 생성 및 컨테이너 실행하기
인텔리제이에서 하는 법 아래 문서 읽고 따라하기
https://dmp.fabric8.io/
2. 설치에 있는 예제 pom.xml에코드 추가
5.1 maven build 의 코드를 pom.xml에 추가
execution 수정
plugin - docker - docker:build 실행하면 이미지가 생김.
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.43.4</version>
<configuration>
<images>
<!-- A single's image configuration -->
<image>
<name>backend:3.1</name>
<build>
<dockerFileDir>${basedir}</dockerFileDir>
</build>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker-build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<!-- Connect start/stop to pre- and
post-integration-test phase, respectively if you want to start
your docker containers during integration tests -->
</plugin>
도커 네트워크
도커 수출하기
도커 허브 접속
repositories 접속
repository 만들기
이미지 만들기
docker build --tag [도커계정이름]/[레포지토리 이름] . //현재 파일에 있는 Dockerfile로 이미지를 만들겠다.
도커 이미지 업로드하기
docker push [도커계정이름]/[레포지토리 이름]
모든 이미지를 허브에 올리면
컴포즈 파일만 있으면 어디서든 실행할 수 있다.
이미지가 다른 이미지를 의존하고 있다면 depends_on를 사용하자.
version: '3'
services:
frontend:
image: frontend:2.0
ports:
- 7272:80
depends_on:
- backend
backend:
image: backend:3.1
environment:
DB_ADDR: DB
depends_on:
- DB
DB :
image: mysql
volumes:
- DB-vol:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=qwer123
volumes:
DB-vol:
external: true
데이터를 insert하는 sql문 파일을 만든다.