0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker入门指南之什么是Dockerfile

jf_78858299 来源:CSDN 作者:一只楠喃 2023-02-06 15:25 次阅读

八、Dockerfile**

8.1 什么是Dockerfile

图片

8.1.1 介绍

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
  • 对于运维人员:在部署时,可以实现应用的无缝移植

8.1.2 Dockerfile构建步骤

  1. 编写Dockerfile文件
  2. docker build
  3. docker run

8.1.3 Dockerfile文件内容

以熟悉的centos为例:https://hub.docker.com/_/centos/

图片

8.2 DockerFile 构建过程解析

8.2.1 Dockerfile内容基础知识

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

8.2.2 Docker执行Dockerfile大致流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

8.3 常用命令

图片

图片

8.3.1 FROM

指明构建的新镜像是来自于哪个基础镜像,例如:

FROM centos: latest

8.3.2 MAINTAINER

指明镜像维护着及其联系方式(一般是邮箱地址),例如:

MAINTAINER JC Zhang zhangsan@163.com

不过,MAINTAINER并不推荐使用,更推荐使用LABEL来指定镜像作者,例如

LABEL maintainer=“zhangsan.cn”

8.3.3 RUN

构建镜像时运行的Shell命令,例如:

RUN [“yum”, “install”, “httpd”]
RUN yum install httpd

8.3.4 CMD

启动容器时执行的Shell命令,例如:

CMD ["-C", “/start.sh”]
CMD ["/usr/sbin/sshd", “-D”]
CMD /usr/sbin/sshd -D

8.3.5 EXPOSE

声明容器运行的服务端口,例如:

EXPOSE 80 443

8.3.6 ENV

设置环境内环境变量,例如:

ENV MYSQL_ROOT_PASSWORD 123456
ENV JAVA_HOME /usr/local/jdk1.8.0_45

8.3.7 ADD

拷贝文件或目录到镜像中,PS:如果是URL或压缩包,会自动下载或自动解压,例如:

ADD …

ADD html.tar.gz /var/www/html

ADD https://xxx.com/html.tar.gz /var/www/html

8.3.8 COPY

拷贝文件或目录到镜像中,用法同ADD,只是不支持自动下载和解压,例如:

COPY ./start.sh /start.sh

8.3.9 ENTRYPOINT

启动容器时执行的Shell命令,同CMD类似,只是由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序。

ENTRYPOINT ["/bin/bash", “-C”, “/start.sh”]
ENTRYPOINT /bin/bash -C ‘/start.sh’
PS:Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效。

8.3.10 VOLUME

指定容器挂载点到宿主机自动生成的目录或其他容器,例如:

VOLUME ["/var/lib/mysql"]
PS:一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。

8.3.11 WORKDIR

为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录,例如:

WORKDIR /data

**8.4 **使用脚本创建镜像

8.4.1 编写Dockerfile

创建目录

mkdir -p /export/docker/jdk8

将jdk-8u241-linux-x64.tar.gz上传到服务器(虚拟机)中的/export/docker/jdk8目录

创建文件Dockerfile

cd /export/docker/jdk8/
vi Dockerfile
#依赖镜像名称和id
FROM centos:latest
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JAR_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

8.4.2 构建镜像

docker build -t=‘jdk1.8’ .

注意后面的空格和点,不要省略,点表示当前目录

8.4.3 查看镜像是否构建完成

图片

8.5 自定义镜像mycentos

8.5.1 编写 Dockerfile

Hub默认centos镜像

图片

准备编写DockerFile文件vim Dockerfile

FROM centos:latest
MAINTAINER zhangjc
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

8.5.2 构建镜像

docker build -t mycentos:1.1 .

图片

图片

8.5.3 运行镜像

docker run -it mycentos:1.1

九、Docker私有仓库

在 Docker 中,当我们执行docker pull xxx的时候 ,它实际上是从 registry.hub.docker.com这个地址去查找,这就是Docker公司为我们提供的公共仓库。

在工作中,不可能把企业项目push到公有仓库进行管理。为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时允许搭建本地私有仓库。介绍registry、harbor两种私有仓库搭建。

9.1 registry搭建

9.1.1 搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

docker pull registry:2
docker run -di -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

浏览器访问http://node1.itcast.cn:5000/v2/_catalog,出现下面情况说明registry运行正常

图片

9.1.2 验证

现在通过push镜像到registry来验证一下。

查看本地镜像

docker images

要通过docker tag将该镜像标志为要推送到私有仓库:

docker tag nginx:latest localhost:5000/nginx:latest

通过docker push命令将nginx镜像push到私有仓库中:

docker push localhost:5000/nginx:latest

图片

访问 http://node1.itcast.cn:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:

图片

  • 下载私有仓库的镜像,使用如下命令:

docker pull localhost:5000/镜像名:版本号

docker pull localhost:5000/nginx:latest

9.2 Docker镜像推送到阿里云镜像仓库

