首页 > 其他分享 >dockerfile构建私有镜像

dockerfile构建私有镜像

时间:2023-08-22 19:31:59浏览次数:37  
标签:容器 私有 指定 -- 指令 构建 镜像 dockerfile

一、dockerFile基础

1、镜像搭建流程

1、编写一个dockerfile文件

2、docker build 构建成为一个镜像

3、docker run运行镜像

4、docker push发布镜像(DockerHub、阿里云镜像仓库)

2、dockerFile文件构建步骤

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序执行

3、# 表示注释

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

3、dockerFile完整执行流程

dockerfile构建私有镜像_docker

Dockerfile 是软件的原材料。

Docker 镜像是软件的交付品。

Docker 容器则可以认为是软件镜像的运行态,即根据镜像运行的容器实例

DockerFile:dockerfile 涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务以及内核进程打交道的时候,还需要考虑如何设计 namespace 的权限控制)等等。

Dockerlmages:通过DockerFile构建生成的镜像,最终发布和运行的产品。

Docker容器:容器就是镜像运行起来提供服务的。


二、dockerFile参数

DockerFile的命令

FROM

指定基础镜像。

MAINTAINER

指定维护着信息,已过期,可以使用 LABEL xxx=yyy 来代替。

RUN

镜像构建过程中运行的命令。

CMD

指定启动容器时默认的命令。

ENTRYPOINT

指定镜像的默认入口以及运行命令 。

EXPOSE

声明镜像内服务监听的端口,一般而言,此指令只有指导意义,如:SpringBoot 项目的端口是 8080 ,而指定的 EXPOSE 是 8090 ,当然依据 8080 了。

ENV

指定环境变量,可以在 docker run 的时候使用 -e 改变。

ADD

复制指定的 src 路径下的内容到容器中的 dest 路径下,src 可以为 url 会自动下载,也可以为 tar 文件,会自动解压。

COPY

复制本地主机的 src 路径下的内容到镜像中的 dest 路径下,但是不会自动解压等等。

LABEL

指定生成镜像的元数据标签信息。

VOLUME

创建数据卷挂载点。

USER

指定运行容器时的用户名或 UID 。

WORKDIR

配置工作目录,为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。

ARG

指定镜像内使用的参数(如版本号信息等),可以在 docker build 的时候,使用 --build-args 改变。

OBBUILD

配置当创建的镜像作为其他镜像的基础镜像是,所指定的创建操作指令。

STOPSIGNAL

容器退出的信号值。

HEALTHCHECK

健康检查。

SHELL

指定使用 shell 时的默认 shell 类型。

1、构建镜像文件

dockerfile构建私有镜像_docker_02

FROM centos:7.9.2009: 这是基础镜像的指令,指定了构建镜像所使用的基础镜像,该镜像为 CentOS 7.9.2009 版本。

WORKDIR /usr/local/java: 设置工作目录为 /usr/local/java

RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ... yum -y install curl: 使用 RUN 指令安装依赖项,包括更新系统、安装 wget、glibc.i686、vim、net-tools 和 curl。

2、 docker build  --no-cache --force-rm -t  mycentos .

--no-cache: 禁用构建过程中的缓存,每一步都会强制重新构建,适用于确保使用最新的依赖项或避免之前的缓存产生的问题。

--force-rm: 在构建过程中删除任何已创建的临时容器。这可以确保每次构建都从干净的环境开始,并且避免残留的临时容器占用空间。

-t 镜像名称:TAG: 指定要构建的镜像的名称和标签。请将 "镜像名称" 替换为你想要的实际镜像名称,将 "TAG" 替换为你想要的标签。例如:-t my-java-image:latest

