一、数据卷基本操作
创建(一下均以my-vol作为数据卷名称)
docker volume create my-vol
查看:
a.查看所有
docker volume ls
b.按名字查看信息
docker volume inspect my-vol
删除
docker volume rm my-vol
二、挂载数据卷
在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷 。
docker run -itd \
--name 容器名字 \
--mount source=数据卷名称,target=容器中的对应目录 \
镜像名称
如果要挂载多个,在source后再写一个source
\ 表示换行
如果数据卷不存在,docker会自动创建
如果容器上目录不存在, docker会自动创建
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
创建
docker run -itd --name name -v dir centos
挂载
docker run -itd --name name --volumes-from db_data centos
三、构建自定义镜像
1、准备基础镜像
centos
alpine
两个不同的基础镜像,alpine内存占用比centos小很多
2、编写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"]
要保证需要使用到的文件,在Dockerfile文件的同级或者同级以下
如果只是要将原文件复制到镜像中,就不使用ADD因为ADD会自动解压
3、在当前目录进行编译
docker build -t name .
最后面的 . 一定要加,表示使用当前目录的Dockerfile
四、将自定义镜像上传阿里云
1、新建阿里云仓库
全程可以用阿里云官网的搜索,并且后面还会提供上传和下拉的步骤
2、打包一个镜像
因为直接使用centos的镜像所占内存太大了,所以使用alpine作为基础镜像
并且所携带的配置只有jre
Dockerfile文件
#1.指定基础镜像,并且必须是第一条指令
#FROM alpine:latest
FROM alpine:3.10
#2.指明该镜像的作者和其电子邮件
MAINTAINER xyz "xyz@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jre-8u221-linux-x64.tar.gz /usr/local/java/
## 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/
#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade
#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
#7.配置环境变量
ENV JAVA_HOME=/usr/local/java/jre1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
其中jre或jdk要在同一目录中放入对应版本
使用docker构建之后会得到一个名字
然后只要按照阿里提供的步骤,就可以了。