Docker数据管理

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

- 数据卷(Volumes)

- 挂载主机目录(Bind mounts)



数据卷



为了很好的实现数据保存和数据共享, Docker 提出了 Volume 这个概念,简单的说就是绕过默认的联合



文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。


数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS ,可以提供很多有用的特性:



数据卷 可以在容器之间共享和重用



对 数据卷 的修改会立马生效



对 数据卷 的更新,不会影响镜像



数据卷 默认会一直存在,即使容器被删除




创建数据卷

docker volume create my-vol



查看所有数据卷

docker volume ls




查看数据卷信息

docker volume inspect my-vol


进入数据卷

cd /var/lib/docker/volumes/my-vol/_data


删除一个volume

docker volume rm my-vol



数据卷 是被设计用来持久化数据的,它的生命周期独立于容器, Docker 不会在容器被删除后自动


删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷


可能会占据很多空间,所以要及时删除



载数据卷挂



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



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




docker run -itd \

--name 容器名字 \

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

镜像名称



docker run -itd --name zz --mount source=my-vol,target=/zking centos
 

进入容器

docker exec -it 容器名称 bash



 不停止服务推出指令Ctrl+p Ctrl+q

&&表示两条语句一起执行

docker images && docker ps -aq


\表示跨行

docker run  -itd \

最好是通过run而非create/start创建启动容器,create/start命令创建启动容器后,再挂载数据卷


相当麻烦,要修改很多配置文件,但并非不可以



加了 “\” 意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行




输入,直到读到结束符,如回车




如果数据卷不存在, docker 会自动创建




如果容器上目录不存在, docker 会自动创建




查看数据卷的具体信息

docker inspect name




挂载目录

docker run -itd \

--name 容器名字 \

--mount type=bind,source= 宿主机目录 ,target= 容器中的对应目录 \

镜像名称


数据卷容器



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



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




创建数据卷容器

docker run -itd --name name -v dir centos



挂载数据卷容器

docker run -itd --name name --volumes-from db_data centos


Dockerfile构建镜像 


Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使


用 Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙


构建基础镜像


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 的差异对开发很重



要。



基本结构


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


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




dockerfile volume命令 dockerfile volume有什么用_运维


准备工作


创建文件夹上传 jdk 的安装包 , 和在同级目录下编写 Dockerfile 文件


编写 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 
   
#    容器启动时需要执行的命令
   
#CMD ["java","-version"]

如果仅仅是把本地的文件拷贝到容器镜像中,COPY 命令是最合适不过的。其命令的格式 为:COPY <src> <dest> ADD 命令的格式和 COPY 命令相同,也是:ADD <src> <dest> 区别:ADD解压压缩文件并把它们添加到镜像中

创建镜像


编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像


docker build -t jdk8:v1.0 .

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


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

基于Alpine制作JDK8镜像


下载镜像

docker pull alpine:3.10


## glibc   安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 
  
COPY glibc-2.29-r0.apk /usr/local/java/ 
  
COPY glibc-bin-2.29-r0.apk /us   
#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 
   r/local/java/ 

  
COPY glibc-i18n-2.29-r0.apk /usr/local/java/

压缩命令

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