.: 指定 Dockerfile 的路径为当前目录(当前目录即为 .

dockerfile构建私有镜像_docker_03

3、FROM

指定基于 alpine 镜像的 latest 标签FROM alpine


指定基于 alpine 镜像的 3.14 版本标签FROM alpine:3.14

使用自己构建的基础镜像,并指定别名为 baseFROM mybaseimage AS base

在构建镜像时,Docker 将基于指定的基础镜像来创建你的镜像


4、label

LABEL 用来标注镜像的一些说明信息,常常用来指定维护者的信息

下面的这种格式是可以的

LABEL multi.label1="value1" multi.label2="value2" other="value3"


5、run

每个 RUN 指令都会在一个新的镜像层中执行,并在该层中创建新的容器文件系统

在容器内执行 shell 命令RUN echo "Hello, World!"

安装软件包RUN apt-get update && apt-get install -y package-name

运行脚本文件RUN chmod +x script.sh RUN ./script.sh

执行可执行文件RUN ./myapp

设置环境变量RUN export MY_VAR=myvalue


6、ARG

ARG 指令用于定义构建参数,它允许你在构建过程中传递变量。构建参数可以在构建过程中由 docker build 命令传递,也可以在 Dockerfile 中使用默认值指定镜像内使用的参数(如版本号信息等),可以在 docker build 的时候,使用 --build-args 改变。

# 定义构建参数,指定默认值

ARG version=latest

ARG user=myuse

# 构建过程中传递构建参数

 docker build --build-arg version=1.0 --build-arg user=admin .

7、ENV

ENV 指令用于设置环境变量。环境变量可以在容器运行时被访问,用于配置应用程序或传递参数

设置单个环境变量 ENV MY_VAR myvalue

设置多个环境变量  ENV KEY1=value1 KEY2=value2 KEY3=value3

使用构建参数设置环境变量  ARG version ENV APP_VERSION=$version

可以使用 docker run -e name=value 修改 ENV 定义的环境变量


8、ADD

ADD 指令用于将本地文件或远程文件复制到容器中。它可以处理文件、目录、URL 

ADD 指令有自动解压缩功能。如果源文件是一个压缩文件,Docker 将自动解压缩它,并将解压缩后的内容复制到目标位置。

复制单个文件到容器中 ADD myfile.txt /app/myfile.txt

复制目录到容器中 ADD mydir /app/mydir

从 URL 下载文件到容器中  ADD https://example.com/file.txt /app/file.txt


9、COPY

COPY 指令用于将本地文件或目录复制到容器中

COPY 是容器中要复制到的目标路径。

复制单个文件到容器中  COPY myfile.txt /app/myfile.txt

复制目录到容器中 COPY mydir /app/mydir

如果目标路径 <dest> 不存在,则 Docker 会自动创建该目录。

如果 <src> 是一个目录,Docker 将复制整个目录到 <dest>,包括目录中的所有文件和子目录。

如果 <src> 是一个文件,Docker 将复制该文件到 <dest>

10、user

USER 指令用于设置运行容器时的用户名或用户 ID如果没有使用 USER 指令,默认情况下容器将以 root 用户身份运行

切换到非特权用户USER myuser  根据用户 ID 切换用户USER 1000 

11、workdir

WORKDIR 指令用于设置容器中的工作目录,即在容器中执行命令时的当前路径# 设置工作目录为 /app WORKDIR /app

# 设置工作目录为绝对路径 WORKDIR /path/to/mydir

# 使用相对路径设置工作目录 WORKDIR relative/dir

使用 WORKDIR 指令设置容器中的工作目录。这样,在容器中执行命令时,会自动在设置的工作目录下进行操作


12、VOLUME


volumeVOLUME 指令用于在容器中创建一个或多个挂载点,让容器可以持久化存储数据,同时也可以与宿主机或其它容器进行数据共享

# 创建一个挂载点 VOLUME /data # 创建多个挂载点 VOLUME /config /logs

VOLUME 指令创建的挂载点在容器中是空目录,但是如果在启动容器时使用了 -v 或 --mount 选项来指定了宿主机路径或数据卷容器,那么该挂载点将会映射到宿主机或数据卷容器的路径上。

容器中的数据将持久保存在挂载点中。因此,当容器被删除时,数据不会被删除,可以被其他容器或宿主机访问。

可以使用 docker run 命令的 -v 或 --mount 选项来指定宿主机路径或数据卷容器,并将其挂载到 VOLUME 指令创建的挂载点上

13、expose

 EXPOSE 指令用于声明容器运行时将监听的网络端口。

声明单个端口EXPOSE 8080

声明多个端口EXPOSE 80 443
声明端口同时指定协议EXPOSE 8080/tcp 8080/udp

EXPOSE 指令仅仅是一种标记,告诉用户容器将监听这些端口,而不会进行端口映射。

可以使用 docker run 命令的 -p 或 --publish 选项将主机的端口映射到容器中声明的端口上


14、CMD

CMD 指令用于设置容器启动时默认运行的命令和参数

# 使用 exec 格式 CMD ["nginx", "-g", "daemon off;"] 

 # 使用 shell 格式 CMD nginx -g "daemon off;"


#模板镜像

FROM centos:7.9.2009

# 工作目录

WORKDIR /usr/local/java

# 安装依赖

RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 \

   && yum clean all \

   && yum makecache \

   && yum -y update \

   && yum -y install wget \

   && yum -y install glibc.i686 \

   && yum -y install vim \

   && yum -y install net-tools \

   && yum -y install curl

# 下载 JDK 并解压  

RUN curl https://files-cdn.liferay.com/mirrors/download.oracle.com/otn-pub/java/jdk/8u121-b13/jdk-8u121-linux-x64.tar.gz | tar -xzC /usr/local/java/ --strip-components 1 \

   && ls -lah /usr/local/java/

# 设置环境变量

ENV JAVA_HOME=/usr/local/java

ENV JRE_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

# 启动命令

CMD ["java","-version"]



标签:容器,私有,指定,--,指令,构建,镜像,dockerfile
From: https://blog.51cto.com/u_14869798/7192266

相关文章

  • 用一个示例来学习DockerFile
    在Docker的世界里,我们经常会听到Dockerfile这个词。那么,什么是Dockerfile?它如何工作?本文将简要介绍Dockerfile的基本概念,原理以及一些常用的Dockerfile命令。什么是Dockerfile?Dockerfile是一个包含了一组命令的文本文件,这些命令可以被Docker解析并依此构建出一个新的Docker镜像......
  • 企业级私有化部署即时通讯,完美替代SaaS平台
    在数字化转型的时代,企业越来越需要安全、高效和可扩展的解决方案来管理其运营。作为通用办公行业的领军品牌,WorkPlus在企业级私有化部署领域成为改变者。凭借其尖端功能和全面的功能性,WorkPlus提供了传统的软件即服务(SaaS)平台的完美替代方案。本文将深入探讨WorkPlus为企业带来的高......
  • dockerfile搭建activemq5.16.5
    dockerfile搭建activemq5.16.5搭建环境最小化的centos7.5家目录下完成如下操作环境构建脚本#!/bin/bash#authorbygwl###2023-02-10docker安装配置yuminstallwgetntpdatetelnetvimnet-toolsbash-completiongccgcc-c++make-ysed-i.bak's/SELINUX=enfor......
  • Dockerfile 构建镜像
    目录一、构建Apache镜像1.创建工作目录2.编辑Dockerfile脚本3.编辑run执行脚本4.准备网站页面5.生成镜像6.新镜像运行容器7.测试二、构建SSH镜像1.创建工作目录2.创建Dockerfile脚本3.生成镜像4.启动容器并使用密码登录5.更改密码三、构建Systemctl镜像1.创建......
  • Dockerfile创建镜像
    Dockerfile是用于定义和构建Docker镜像的重要工具,它使得镜像的构建过程更加可控、可重复和可自动化,为应用程序的打包、分发和部署提供了便利性和灵活性。目录一、创建镜像方法二、Dockerfile概述三、Dockerfile操作指令 四、Dockerfile案例五、总结  一、创建镜像方......
  • 国内无法下载k8s镜像的解决办法
    关于通过各种方法下载k8s相关镜像的方法总结如下:1.使用Azure中国镜像站,目前限制只能“AzureChinaIP”可用,不再对外提供服务,此路不通。2.直接使用mirrorgooglecontainers用户同步到DockerHub的镜像。用户mirrorgooglecontainers在DockerHub上同步了一些相应的google镜像,可以直......
  • [超详细] GraalVM打包含有JNI的本地镜像
    GraalVM是一种高性能、多语言通用虚拟机和编译器技术。它由Oracle开发并开源,旨在为不同的编程语言和应用场景提供统一的运行时环境和编译器平台。以下是GraalVM的一些主要特点和功能:多语言支持:GraalVM支持多种编程语言,包括Java、JavaScript(Node.js)、Python、Ruby、R、C......
  • 快解析内网穿透便捷访问内网私有云
    快解析内网穿透软件的首要优势在于其不改变企业现有IT架构的特点。传统的内网穿透解决方案常常需要对企业网络进行重构,这不仅增加了工作量,还可能带来不稳定的因素。而快解析则巧妙地绕过了这一问题,让您能够在保持原有网络设备和配置的前提下,快速实现内网穿透,也不需要公网IP或迁移数......
  • 应用部署,dockerfile
    目录1容器操作2应用部署2.1mysql部署2.2redis2.3nginx3迁移与备份4Dockerfile#1docker启动,停止,查看状态命令 systemctlstartdockersystemctlstopdockersystemctlstatusdockerdockerinfo#查看详情systemctlenabledocker#开机自启动......
  • 如何发布一个镜像到私有的docker仓库
    1拉取dockerregistry镜像我们先启动docker服务,然后使用docKerpullregistry拉取一个镜像到本地。2看看这个镜像多大3启动registry启动registry实际上就是启动一个容器,这个registry其实和hub.docker.com是一样的功能,只不过这个私有的registry是供给公司内部使用,不对外访问罢了。使......