Docker学习(二)-DockerFile

  • Post author:
  • Post category:其他



目录


一、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



版权声明:本文为weixin_42472027原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。