不安装那几个中间件的话那就剩dockerfile和docker-compose没说了,都很重要。

Dockerfile

Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件

简单理解就是打自定义镜像用的一个文件,主要用于打自己的项目(比如springboot),没有后缀名,文件名就叫Dockerfile,里面使用各种命令和参数。

2.PNG

Dockerfile的保留命令:官方说明:https://docs.docker.com/engine/reference/builder/

几个常用命令:

| 保留字         | 作用                                                         |
| -------------- | ------------------------------------------------------------ |
| **FROM**       | **当前镜像是基于哪个镜像的** `第一个指令必须是FROM`          |
| **RUN**        | **构建镜像时需要运行的指令**                                 |
| **EXPOSE**     | **当前容器对外暴露出的端口号**                               |
| **WORKDIR**    | **指定在创建容器后,终端默认登录进来的工作目录,一个落脚点** |
| **ENV**        | **用来在构建镜像过程中设置环境变量**                         |
| **ADD**        | **将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包** |
| **COPY**       | **类似于ADD,拷贝文件和目录到镜像中<br/>将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置** |
| **VOLUME**     | **容器数据卷,用于数据保存和持久化工作**                     |
| **CMD**        | **指定一个容器启动时要运行的命令<br/>Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换** |
| **ENTRYPOINT** | **指定一个容器启动时要运行的命令<br/>ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数** |

都比较好理解,以前我一直不理解的一点就是run和cmd的区别,敲了敲指令发现:

二者运行的时间点不同;CMD 在docker run 时运行,而非docker build;RUN 指令是用于指定 docker build 过程中要运行的命令。

参考这篇文章:Docker:Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别

而且还有一些引申,比如:

1、Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。

2、CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

3、ENTRYPOINT 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序;
但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序

所以总结一下,一会写springboot打镜像时也会用到,就是用ENTRYPOINT时写死参数,CMD时写可变参数。

另外ADD和COPY比较类似,ADD好像功能更多吧,还能拉取URL后直接开始下载。

ENV环境变量就这么用 : ENV MY_CAT=fluffy,在接下来的命令中直接 $MY_CAT就直接取fluffy的值了

EXPOSE和VOLUME还有WORKDIR都是指定的概念,一个是指定端口,一个是指定容器运行时可以挂载到宿主机的目录,还一个是指定进入容器时的根目录

EXPOSE 80/tcp
VOLUME ["/data"]
WORKDIR /path/to/workdir

接下来我写个springboot项目打一个镜像看看效果,写完项目打完jar本地起了下没问题,然后就是将这个包传到服务器上去构建镜像,我这里偷个懒直接用idea去连接远程服务器了,在idea tools->Deployment->Browse Remote Host里

3.PNG

远程服务器装下ssh-server并开启远程root访问,下载时提示ssh-client依赖版本错误下载提示的对应版本就行。

然后在服务器上创建springbootDockerfile目录,将jar拖进去,然后idea里装个docker插件就可以直接在idea里写Dockerfile文件了,直接就有高亮和提示了,很方便,写完后拖进去:

4.PNG
然后滚去服务器里build这个Dockerfile就好了,没起来,发现是在ADD时myspringboot.jar写错名了导致没找到这个包 what s up,可能这就是矛盾艺术吧。

5.PNG

起来了,访问成功了,这样打自定义镜像就实现了。

6.PNG

7.PNG

这里是引入了openjdk作为依赖的基础镜像。构建和启动指令:

docker build -t myspringboot:01 .
docker run -d -p 9999:9999 --name myspringboot myspringboot:01

进入容器后也是Dockerfile WORKDIR的目录。

之后多容器的编排依赖就要用到docker-compose了。


标题:Docker(4)
作者:jyl
地址:http://jinyunlong.xyz/articles/2021/08/10/1628562285903.html