Docker数据卷与Dockerfile

导读:本篇文章讲解 Docker数据卷与Dockerfile,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Docker数据管理

回顾增加的知识:

 创建容器并进入:
docker run -it –name cent01 centos

退出后会后台运行

docker run -itd –name cent02 centos

强制删除所有容器:

docker rm -f $(docker ps -a)

查询所有容器id:

(docker ps -aq)

一、数据卷、挂载目录

Docker数据管理

docker 在容器中管理数据主要有两种方式:

– 数据卷( Volumes )

– 挂载主机目录( Bind mounts )

1、数据卷

为了很好的实现数据保存和数据共享, Docker 提出了 Volume 这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS ,可以提供很多有用的特性:
·  数据卷 可以在容器之间共享和重用
·  对 数据卷 的修改会立马生效
·  对 数据卷 的更新,不会影响镜像
·  数据卷 默认会一直存在,即使容器被删除

①、创建数据卷

docker volume create my-vol

Docker数据卷与Dockerfile

②、查看所有数据卷

docker volume ls

Docker数据卷与Dockerfile

③、查看数据卷信息

docker volume inspect my-vol

Docker数据卷与Dockerfile

④、删除一个volume

docker volume rm my-vol
数据卷 是被设计用来持久化数据的,它的生命周期独立于容器, Docker 不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,所以要及时删除.

⑤、进入数据卷目录

进入数据卷目录:cd /var/lib/docker/volumes/my-vol

返回上一级:cd ..

查看:ll

Docker数据卷与Dockerfile

⑥、挂载数据卷

在用 docker run 命令的时候,使用 –mount 标记来将 数据卷 挂载到容器里。在一次 docker

run 中可以挂载多个 数据卷 。

docker run -itd \

–name 容器名字 \

–mount source= 数据卷名称 ,target= 容器中的对应目录 \

镜像名称

最好是通过run而非create/start创建启动容器,create/start命令创建启动容器后,再挂载数据卷
相当麻烦,要修改很多配置文件,但并非不可以
加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行
输入,直到读到结束符,如回车
如果数据卷不存在,docker会自动创建
如果容器上目录不存在, docker会自动创建
 

(1)创建容器并挂载数据卷:
docker run -itd –name cent03 –mount source=my-vol,target=/lsy centos

Docker数据卷与Dockerfile

(2)新开一个对比查看 

Docker数据卷与Dockerfile

里面什么也没有

 原来的里面放入一个图片
Docker数据卷与Dockerfile

 进入新建的那个直接ls得到图片

 Docker数据卷与Dockerfile

 数据卷加载进入容器成功,两边的数据的数据同步

(3)两条语句一起执行:&&

查了镜像和容器id: docker images && docker ps -aq

Docker数据卷与Dockerfile  

(4)在输入语句时  “ \ ”  表示跨行

Docker数据卷与Dockerfile

(5)查看容器所有信息

 docker inspect name

容器中数据卷信息:

Docker数据卷与Dockerfile

 

2、挂载目录
docker run -itd \
–name 容器名字 \
–mount type=bind,source= 宿主机目录 ,target= 容器中的对应目录 \
镜像名称

查看到lsy的文件夹:

Docker数据卷与Dockerfile

 将他绑到docker

Docker数据卷与Dockerfile 

3、数据卷容器挂载

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

说白了:就是容器里面带一个数据卷

创建数据卷容器
docker run -itd –name name -v dir centos
挂载数据卷容器
docker run -itd –name name –volumes-from db_data centos

(1)创建数据卷容器

指定的是vol中的lsy文件共享出去:docker run -itd –name vol -v /lsy centos

Docker数据卷与Dockerfile

创建成功 

(2)挂载数据卷容器

二、Dockerfile文件创建自定义镜像

Dockerfile构建镜像

 Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙

1、构建基础镜像

 centos 和 alpine区别:
1. 空间大小差异, alpine 默认 5M 左右, centos 等都在 200M 左右。
2. 默认软件包差异, alpine 选用 busybox , centos 等则是 bash+coreutils 几件套。
3. alpine 中,国际化组件被优化掉了。
4. 还有一点, alpine 中选用的都是 “ 最简依赖 ” ,这点和 archlinux 比较像,举个例子,
   openssh 包不会自带 pam 插件,于是他也就不支持 ldap 。这点我给 alpinelinux 官方提过
   issue 。和 php 不一样, php 可以做成 php-pdo , php-dom 的包,然后动态加载共享库。
   openssh 不行, “ 没带就是没写 ” 。
5. glibc 差异, alpine 选用 musl , centos 等选用 glibc ,其他的倒还好, libc 的差异对开发很重要。

2、基本结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。

一般的, Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

Docker数据卷与Dockerfile

 Docker数据卷与Dockerfile

②、编写 Dockerfile 文件

 新建mi文件夹: mkdir lsy

lsy文件夹中新建Dockerfile :touch Dockerfile

编辑:
(1)编辑Dockerfile :vim Dockerfile 进入后点击 i 编辑,编辑完成Esc ,” :wq “即可退出

(2)左边直接打开编辑:
Docker数据卷与Dockerfile

#1.指定基础镜像,并且必须是第一条指令 
FROM centos:latest
#2.指明该镜像的作者和其电子邮件 
MAINTAINER xx “xx@qq.com”
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径 
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH 
#容器启动时需要执行的命令

如果仅仅是把本地的文件拷贝到容器镜像中,COPY 命令是最合适不过的。其命令的格式
为:COPY <src> <dest>
ADD 命令的格式和 COPY 命令相同,也是:ADD <src> <dest>
区别:ADD解压压缩文件并把它们添加到镜像中
3、创建镜像
编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。

docker build -t jdk8:v1.0 .

Docker数据卷与Dockerfile

 

注1:-t jdk8:v1.0 给新构建的镜像取名为 jdk8, 并设定版本为 v1.0

注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建

查看镜像:

存在jdk8:

Docker数据卷与Dockerfile

4、基于 Alpine 制作 JDK8 镜像

docker pull alpine:3.10
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /usr/local/java/
COPY glibc-bin-2.29-r0.apk /usr/local/java/
COPY glibc-i18n-2.29-r0.apk /usr/local/java/
#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子 
少安装wget
## ca-certificates证书服务,是安装glibc前置依赖 
RUN apk –no-cache add ca-certificates wget \
   && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine- 
pkgs.sgerrand.com/sgerrand.rsa.pub \
   && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \ 
   && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc- 
i18n-2.29-r0.apk

压缩命令

tar zcvf jre1.8.0_221.tar.gz jre1.8.0_221

bye~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/12194.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!