Docker学习(二)-DockerFile

news/2024/7/5 5:20:37

目录

一、DockerFile解析

DockerFile构建过程解析

DockerFile保留字指令

二、本地镜像发布到阿里云


一、DockerFile解析

DockerFile用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

构建三步骤:

1、编写DockerFile文件

2、docker build -f dockerfile文件 -t 镜像名 .

3、docker run 运行容器

以centos为例:在DockerHub上搜索centos镜像,找到一个dockerfile

FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c68-docker.tar.xz /
LABEL name="CentOS Base Images" \
    vendor="CentOS" \
    license="GPLv2" \
    build-date="2016-06-02"

# Default command
CMD ["/bin/bash"]

DockerFile构建过程解析

DockerFile内容基础知识:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、#表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

DockerFile、Docker镜像、Docker容器分别代表软件的三个不同阶段。

DockerFile是软件的原材料

Docker镜像是软件的交付品

Docker容器则可以认为是软件的运行态

DockerFile保留字指令

1.FROM:基础镜像,当前新镜像是基于哪个镜像的
2.MAINTAINER:镜像维护者的姓名和邮箱地址
3.RUN:容器构建时需要运行的命令
4.EXPOSE:当前容器对外暴漏出的端口
5.WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
6.ENV:用来在构建镜像过程中设置环境变量
7.ADD:ADD=COPY+解压缩:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
8.COPY:类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
9.VOLUME:容器数据卷,用于数据保存和持久化工作
10.CMD:DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
指定一个容器启动时要运行的命令
CMD命令的格式:
shell格式:CMD <命令>
exec格式:CMD ["可执行文件","参数1","参数2"...]
11.ENTRYPOINT:指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ENTRYPOINT后如果有多个参数,以追加的形式生效。
12.ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

Base镜像(scratch):Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

案例:编写centos

1、编写centos的DockerFile

FROM centos
MAINTAINER lwz<lwz@163.com>
ENV mypath /tmp
WORKDIR $mypath

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD echo $mypath
CMD /bin/bash

2、构建

docker build -f dockerfile文件 -t 镜像名 .
最后的.表示当前目录。
================================================
创建DockerFile文件
[root@localhost mydocker]# vi dockerfile2
[root@localhost mydocker]# cat dockerfile2
FROM centos
MAINTAINER lwz<lwz@163.com>
ENV mypath /tmp
WORKDIR $mypath

RUN yum -y install net-tools
RUN yum -y install vim

EXPOSE 80
CMD echo $mypath
CMD /bin/bash

[root@localhost mydocker]#docker build -f /mydocker/dockerfile2 -t lwz/centos:1.3 .

3、运行

docker run 

DockerFile演示:

FROM centos
RUN yum install -y curl
CMD ["curl","-s","https://ip.cn/"]
FROM openjdk:11.0.13
VOLUME /tmp
ADD target/xxxx-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 9001
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

错误:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

原因:

在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。

CentOS 8已于2021年12月31日寿终正寝,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

解决方法:

。。。。。

按照网上测试未成功。

=================================================

二、本地镜像发布到阿里云

1、本地镜像发布到阿里云流程

2、镜像的生成方法

1.新建DockerFile
2.从容器创建一个新的镜像
3.docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

3、将本地镜像推送到阿里云

aliyun服务   注册镜像服务账号等。没整明白。

大概的意思就是在阿里云创建仓库命名空间和实例名。然后在docker中登录自己的阿里云账号。进行操作。

1.在docker环境中验证阿里云账号。
2.docker tag [ImageId] ......:[镜像版本号]
3.docker push ......:[镜像版本号]

4、将阿里云上的镜像下载到本地

docker pull  ....

Spring Boot入门+深入(六)-Docker


http://www.niftyadmin.cn/n/3298003.html

相关文章

有状态as无状态之线程问题

有状态就是有数据存储功能。有状态对象(Stateful Bean)&#xff0c;就是有实例变量的对象 &#xff0c;可以保存数据&#xff0c;是非线程安全的。在不同方法调用间不保留任何状态。 无状态就是一次操作&#xff0c;不能保存数据。无状态对象(Stateless Bean)&#xff0c;就是没…

JVM学习(二)--类加载器子系统

目录 一、内存结构 二、类的加载器及类的加载过程 类加载器的分类 启动类加载器&#xff08;引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff09; 扩展类加载器&#xff08;Extension ClassLoader&#xff09; 应用程序类加载器&#xff08;系统类加…

程控制中关于搜索、控制计算机的功能 和 VB中截获shell程序的输出

相信大家对“冰河”之类的软件一定都非常的感兴趣&#xff0c;这里我们一起来讨论一下“冰河”类软件中关于如何实现搜索、控制远端计算机&#xff08;在局域网、或互联网上搜索那些中了木马的机器&#xff09;的功能。 一、 编程原理 客户端程序&#xff1a;&#xff08;控制远…

JVM学习(三)--运行时数据区

目录 一、运行时数据区 1、简介 2、程序计数器(PC寄存器) 3、虚拟机栈 3.1、简介 3.2、栈的存储单位 3.3、局部变量表&#xff08;Local Variables&#xff09; 3.4、操作数栈&#xff08;Operand Stack&#xff09; 3.5、栈顶缓存&#xff08;Top-of-Stack Cashing&a…

RenderMan介绍

RenderMan介绍RenderMan是一种一流的渲染器或者说是一种渲染思想&#xff0c;一种系统。用于动画效果中的后毛发等制作的软件。这个软件是皮克斯开发的&#xff0c;广泛应用于好莱坞的影片&#xff0c;包括动画和真人电影中的特效镜头。 RenderMan是PIXAR出品的目前最强大的渲染…

COBOL语言总结(三)--JCL扩展

目录 一、JCL扩展 1、JCL语法规则&#xff1a; 2、JOB语句&#xff1a; 2.1、JOB语句中的位置参数 2.2、JOB语句中的关键字参数 3、EXEC语句 3.1、EXEC语句中的位置参数 3.2、EXEC语句中的关键字参数 3.3、COND参数 4、DD语句 4.1、DD语句中的位置参数 4.2、DD语句…

SQL中N的作用

declare sql nvarchar(4000)set sql Nselect TotalRecordscount(*) from N( sqlFullPopulate N) a EXEC sp_executesql sql,NTotalRecords int output, TotalRecords output 问题&#xff1a;sql 后面有个N, N 起什么作用? 答案&#xff1a; 加上 N 代表存入数据库时…

jvm 初始化

package test;public class A {private static A a new A();private B b B.getInstance();private A() {}public static A getInstance() {System.out.println("A被调用");return a;}public void test() {System.out.println(b);}}package test;public class B {pr…