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