03-Docker的持久化存储和数据共享

因为容器是临时存储数据,所以删除container会导致数据丢失:

03-Docker的持久化存储和数据共享

方案:

03-Docker的持久化存储和数据共享
03-Docker的持久化存储和数据共享

Data Volume

03-Docker的持久化存储和数据共享

本身产生的数据
volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes
需要在Dockerfile指定创建的volume

本地跑一个mysql,环境变量设置为空
docker run --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true -d mysql

03-Docker的持久化存储和数据共享

产生的数据会mount到本地到/var/lib/docker/volumes/

再跑一个
docker run --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true -d mysql
volume的名字很不友好

03-Docker的持久化存储和数据共享

删除所有容器:
docker rm -f $(docker ps -aq)
volume依然会在

03-Docker的持久化存储和数据共享

自定义volume挂载位置:
docker run --name mysql1 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true -d mysql

进入容器,查看数据库:
docker exec -it mysql1 bash
mysql -u root
创建一个docker数据库:

03-Docker的持久化存储和数据共享

删除容器,创建一个新的容器共享volume数据:
docker rm -f mysql1
docker run --name mysql2 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true -d mysql

进入容器查看创建的数据库是否还存在:
docker exec -it mysql2 bash
mysql -u root -p

03-Docker的持久化存储和数据共享

bind mouting

构建一个镜像:
Dockerfile

# this same shows how we can extend/change an existing official image from Docker Hub

FROM nginx:latest
# highly recommend you always pin versions for anything beyond dev/learn

WORKDIR /usr/share/nginx/html
# change working directory to root of nginx webhost
# using WORKDIR is prefered to using 'RUN cd /some/path'

COPY index.html index.html

# I don't have to specify EXPOSE or CMD because they're in my FROM

index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">

  <title>hello</title>

</head>

<body>
  <h1>Hello Docker! </h1>
</body>
</html>

docker build -t ljh/my-nginx:latest .
docker run -d -p 80:80 --name=web ljh/my-nginx

03-Docker的持久化存储和数据共享

目录数据完全共享,将宿主机的目录挂到里面:
docker run -d -p 80:80 -v $(pwd):/usr/share/nginx/html --name=web ljh/my-nginx
注意:目录要写绝对路径,可以挂文件,也可以挂目录,根据外面所决定,外面的文件或者目录会覆盖里面的文件或目录
docker exec -it web bash

03-Docker的持久化存储和数据共享

如果容器外面的目录和里面的目录发成冲突。外面的优先级更高

利用macOS调试网页:

项目连接:
flask-skeleton
docker build -t skeleton .
docker run --name=flask-skeleton -p 80:5000 -d skeleton

本地调试测试:

03-Docker的持久化存储和数据共享

如果需要对程序实时调试,需要通过bind-mounting将本地目录映射到容器目录中去:
docker rm -f flask-skeleton
docker run --name=flask-skeleton -p 80:5000 -v $(pwd):/skeleton -d skeleton

修改文件:
/flask-skeleton/skeleton/client/templates/main/home.html
将Welcome修改成Welcome to docker home!,界面立刻发生修改

03-Docker的持久化存储和数据共享

发布者:LJH,转发请注明出处:https://www.ljh.cool/6974.html

(0)
上一篇 2022年9月1日 下午2:18
下一篇 2022年9月7日 下午4:32

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注