初始DockerFile

Dockerfile是用来构建docker镜像的构建文件!命令脚本!通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,就是镜像的一层。

  • dockerfile文件的名字可以随机,但是建议用dockerfile
  • 文件中的内容指令参数用大写
  • dockerfile是一个文本文件,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个想你的镜像开始工作
  • 对于运维人员:在部署时,可以实现应用的无缝移植
    例子:
    这里的-y尽量不要省,因为安装过程遇到命令输入可能会失败,
    from centos:7这个镜像是有的,如果没有会自动下载,但是版本号得对.
    这里要记住,除关键字大写,其他全部小写,否则执行时报错.
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash

项目构建指令

docker build -f /wj/dockerfile -t wj/filetomcat:1.0

-f 是指定dockerfile存在的根路径位置

-t 指定新镜像的REPOSITORY信息

:1.0是新镜像的TAG信息

这里的最后边有一个点,代表寻址路径

dockerfile启动执行脚本 dockerfile 运行脚本_centos


启动新镜像

docker run -t e78d4dbec2b4 /bin/bash

进入新起的容器内,查看新生成的两个文件夹

dockerfile启动执行脚本 dockerfile 运行脚本_bash_02


退出到宿主机,查看当前容器挂载的文件路径地址

docker inspect 7e5001e673e8

dockerfile启动执行脚本 dockerfile 运行脚本_bash_03


我们写的是匿名挂载,两边创建文件测试,发现可同步,搞定!

看一下官网的代码

dockerfile启动执行脚本 dockerfile 运行脚本_bash_04


CMD["/bin/bash"]:这就是为什么创建时可以省略的原因!

dockerfile启动执行脚本 dockerfile 运行脚本_docker_05


dockerfile启动执行脚本 dockerfile 运行脚本_linux_06


not a regular file

linux 下scp传文件时错误 scp: /usr/tools: not a regular file 不能成功传送 解决方案

1:有可能没权限 chmod 777

2: 在使用scp时加上-r 参数

scp -r root@192.168.16.5:/usr/tools/xxxx

例子:scp -r /Users/wangjun/JAVA/WangJunDemo/gxs-sms/target/gxs-sms-1.0.0.jar root@119.23.108.107:/root/tomcat/java-project

容器间的数据同步

一、启动使用dockerfile创建的镜像

docker run -it --name test1 wj/filecentos:1.0

进入启动的容器查看挂载的文件夹是否存在

docker exec -it 容器ID /bin/bash
docker exec -it a27f1a6fe9 /bin/bash

dockerfile启动执行脚本 dockerfile 运行脚本_linux_07


在volume01和volume02分别创建文件,返回到宿主机

docker inspect 容器ID			#查看容器信息
docker inspect a27f1a6fe923

在Mounts中查看挂载的文件位置,进入文件查看容器内的文件是否同步。

dockerfile启动执行脚本 dockerfile 运行脚本_centos_08


二、在test1的基础上启动test2

docker run -it --name test2 --volumes-from test1 wj/filecentos:1.0

dockerfile启动执行脚本 dockerfile 运行脚本_bash_09


进入新生成的容器查看文件挂载

dockerfile启动执行脚本 dockerfile 运行脚本_linux_10


在挂载文件夹中创建文件看是否能同步出去,一个是宿主机文件夹,一个是test1挂载的文件夹。

总结:

  • 容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
  • 但是一旦持久化到了本地,这个时候,本地的数据是不会删除的。
三、 CMD和ENTRYPOINT区别

cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令。