资讯专栏INFORMATION COLUMN

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

googollee / 2541人阅读

摘要:第三种是最简单的设置方法,设置了在容器容器时直接生效。中的是什么意思,是什么意思,后面跟个为又是什么意思表示交互,表示伪终端,是后台运行,是容器启动时执行命令在容器中打开一个进程进入。

项目背景

搭建一个基于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 ,docker restart 来运行容器,需要注意一点,docker restart会重新执行一遍之前运行的docker run命令,如果这时候挂载点刚好是dockerfile上下文目录,那么docker restart以后发现宿主机找不到挂载目录(已经被删掉),就会生成一个指定的挂载目录名(之前在dockerfile run -v指定的名字),同时容器如果执行一个jar包刚好在挂载目录下,这时候就会找不到jar文件,从而报错,想要查看docker 容器执行的日志可以通过docker logs imageId来完成

挂载目录的理解

挂载目录可以在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重新构建镜像,具体还需要实际操作总结。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27881.html

相关文章

  • 学者关于Docker一些问题记录

    摘要:第三种是最简单的设置方法,设置了在容器容器时直接生效。中的是什么意思,是什么意思,后面跟个为又是什么意思表示交互,表示伪终端,是后台运行,是容器启动时执行命令在容器中打开一个进程进入。 项目背景 搭建一个基于springcloud的分布式博客系统,已经实现了基于eureka的配置中心和注册中心,为了减少本地的内存压力,使用docker将配置中心注册中心放到服务器上 初学者初探 dock...

    Cheng_Gang 评论0 收藏0
  • Docker从入门到放弃-学者困惑

    摘要:进入发现运行镜像的容器有可能也是一个系统。每次使用都会创建一个容器,如果出现已经存在的提示,请使用去移除这个容器。使用可以获取权限容器如何查看准确说如何进入到容器。这个就表示启动容器后启动保证有个进行在运行。 前言 这篇文章采用自问自答的方式记录自己的接触Docker的所想与困惑. 学习方式 菜鸟教程过一遍 -> 实战总结 -> Docker官网查找细节 基础知识 Docker搜索镜...

    yy13818512006 评论0 收藏0
  • 从零开始学习 Docker

    摘要:此命令下载测试镜像并在容器中运行它。国内很多云服务商都提供了加速器服务,例如阿里云加速器注册用户并且申请加速器,会获得如这样的地址。获取镜像阿里云镜像库上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像并运行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 这篇文章是我学习 Docker 的记录...

    lily_wang 评论0 收藏0
  • 从零构建一个基于DockerLaravel应用

    摘要:简介其实在这样的一个云计算时代早就已被人众所周知了它改变了传统物理机的虚拟化方式使得机器的资源得到了高效的利用因为运行在中的应用实际上就是运行在宿主机上的所以它是不需要进行硬件层面的虚拟化以及运行一个完整操作系统来支持于是在应用代码的执行效 Docker简介 其实在这样的一个云计算时代, Docker 早就已被人众所周知了,它改变了传统物理机的虚拟化方式,使得机器的资源得到了高效的利用...

    ixlei 评论0 收藏0
  • CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    摘要:围绕软件工程效率提升进行一系列技术内容分享,包括国内外持续集成持续交付,持续部署自动化测试等实践教程工具与资源,以及一些工程师文化相关的程序员。划分了数据库日志安全监控配置管理云服务等个大类,个工具。 CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成、持续交付,持续部署、自动化测试、 DevOps 等实践教程、工具与资源,以及一些工程师文化相关...

    monw3c 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<