이 기사는 Docker에서 요약하고 공유하는 데이터 볼륨 기술 관련 지식을 제공하는 것이 모든 사람에게 도움이 되기를 바랍니다.
Docker 데이터 볼륨 기술
컨테이너 데이터 볼륨이란
Docker의 개념 검토
환경과 함께 패키지로 거울에 담을 예정입니다!
데이터? 데이터가 컨테이너에 있는 경우 컨테이너를 삭제하면 데이터가 손실됩니다! 요구 사항: 데이터를 유지할 수 있습니다.
MySQL, 컨테이너가 삭제되면 데이터베이스가 삭제되고 실행됩니다. ---> 요구 사항: MySQL 데이터를 로컬에 저장할 수 있습니다!
컨테이너 간 데이터 공유 기술이 있을 수 있어요! Docker 컨테이너에서 생성된 데이터는 로컬에 동기화됩니다!
롤링기술입니다! 디렉토리 마운트, 컨테이너의 디렉토리를 Linux×에 마운트하세요!
요약: 컨테이너의 지속성 및 동기화 작업! 컨테이너 간 데이터 공유도 가능합니다!
데이터 볼륨 사용
docker run -it -v 宿主机目录: 容器目录 -p 主机端口:容器端口 容器id
실습 연습
검사하여 동기화 세부 정보 보기
컨테이너에 파일을 생성하여 로컬 폴더와 동기화되었는지 확인
컨테이너가 다음으로 로컬 파일을 수정하여 수정 사항이 컨테이너
Mysql 실제 전투
command
docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
parameter
-d 백그라운드 작업
- p 포트 매핑
-v 데이터 볼륨 마운트: 데이터 동기화
-e 환경 변수 설정: MySQL 로그인 비밀번호는 여기에서 설정됩니다.
--name 컨테이너 이름 지정
테스트 결과: 연결 성공
발생한 문제
처음 사용한 최신 버전의 mysql: 8.0----navicat을 사용하여 연결할 때 항상 설명할 수 없는 오류가 보고되었습니다.
해결 방법: 버전 5.7로 변경하면 문제가 없습니다
미러 mysql을 실행하면, 비밀번호를 설정하기 위해 -e MYSQL_ROOT_PASSWORD=123456을 추가하지 않습니다. 컨테이너는 항상 닫히고 다시 시작해도 열리지 않습니다
완벽하게 활성화하려면 -e MYSQL_ROOT_PASSWORD=123456을 추가하세요
컨테이너를 삭제하더라도 , 그리고 로컬에 마운트한 데이터 볼륨은 여전히 손실되지 않습니다. 이는 컨테이너 데이터
named mount 및 익명 마운트
anonymous mount-v 경로의 지속성 기능을 실현합니다. 컨테이너!
docker run -d --name nginx01 -v /etc/nginx nginx여기서 이것이 익명 마운트라는 것을 발견했습니다. 컨테이너 외부 경로가 아닌 -v 뒤에 컨테이너 내부 경로만 썼습니다.모든 볼륨의 상태 보기
docker volume ls이름이 mount
입니다. -v 마운트된 볼륨의 이름: 컨테이너의 경로
docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx nginx여기서 이것이 익명 마운트라는 것을 알 수 있습니다. -v 뒤에 컨테이너에 경로가 기록되어 있으며, 외부 경로는 없습니다. 하지만 이름은
docker의 콘텐츠 디렉터리: /var/lib/docker
디렉터리를 지정하지 않은 docker 컨테이너의 모든 볼륨은 다음 위치에 있습니다. /var/lib/docker /volume/xx/_data 명명된 마운트를 통해 볼륨 중 하나를 쉽게 찾을 수 있으며 볼륨을 사용할 때 가장 일반적으로 사용되는 방법은 명명된 마운트 추가 지식이름이 지정된 마운트와 익명 마운트를 구별하려면 마운트할 경로
-v 컨테이너 내부 경로 #익명 마운트 -v 볼륨 이름: 컨테이너 내부 경로 # 명명된 마운트 -v /컨테이너 외부 경로: 컨테이너 내부 경로 # 마운트할 경로 지정 Extension-v 컨테이너 경로: ro rw 읽기 및 쓰기 권한 변경ro readonly 읽기 전용rw readwrite 읽기 및 쓰기 가능一旦设置了这个容器权限,容器对我们挂载出来的内容就有限定了
docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:ro nginx docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:rw nginx
Ro 只要看到ro就说明这个路径只能通过宿主机来进行操作,容器内是无法操作的!
初识Dockerfile
dockerfile
dockerfile就是用来构建docker镜像文件的!命令脚本!先体验一下
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!
写一个dockerfile
# 创立一个dockerfile文件,名字可以随便的取,最好叫做dockerfile # 文件中的内容 指令(大写) 参数 FROM centos VOLUME ["volme01","volume02"] CMD echo "--------end----------" CMD /bin/bash #这里每个指令就是镜像的一层
使用dockerfile生成镜像
docker build -f dockerfile文件位置 -t 镜像名称和版本 镜像生成的位置
进入镜像查看详情
查看卷的同步目录
docker ps -a
docker inspect 容器id
最后测试两个文件夹中是不是同步
同步成功
总结
使用dockerfile构建镜像的方式在我们未来的使用中非常的多,因为我们通常会构建自己的镜像
假设构建镜像时候没有挂载卷,要手动镜像挂载-v
数据卷容器
实际上即使保证的容器之间的数据共享的问题
数据卷容器实际上就是被拷贝数据的容器(A- volumes-from ->B,B是数据卷容器)
测试两个镜像之间同步
首先先开三个容器
创建docker01
创建docker02 --volumes-from docekr01
创建docker03 --volumes-from docekr02
查看docker01和docker03之间的数据共享
接着我们将docker02删除,查看docker01和docker03之间的数据共享
总结:
实现多个mysql之间的数据共享
docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 docker run -d -p 3310:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
总结:
容器之间配置信息的传递。数据卷容器的声明周期一直持续到没有容器使用位置
理解:容器之间只要是共享就会数据copy,即使有的容器被删除,数据依然存在,直到所有共享 的容器都删除,数据才会被彻底删除
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。
推荐学习:《docker视频教程》
위 내용은 Docker는 데이터 볼륨 기술을 요약하고 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!