关于docker:如何使用-Dockerfile-构建-Docker-镜像

45次阅读

共计 3092 个字符,预计需要花费 8 分钟才能阅读完成。

在 docker hub 有成千上万的 docker 镜像,咱们能够轻松的应用这些镜像构建容器。但在某些状况和用例中,咱们心愿在 docker 镜像中进行一些配置或更改,而这些更改应该在咱们运行容器时呈现。这能够通过应用 Dockerfile 构建 docker 镜像来实现。

Dockerfile 是一个文本文件,其中蕴含关键字和一组 Linux 命令,当咱们构建 Docker Image 时,这些命令会主动执行。应用 Dockerfile 创立 docker 镜像相似于虚拟化世界的模板概念。

在这篇文章中,咱们将介绍如何从 Dockerfile 逐渐构建 docker 镜像。让咱们假如咱们想要构建 Jboss EAP docker 镜像。上面列出了一些通常在 Dockerfile 中应用的关键字

FROM

FROM 关键字指定将用于构建 Docker 镜像的根底镜像名称,Docker 命令将在本地搜寻该映像,如果在本地注册表中没有找到,那么它将尝试从 Docker hub 注册表中获取它。

Example:

FROM  jboss-eap:7

MAINTAINER

MAINTAINER 关键字指定了保护 Docker 镜像的社区或所有者的名称。

Example:

MAINTAINER  Linuxtechi Team <info@linuxtechi.com>

RUN

在创立 Docker 镜像时,将执行 RUN 关键字前面提到的命令

Example :

RUN  apt-get update
RUN apt-get install apache2 -y
RUN echo 'Web site Hosted inside a container' > /var/ww/html/index.html
RUN echo 'apache2ctl start' >> /root/.bashrc

WORKDIR

WORKDIR 用于定义容器的工作目录,用于执行 COPY、ADD、RUN、CMD 和 ENTRYPOINT 指令。

Example:

WORKDIR /opt

CMD

当容器从 docker 镜像启动时,CMD 关键字前面提到的命令将被执行

Example:

CMD /bin/bash
CMD wget {url}

每当咱们应用多个 CMD 关键字时,最新的关键字会取得首选项。如果您留神到运行容器时,咱们会因 CMD 关键字(CMD /bin /bash)而取得 bash shell。

ENTRYPOINT

ENTRYPOINT 相似于 CMD, ENTRYPOINT 之后的命令将承受来自 CMD 的参数,或者换句话说,咱们能够说 CMD 是 ENTRYPOINT 的参数。ENTRYPOINT 中的命令将始终被执行。

Example:

ENTRYPIONT ["curl"]
CMD ["www.google.com"]

ENV

应用 ENV 关键字,咱们能够依据需要设置环境或 shell 变量,假如我想构建 Docker 映像,我将装置 java,并须要设置 java 门路,这能够通过应用 ENV 关键字来实现。

Example:

ENV JAVA_HOME= /usr/jdk/jdk{version}

VOLUME

通过 VOLUME 关键字,咱们能够将 Docker 主机上的文件夹附加到容器上。

Example:

VOLUME  /opt/storage  /data

EXPOSE

通过 EXPOSE 关键字,咱们能够从容器中公开应用程序端口

Example:

EXPOSE 8080

COPY

应用 COPY 关键字,咱们能够将文件从 docker dost 复制到容器中

Example:

COPY jboss-eap-7.2.0.zip   /opt

ADD

ADD 关键字的性能简直相似于 COPY。ADD 反对两个附加个性,比方咱们能够应用 URL 而不是本地文件或目录,以及 tar 文件能够间接从源文件提取到指标文件。

Example :

ADD ./jdk-10.0.2.1-linux-x64_bin.tar.gz /usr/local/

Note: To view the keywords and command that are being used for building docker image use“docker history”command. Let’s see the keywords and commands of a docker image mariadb:latest

留神: 要查看用于构建 docker 映像的关键字和命令,请应用 docker history 命令。让咱们看看 docker 映像 mariadb:latest 的关键字和命令

$ docker history mariadb:latest

在下面的输入中,如果命令中没有提到关键字,那么这些命令将以 RUN 关键字执行。

让咱们开始应用 Dockerfile 构建 docker 映像的步骤。

(1) 创立 Dockerfile

首先在用户的主目录下创立一个名为 mycode 的文件夹,而后创立 Dockerfile

$ mkdir mycode
$ cd mycode/
$ touch Dockerfile

留神: docker 文件的名称必须是 Dockerfile,如果咱们不遵循这个约定,咱们的 docker 构建命令将不起作用。

(2) 在 Dockerfile 中增加关键字和命令

用 vi 编辑器关上 Dockerfile 并增加以下关键字

$ vi Dockerfile

FROM jboss-eap:7
RUN mkdir -p /opt/jboss
COPY ./jboss-eap-7.2.0.zip /opt/jboss/
ENV JBOSS_HOME=/opt/jboss/jboss-eap-7.2
WORKDIR /opt/jboss/
RUN unzip -qq jboss-eap-7.2.0.zip
RUN $JBOSS_HOME/bin/add-user.sh admin Jobss@123# --silent
EXPOSE 8080 9990 9999
ENTRYPOINT ["/opt/jboss/jboss-eap-7.2/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

存并退出文件

留神: 不要遗记将 jboss-eap-7.2.0.zip 放在 mycode 目录中,这个压缩包能够从上面的 url 下载

https://developers.redhat.com…

(3) 应用 Docker Build 命令构建镜像

From mycode folder, run the beneath docker build command, -t option is used to set tag name of docker image. In example below,I am setting tag as“jboss-eap:v1

在 mycode 文件夹下运行 docker build 命令,-t 选项用于设置镜像的标签名称。

$ docker build -t jboss-eap:v1 .

下面的输入确认映像曾经胜利构建。下一步,尝试应用新建的映像运行 jboss 容器。

4) 验证和测试 Docker 映像

让咱们看看新建的 docker 映像在本地映像库中是否可用,运行以下命令

$ docker images

当初应用 docker 映像 jboss-eap:v1 运行一个容器

$ docker run -d -it --name=jboss-eap -P jboss-eap:v1
$ docker ps

当初应用上面的 url 拜访 jboss 应用程序

http://<Docker-Host-IPAddress>:49154

应用咱们在 Dockerfile 中定义的雷同用户名和用户名

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)

正文完
 0