首先需要有一个阿里云的账号

镜像仓库申请地址:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

图片

9.2.1 容器镜像服务控制台概览

图片

9.2.2 创建镜像仓库

图片

9.2.3 选择本地仓库

图片

9.2.4 点击管理

图片

图片

9.2.5 Docker登录阿里云容器镜像仓库

$ sudo docker login --username=xxx@aliyun.com registry.cn-hangzhou.aliyuncs.com

图片

9.2.6 推送创建的oracle11g_ centos7镜像到阿里云镜像仓库

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    352

    浏览量

    40670
  • 前端
    +关注

    关注

    1

    文章

    181

    浏览量

    17654
  • Docker
    +关注

    关注

    0

    文章

    443

    浏览量

    11669
收藏 人收藏

    评论

    相关推荐

    Dockerfile的最佳实践

    ”微服务一条龙“最佳指南-“最佳实践”篇:Dockerfile
    发表于 07-11 16:22

    Fuego快速入门指南

    Fuego快速入门指南只需几个简单的步骤即可在你的硬件上从Fuego运行测试。注意:这是快速入门指南。有关更多详细信息和说明,请参考:安装Fuego概述这些步骤的概述是:安装必备软件下
    发表于 12-17 07:00

    介绍一下linux环境下docker的使用流程

    Dockerfile 还有其他很多的指令,请在 Docker 查看指令的用法。FROMFROM 指令初始化一个新的构建阶段,并为后续指令设置基本镜像。因此,一个有效的Dockerfile 必须以 FROM
    发表于 04-27 15:03

    构建ARM64版本nacos docker镜像

    ,进入nacos-dockercd nacos-docker进入build目录cd build编辑Dockerfile文件,修改基础依赖centos版本vim Dockerfile将centos 版本
    发表于 06-16 14:29

    一文详解DockerFile基础知识

    DockerFile用来构建docker的镜像文件,可以理解为命令参数脚本。构建步骤编写一个DockerFile文件Docker build构建成为一个镜像docke run运行镜像
    发表于 09-15 15:54

    Docker入门指南

    •简化Arm硬件的应用程序开发•在开始之前在云中工作并在边缘部署本指南假设您熟悉容器概念。如果你不熟悉容器的概念,你可以在Docker入门中了解更多。 您还需要以下内容: •访问GitHub,以便您可
    发表于 08-02 06:09

    浅析Docker镜像本地存储机制及容器启动原理

    镜像各层内容及对应大小,每层对应着 Dockerfile 中的一条指令。Docker 镜像默认存储在 /var/lib/docker/《storage-driver》中,可通过 DOCKER
    发表于 10-19 14:17 2433次阅读

    docker存储驱动的工作原理

    Docker的存储驱动官方有介绍其工作原理,这里只是简单概括一下。Docker使用了层的概念,docker在构建镜像的时候,会逐行执行我们的Dockerfile中的每一行,每执行一行的
    的头像 发表于 06-26 11:49 4378次阅读

    基于geant4的docker安装方案

    linux支持好一些,不过这也正好贯彻了我们的一贯主张,坚定不移的走linux路线。 下面以10.3.0为例 从dockerfile构建 基本步骤 下载或克隆或者编写dockerfile docker构建
    的头像 发表于 06-02 12:51 2070次阅读

    全面详解Dockerfile文件

    Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。 一、 变量 变量
    的头像 发表于 09-22 15:38 1741次阅读

    docker技术入门与实战

    入门docker的首本书,系统化掌握容器技术栈
    发表于 06-09 14:38 0次下载

    信号的理念以及Dockerfile中ENTRYPOINT和CMD指令

    最近把 Docker 官方的 Docker Reference 文档又读了一遍,发现有些细节深究起来,还是有很多可挖的。针对写 Dockerfile ,大部分时候只要照葫芦画瓢,基本也不会有什么大的问题,但是如果再深入理解一下那
    的头像 发表于 06-12 16:42 7031次阅读

    Dockerfile的最佳实践

    随着应用的容器化、上云后,将伴随着 Docker 镜像的构建,构建 Docker 镜像成为了最基本的一步,其中 Dockerfile 便是用来构建镜像的一种文本文件,镜像的优劣全靠
    的头像 发表于 01-20 10:59 748次阅读
    <b class='flag-5'>Dockerfile</b>的最佳实践

    Dockerfile定义Docker镜像的构建过程

    了解Dockerfile Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。它以指令的形式描述了如何构建镜像,从基础镜像开始逐步添加配置、文件和依赖,最终形成我们所需
    的头像 发表于 09-30 10:22 2253次阅读

    如何使用dockerfile创建镜像

    Docker是一个开源的平台,用于快速构建、打包、部署应用程序的容器化工具。而Dockerfile是一个文本文件,包含了一组可自动化构建Docker镜像的指令。本文将详细介绍
    的头像 发表于 11-23 09:52 514次阅读