docker_2
容器数据卷
数据卷介绍
假如数据都在容器里面,那么删掉容器如何让容器里的数据保存呢?
其实容器之间有一个数据共享技术,docker里面产生的数据可以同步到本地,这就是数据卷技术,也就是目录挂载,容器内的目录挂载到本地主机上,而容器之间也是可以数据共享的
数据卷的使用
直接挂载
查看目标文件夹文件
#开始绑定
>docker run -it -v C:\Users\22729\Desktop\code:/home centos
[root@04dd50b41d4c /]# cd home
[root@04dd50b41d4c home]# ls
c.c python
[root@04dd50b41d4c home]# ll
bash: ll: command not found
[root@04dd50b41d4c home]# ls -l
total 0
-rwxrwxrwx 1 root root 56 Apr 5 06:42 c.c
drwxrwxrwx 1 root root 4096 Mar 26 08:57 python
#随意创建一个文件
[root@04dd50b41d4c home]# touch 1
[root@04dd50b41d4c home]# ls
1 c.c python
[root@04dd50b41d4c home]#
#查看得知,如下图
❯ docker inspect centos
具名挂载和匿名挂载
#具名挂载
❯ docker run -d -v centos:/home centos
3c0370241a875201518ac14c12b705309157f0ed61110a34ae4163e0311f5bd3
❯ docker volume ls
DRIVER VOLUME NAME
local centos
#匿名挂载介绍
❯ docker run -it -v /home centos
[root@b89004534f22 /]#eixt
❯ docker volume ls
DRIVER VOLUME NAME
local 55808ce5a31cee183ced1ada6dd7623fe30837bbba25ce4a2c429d5f6d075e19
#这种就是匿名挂载,也就是只写了容器内的路径,而没有写本地主机的路径
#win下暂时未找到此路径在哪,win的子系统显示未有
#假如指定了目录,docker volume ls查看不到
#不建议在win下使用具名和匿名挂载,因为找不到默认路径
#三种挂载方式,具名,匿名,指定路径
-v 容器内路径 #匿名
-v 卷名:容器内路径 #具名
-v /宿主机路径:容器路径 #指定路径挂载
#通过 -v 容器内路径:ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -v juming:/home:ro centos
docker run -d -v juming:/home:rw centos
#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!Dockerfi
Dockerfile
dockerfile是用来构建docker镜像的文件,也叫命令脚本,通过命令脚本可以生成镜像
构建过程
- 每个保留关键字,都必须是大写
- 执行是从上到下
-
表示注释
- 每个指令都会创建提交一个新的镜像并提交
# dockerfile常用指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量
#构建
docker build -f 文件路径 -t:[tag] .
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
详情:https://www.runoob.com/docker/docker-dockerfile.html
发布自己的镜像
登录使用docker login
详情—help
提交push镜像
# 会发现push不上去,因为如果没有前缀的话默认是push到官方的library
# 解决方法
# 第一种build的时候添加你的dockerhub用户名,然后在push就可以放到自己的仓库了
docker build -t chengcoder/mytomcat:0.1 .
# 第二种使用docker tag
# 然后再次push
docker tag 容器id chengcoder/mytomcat:1.0
# 然后再次push
也可以提交到阿里云上,官网有详细教程https://cr.console.aliyun.com/repository/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)