回顾增加的知识:
创建容器并进入:
docker run -it --name cent01 centos退出后会后台运行
docker run -itd --name cent02 centos
强制删除所有容器:
docker rm -f $(docker ps -a)
查询所有容器id:
(docker ps -aq)
一、数据卷、挂载目录
docker 在容器中管理数据主要有两种方式:- 数据卷( Volumes )- 挂载主机目录( Bind mounts )
1、数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS ,可以提供很多有用的特性:· 数据卷 可以在容器之间共享和重用· 对 数据卷 的修改会立马生效· 对 数据卷 的更新,不会影响镜像· 数据卷 默认会一直存在,即使容器被删除
①、创建数据卷
docker volume create my-vol
②、查看所有数据卷
docker volume ls
③、查看数据卷信息
docker volume inspect my-vol
④、删除一个volume
docker volume rm my-vol数据卷 是被设计用来持久化数据的,它的生命周期独立于容器, Docker 不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,所以要及时删除.
进入数据卷目录:cd /var/lib/docker/volumes/my-vol
返回上一级:cd ..
查看:ll
⑥、挂载数据卷
docker run -itd \--name 容器名字 \--mount source= 数据卷名称 ,target= 容器中的对应目录 \镜像名称
(1)创建容器并挂载数据卷:
docker run -itd --name cent03 --mount source=my-vol,target=/mwy centos(2)新开一个对比查看
里面什么也没有
原来的里面放入一个图片
进入新建的那个直接ls得到图片
数据卷加载进入容器成功,两边的数据的数据同步
(3)两条语句一起执行:&&
查了镜像和容器id: docker images && docker ps -aq
(4)在输入语句时 “ \ ” 表示跨行
(5)查看容器所有信息
docker inspect name
容器中数据卷信息:
2、挂载目录
docker run -itd \--name 容器名字 \--mount type=bind,source= 宿主机目录 ,target= 容器中的对应目录 \镜像名称
查看到mwy的文件夹:
将他绑到docker
绑定mwy成功,并且有数据
3、数据卷容器挂载
创建数据卷容器docker run -itd --name name -v dir centos挂载数据卷容器docker run -itd --name name --volumes-from db_data centos
(1)创建数据卷容器
指定的是vol中的mwy文件共享出去:docker run -itd --name vol -v /mwy centos
创建成功
(2)挂载数据卷容器
二、Dockerfile文件创建自定义镜像
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、基本结构
新建mi文件夹: mkdir mi
mi文件夹中新建Dockerfile :touch Dockerfile
编辑:
(1)编辑Dockerfile :vim Dockerfile 进入后点击 i 编辑,编辑完成Esc ," :wq "即可退出(2)左边直接打开编辑:
#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_221ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH=$JAVA_HOME/bin:$PATH# 容器启动时需要执行的命令#CMD ["java","-version"]
3、创建镜像
docker build -t jdk8:v1.0 .注1:-t jdk8:v1.0 给新构建的镜像取名为 jdk8, 并设定版本为 v1.0注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建查看镜像:存在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