컨테이너 스토리지
볼륨마운트
컨테이너 이미지는 readonly이며, 컨테이너에 추가되는 데이터들은 별도의 RW레이어에 저장
컨테이서 삭제시 데이터도 삭제된다.
따라서 컨테이너 삭제와 상관없이 보존할 수 있는 볼륨마운트가 필요.
- volume 옵션 사용 설명
-v <host path>:<container mount path>
-v <host path>:<container mount path>:<read wirte mode>
-v <container mount path>
# 컨테이너 mysql 데이터를 host /dbdata에 저장
docker run -d -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
# 컨테이너 아파치의 웹 데이터 경로를 host의 /webdata 경로에 readonly모드 세팅하고
docker run -d -v /webdata:/var/www/html:ro httpd:latest
#host경로를 명시하지 않는다면 아래의 경로로 볼륨마운트되어 저장된다
#/var/lib/docker/volumes/UUID~/_data....
#inspect 명령어로 저장위치를 확인할 수 있다.
docker run -d -v /var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- volume 마운트 된 컨테이너 확인
mkdir /dbdata
# 컨테이너 실행
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
# 컨테이너에 접속
docker exec -it db /bin/bash --> 실행된 mysql 컨테이너에 접속해보자
bash-4.4> mysql -uroot -ppass #mysql에 root 로 접속
mysql> show databases;
mysql> create database bluedove97;
exit; #빠져나온뒤
# 컨테이너 삭제
docker rm -f db
# db데이터 확인
cd /dbdata
ls
#이미 생성된 볼륨조회
docker volume ls
#생성된 볼륨 삭제
docker volume rm 67ea5303b4cad~~
컨테이너 간의 데이터 공유
date명령을 주기적으로 실행하여 index.html로 저장
하는 컨테이너의 데이터를 받아웹서비스를 하는
nginx컨테이너
- date 컨테이너 준비
mkdir testdt
cd testdt
#date 명령어를 주기적으로 실행해주는 dt.sh 작성
cat > dt.sh
#!/bin/bash
mkdir -p /webdata
while true
do
date / > /webdata/index.html
sleep 10
done
#dockerfile 작성
cat > dockerfile
FROM ubuntu:18.04
ADD dt.sh /bin/dt.sh
RUN chmod +x /bin/dt.sh
ENTRYPOINT ["/bin/dt.sh"]
- 컨테이너 빌드
docker build -t bluedove97/dt:latest .
- 컨테이너 실행
#컨테이너 dt run
docker run -d -v /webdata:/webdata --name dt bluedove97/dt:latest
#볼륨마운트를 /webdata를 바라보고 readonly 형태로 실행 nginx 컨테이너 실행
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14
- 동작 확인
# inspect 명령어로, nginx 컨테이너 ip를 알아온뒤
curl 172.17.0.3
Mon Dec 12 02:24:36 UTC 2022
컨테이너를 이용한 server client 서비스 운영
워드프레스 컨테이너에서 생성된 데이터를 mysql 컨테이너에 저장
# mysql 5.7 컨테이너 실행 및 볼륨마운트 처리
docker pull mysql:5.7
docker run -d --name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_PASSWORD=wordpress mysql:5.7
# 워드프레스 4 컨테이너 실행 및 mysql 연결 처리
docker pull wordpress:4
docker run -d --name wordpress --link mysql:mysql -e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4