初学者关于Docker的一些问题记录

栏目: 编程工具 · 发布时间: 5年前

内容简介:搭建一个基于springcloud的分布式博客系统,已经实现了基于eureka的配置中心和注册中心,为了减少本地的内存压力,使用docker将配置中心注册中心放到服务器上docker build -t imageName path, 这里path指的是上下文路径,如ADD COPY等命令都需要一个源路径和目标路径,那么源路径和目标路径的定位是相对于那个路径呢? 源路径就是相对于path,它只能访问path下的目录,在path外的目标是不能被访问到,目标路径相对的就是这个WORKDIR,表示当前容器在运行是

项目背景

搭建一个基于springcloud的分布式博客系统,已经实现了基于eureka的配置中心和注册中心,为了减少本地的内存压力,使用 docker 将配置中心注册中心放到服务器上

初学者初探

  • dockerfile中的WORKDIR的用处

docker build -t imageName path, 这里path指的是上下文路径,如ADD COPY等命令都需要一个源路径和目标路径,那么源路径和目标路径的定位是相对于那个路径呢? 源路径就是相对于path,它只能访问path下的目录,在path外的目标是不能被访问到,目标路径相对的就是这个WORKDIR,表示当前容器在运行是访问的根路径,比如RUN java -jar target.jar的时候,这个target在容器中的某个目录下,通过WORKDIR定位到这个目录,就能能通过RUN 来执行到这个target.jar,而不需要在RUN中指定额外的相对或者绝对路径定位这个jar文件

  • 制作一个含有jdk环境的Dockefile

制作这么一个Dockerfile也不难,指定FROM centos, 通过add将jar解压到容器目录里面,最后通过ENTRYPOINT 指定java -jar && tail -f > /etc/null执行springboot的jar包并保证进程不退出。但jdk的环境变量配置需要注意,有三种写法,一种通过RUN SED -i "$a" /etc/profile 将jdk的环境变量写进profile,第二种通过RUN echo "JAVA_HOME" >> /etc/profile,第三种直接通过dockerfile提供的ENV JAVA_HOME 来设置jdk的环境变量。前面两种都是通过在/etc/profile中写环境变量来完成,但是指定RUN source /etc/profile是行不通的,你需要进入容器中source /etc/profile才能让/etc/profile的环境变量生效。第三种是最简单的设置方法,设置了在容器容器时直接生效。

  • RUN命令中的&&命令连接

RUN command 一个RUN会产生一个中间的容器,那么一套相关的命令可以通过RUM command && command来进行连接,换行可以指定 ,如果不指定直接换行连接command会出现一些语法错误,这样有什么好处呢?更加直观?命令功能分块集中?你觉得好就对了何必教科书般的说出个之所以然来,RUM cd /usr/local && npm install这条命令如果分开写成两个RUN会如何? 导致install访问不到/usr/local的文件,它因为是重新开始一个容器,访问的路径时WORKDIR指定的根目录

  • CMD的ENTRYPOINT的区别

dockerfile中的一些指令都是可以通过docker run来覆盖的,比如 -v 挂载可以覆盖VOLUME -p 可以覆盖EXPOSE指定的端口, -w可以覆盖WORKDIR,-v 可以覆盖ENV环境变量,这里的docker run imageId command 中的command可以覆盖CMD,所以容器的启动后执行的命令还是写在ENTRYPOINT比较好,避免被覆盖掉。

  • docker run中的-it是什么意思,-d是什么意思, 后面跟个command为/bin/bash又是什么意思

i表示交互,t表示伪终端,-d是后台运行,/bin/bash是容器启动时执行/bin/bash命令在容器中打开一个进程进入/bin/bash。解释了但是没有实践又怎么知道是怎么个回事。那么如果不指定-d,会使容器在前台执行进程,将控制台打印这些执行信息,如果指定了-d那么容器进程在后台执行,不会打印执行信息,也不用想办法退出当前容器执行的进程。一般运行docker run以后直接在控制台打印这个容器的id信息,但是我又想进入容器怎么办?docker exec吗,我执行进去看看不想写这个命令,这时候可以通过docker run -it /bin/bash 执行完就能进入到这个容器里面查看一些信息,这应该就是所谓的交互

  • dockerfile通过docker build通过docker images可以找到这个镜像,删除dockerfile上下文会生效吗

之前试了一下,也不知道是不是服务器内存不够,执行docker run 没生效,还需要待实践

  • 挂载目录的理解

挂载目录可以在dockerfile中通过volume指定,这只能指定容器的挂载目录,宿主机的挂载目录自动生成,可以通过docker inspect imageId查看,也可以通过docker run -v path:path 指定,那么我在宿主机的挂载目录中更改一些信息,它会立马响应到容器对应挂载的目录里面

  • dockerfile制作启动springboot项目的镜像,如何更新jar包

最初认为只要挂载好宿主机的存放jar的目录到指定的容器目录中,通过docker restart重新执行dockerfile中的ENTRYPOINT java -jar target.jar命令来执行这个容器的挂载目录更新的target.jar,这样就能完成jar的更新,发现行不通每次发布新的jar都需要通过docker build重新构建镜像,具体还需要实际操作总结


以上所述就是小编给大家介绍的《初学者关于Docker的一些问题记录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Open Data Structures

Open Data Structures

Pat Morin / AU Press / 2013-6 / USD 29.66

Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具