Dockerfile和DockerCompose的使用

这篇具有很好参考价值的文章主要介绍了Dockerfile和DockerCompose的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

学习命令的正确方式,其实是先手动操作一个简单的命令,然后了解命令的基本含义,然后再看命令的相关文章。

所以,网上哪些docker的文章,基本上都不适于学习入门。

基础命令

基础命令如下:

FROM openjdk:8-jre-alpine
LABEL author="kiba <xxx@126.com>" # 镜像描述
LABEL describe="test image" #镜像描述
MAINTAINER kiba <xxx@126.com> # 作者
COPY java /opt/program # 复制java文件夹的内容到 /opt/program 不存在的目录自动创建
EXPOSE 8520 #明确指定容器运行时需要暴露的端口。这个指定一般来说不用,因为创建容器时会用 -p来暴露端口
ENTRYPOINT ["java", "-jar", "/opt/program/app-kiba-spring-kafka-1.0.0.jar"]

首先连接linux,然后创建一个文件夹,然后创建一个Dockerfile文件,没有后缀名。

Dockerfile和DockerCompose的使用

然后编辑这个文件,复制上面的命令进去。

复制时,注意删掉#后面的注释,如下图:

Dockerfile和DockerCompose的使用

然后CD到这个目录,执行命令。

docker build -t kiba-test-image:latest .

注意最后的 【. 】必须有。

执行结果如下:

Dockerfile和DockerCompose的使用

然后查询镜像。

docker images

如下图,我们多了一个自定义镜像。

Dockerfile和DockerCompose的使用

现在,我们再来了解一下命令含义。

  • FROM:指定基础镜像,后续的指令将基于这个基础镜像进行构建。

  • RUN:在容器中执行命令。可以执行任意的命令,例如安装软件包、执行脚本等。run执行的命令都是在创建镜像时执行的,并不是在创建容器时执行的。

  • COPY:将文件从宿主机复制到容器中。可以是单个文件,也可以是整个目录。COPY的目标目录不存在会自动创建。

  • ADD:与 COPY 类似,但还可以从 URL 下载文件并添加到容器中。

  • ENV:设置环境变量。

  • EXPOSE:暴露容器中的端口,使其可以被外部访问。

  • CMD:指定容器启动时执行的命令。

  • ENTRYPOINT:与 CMD 类似,但 ENTRYPOINT 命令会覆盖 Dockerfile 中后续的 CMD 命令。它的参数用逗号分隔,这里的逗号分隔,等于命令里的空格。

  • VOLUME:创建一个数据卷,用于容器与宿主机之间共享数据。

  • USER:指定运行容器时的用户。

  • WORKDIR:设置容器的工作目录 类似于CD到了这个目录 ,该命令后面的命令,如RUN、CMD、ENTRYPOINT、COPY、ADD等命令都在此目录下作为当前工作目录。例如:WORKDIR /opt

  • ARG:定义构建时的参数,这些参数可以在构建时通过命令行进行传递。

了解了命令内容,就知道了,刚才的命令是从网上下载一个openjdk:8-jre-alpine镜像,然后对其进行编辑,并复制了一个jar包进去,然后,要求该镜像,创建容器时,启动这个jar包。

现在,我们创建一个容器

docker run -it -d --name kiba-test-container -p 8051:8520 kiba-test-image:latest

注意:这里的-d一定要加,不然docker就会在前台运行。

然后访问,我们的jar包的网站即可,如下:

http://10.1.0.100:8051/code/doc.html

如果不加-d,就是在前台运行,可以使用Ctrl+C退出。

删除容器相关命令如下:

docker rm kiba-test-container # 删除容器
docker ps -a # 查看全部容器
rmi kiba-test-image # 删除镜像
docker images # 查看全部镜像

因为copy命令复制的文件夹下,还有个startup.sh,然后就尝试一下用sh启动。

但结果不尽如人意,一直未能启动成功。

尝试错误命令组合如下:

#RUN chmod 777 /opt/startup.sh
#ENTRYPOINT ["sh", "/opt/startup.sh"] #启动异常  Exited
#RUN chmod u+x /soft/app-kiba-spring-kafka/startup.sh
#RUN chmod 777 /startup.sh
#ENTRYPOINT ["sh", "/startup.sh"] #启动异常  Exited 
#ENTRYPOINT ["./startup.sh"] #启动异常 exec ./startup.sh: exec format error
# CMD ["sh", "/startup.sh"] #启动异常  Exited 
# CMD ["/startup.sh"] #启动异常  Exited docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/startup.sh": permission denied: unknown.
#CMD ["/startup.sh"] 启动异常  Exited

上网调查了一下,有说能运行sh的,有说不能运行sh的。想来是比较麻烦,不过命令可以直接运行,sh运行不了也不用太纠结。

创建镜像

经过测试,感觉还是自动创建镜像更加省心。

创建镜像

创建镜像命令。

docker pull java:openjdk-8u111-jre
docker run -it -d  --name kiba-test-custom -p 8052:8520 java:openjdk-8u111-jre /bin/bash
docker exec -it kiba-test-custom /bin/bash

下面这个命令不成立,因为openjdk:8-jre-alpine没有/bin/bash。

