1. 使用数据卷
1.1 使用命令方式挂载 -v
1 2 3 4
| docker run -it -v 主机目录:容器内目录
# 测试 docker run -it -v /home/test:/home centos /bin/bash
|

2. 具名挂载和匿名挂载
具名挂载是指你指定了一个特定的卷名,这个卷名在宿主机中是唯一的,并且可以在不同的容器之间共享。匿名挂载则没有指定卷名,Docker会自动生成一个卷名。
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 匿名挂载 docker run -d -P --name nginx_alvis -v /etc/nginx nginx # 匿名挂载不指定主机目录
# 匿名挂载,我们在-v的时候只写了容器内的路径,没有写容器内的路径,这样的卷没有名字。
# 具名挂载 docker run -d -P --name nginx_cj -v juming:/etc/nginx nginx
# 查看挂载卷的路径 docker volume inspect juming
# 查看所有的卷 docker volume ls
|

3. 初始DockerFile
DockerFile就是用来构建docker镜像的构建文件!命令脚本!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 创建一个dockerfile文件 # 编写dockerfile文件 FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "====END====" CMD /bin/bash
# 在创建镜像的时候挂载两个卷
# 创建镜像 docker build -f /home/dockerfile -t alvis/centos .
# 运行镜像 docker run -it alvis/centos /bin/bash
# 查看容器的信息 docker inspect 容器id
|
通过dockerfile创建镜像的挂载卷

3.1 DokcerFile的构建过程
[!info] 基础知识
- 每个保留关键字(指令)都必须是大写字母
- 执行顺序是从上到下以此执行
- ‘’#‘’ 表示注释
- 每一个指令都会创建提交一个新的镜像层
3.2 DockerFile的指令
1 2 3 4 5 6 7 8 9 10 11 12
| FROM # 基础镜像,一切从这里开始构建 MAINTAINER # 镜像是谁写的,姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 暴露的端口 CMD # 指定这个容器启动的时候要运行的命令, 只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令 COPY # 类似ADD 将我们文件拷贝到镜像中 ENV # 构建的时候我们设置环境变量
|
3.3 构建自己的centos
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| FROM centos:7 MAINTAINER alvis<alvis.goodday@gmail.com>
ENV MYPATH /usr/local WORKDIR $MYPATH
RUN yum -y install vim RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH CMD echo "===END===" CMD /bin/bash
|
3.4 CMD和ENTRYPOINT的区别
1 2
| CMD # 指定这个容器启动的时候要运行的命令, 只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 编写测试cmd的dockerfile FROM centos:7 CMD ["ls", "-a"] # 启动容器时候执行的命令
# 构建镜像 docker build -f cmdDockerfile -t cmdtest .
# 运行镜像 docker run -it cmdtest # 没有问题。会执行ls -a列出所有的目录
# 我想在追加一个命令 执行ls -al 列出所有文件的详细信息 docker run -it cmdtest l # 会报错。找不到对应的命令
# 正确的方式 docker run -it cmdtest ls -al
|
1 2 3 4 5 6 7 8 9 10 11 12
| # 编写测试ENTRYPOINT的dockerfile文件 FROM centos:7 ENTRYPOINT ["ls", "-a"]
# 构建镜像 docker build -f entrypointDockerfile -t entrypointtest .
# 运行镜像 docker run -it entrypointtest # 没有问题。会执行ls -a列出所有的目录
# 我想在追加一个命令 执行ls -al 列出所有文件的详细信息 docker run -it entrypointtest l # 没有问题会追加命令
|
4. 发布镜像到dockerhub、阿里
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 发布到dockerhub # 登录 docker login -u 账号
# 登录成功之后就可以push到仓库 docker push 作者/镜像名称:标签
# 发布到阿里云 # 1. 登录到阿里云并找到镜像服务仓库 # 2. 创建命名空间并创建镜像仓库 # 3. 按照阿里云的命令直接敲
|
5. 数据卷容器
实现多个容器之间的数据共享
1 2 3 4 5 6 7 8
| A --volumes-from B # A继承B
# 启动两个容器 docker run -it --name docker01 alvis/centos /bin/bash
docker run -it --name docker02 --volumes-from docker01 alvis/centos /bin/bash
|

[!info]
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。
6. 小结