docker run -it -d  --name kiba-test-custom -p 8052:8520 openjdk:8-jre-alpine /bin/bash

openjdk:8-jdk-alpinejava:openjdk-8u111-jre都是Java的安装包,但它们的来源和用途略有不同。

openjdk:8-jdk-alpine是基于Alpine Linux构建的轻量级JDK版本,它包含了Java运行环境所需的基本组件,体积更小巧,适合于资源有限的环境。你可以使用它在Docker容器中运行Java应用程序。

java:openjdk-8u111-jre则是OpenJDK发行的标准JRE(Java Runtime Environment),它包含Java虚拟机(JVM)和Java应用程序所需的类库。它是一个独立的安装包,可以在各种操作系统上安装和使用。

然后使用docker cp复制文件。

docker cp /soft/resources/app-kiba-spring-kafka-1.0.0.jar  kiba-test-custom:/resources/app-kiba-spring-kafka-1.0.0.jar

然后,再手动处理容器,让jar可以运行,再将这个容器提交为新镜像。

docker commit kiba-test-custom kiba-test-custom-image;

然后再使用自定义镜像,这样用起来更方便。

docker compose

再同级目录编写docker-compose.yml文件,编写代码如下:

version: "2.22.0"

services:
  kibaDocker:
    build:
      context: .
      dockerfile: Dockerfile
    image: kiba-tewt-image_10
    container_name: kiba-test-container-10
    ports:
      - 8529:8520 # 宿主:容器

version对应上dockercompose就行,对不上也行。

然后下面的内容,就可以字面理解了,就上面手动创建容器的命令。

然后执行。

docker-compose up -d

-d是后台运行的意思。

然后就正式运行成了。访问http://10.1.0.145:8529/code/doc.html即可


注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!


Dockerfile和DockerCompose的使用


若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/18072670文章来源地址https://www.toymoban.com/news/detail-839857.html

到了这里,关于Dockerfile和DockerCompose的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】golang使用DockerFile正确食用指南

    大家好 我是寸铁👊 总结了一篇golang使用DockerFile正确食用指南✨ 喜欢的小伙伴可以点点关注 💝 今天寸铁想让编写好的 go 程序在 docker 上面跑,要想实现这样的效果,就需要用到今天的主角: Docker File ,那怎么使用 DockerFile 呢? 那具体怎么做呢?其实很简单,不过网上的博

    2024年03月12日
    浏览(49)
  • 模型存储:使用Docker和DockerCompose管理机器学习模型

    作者:禅与计算机程序设计艺术 在现代数据驱动的应用中,机器学习模型越来越受到重视,而管理这些模型也变得十分重要。传统的方式包括将模型部署到不同服务器上,但这样做会导致资源浪费、高昂的维护成本以及硬件配置上的限制。Docker 和 Docker Compose 是构建容器化应

    2024年02月07日
    浏览(29)
  • DockerCompose常用命令

           在上一篇博客中,我们对DockerCompose有了一个初步的认识,以及介绍了多种安装方式,本文继续介绍DockerCompose的常用命令。        DockerCompose中常常用到两个术语,一个是服务,一个是项目。服务常常代表一个应用容器,项目常常由一系列应用容器组成,而 docker-co

    2024年02月10日
    浏览(34)
  • 如何正确使用npm常用命令

    npm常用命令: 官方文档: CLI Commands | npm Docs 1. npm -v:查看 npm 版本 2. npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面 3. npm install:会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖 4. npm insall 包名   --sava-dev (npm inst

    2024年02月15日
    浏览(32)
  • 【Docker】初识 Docker,Docker 基本命令的使用,Dockerfile 自定义镜像的创建

    在部署大型项目时,常常面临多组件、复杂的依赖关系和不同环境之间的差异,这些因素可能导致以下问题: 复杂的依赖关系: 由于项目组件众多,各个组件之间的依赖关系变得复杂,容易出现版本不匹配或兼容性问题。 兼容性问题: 项目在不同的环境中可能会遇到兼容性

    2024年02月05日
    浏览(45)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(41)
  • Docker | 使用DockerCompose

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容:Docker | 使用DockerCompose 📚个人知识库: Leo知识库,欢迎大家访问 大家好,我是Leo哥🫣🫣🫣,在

    2024年02月04日
    浏览(28)
  • 【C++】C++学习前言

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

    2024年03月12日
    浏览(41)
  • 课程学习前言

    app 抓包分析可以看到有签名有加固,毕竟需要 APK 去访问服务、获取数据,都需要 APK 有完整的信息,而这些信息、代码经过各种加密,还是放在 APK 里面。说白了,就是门锁紧了,钥匙藏在门口某个地方,也许就是地垫下面 逆向流程 拿到 App 应用的 apk ; 使用工具进行查壳

    2024年02月06日
    浏览(32)
  • Gowin FPGA学习记录——前言

            好久没有写博客了,想想是不是又该写点啥东西了么,准备写点国产FPGA的使用经历吧                  得益于目前国内的政策对国产化芯片扶持,越来越要求核心器件能够自主可控,因此作为核心芯片FPGA,国产FPGA的势头也发展很快。          现在FPGA的这

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包