docker run设置python环境变量_运维


文章目录

  • 一、什么是DcokerFile
  • 二、DockerFile的基本结构
  • 三、DockerFile的构建指令
  • 四、实战



在之前的文章中,了解到了Docker的基本知识以及最为炫酷的Docker-compose。我想你不会仅仅满足于此,学习知识的过程犹如吸毒,越学越带劲。

接下来我们以最为通俗的话去理解DockerFile。实现容器化技术的更近一步深入。

一、什么是DcokerFile

dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。可以理解为是用来创建镜像的脚本文件。

因此:我们可以知道,一个新容器的构建有以下步骤:

  • 1、编写DockerFile文件
  • 2、docker build 构建镜像
  • 3、docker run

二、DockerFile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

首先来定制一个简单nginx镜像

(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

docker run设置python环境变量_容器_02

这样,我们的Dockerflile文件就编写完成了,接着就通过 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签):

docker build -t nginx:v3 .

docker run设置python环境变量_nginx_03

这样一个简单的nginx镜像就创建完成。

三、DockerFile的构建指令

上节,简单的说明了构建镜像的过程,其实在Dockerfile的编写的根据自己的需要,进行各种自定义操作。

dockerfile的指令:

  FROM:指定基础镜像(FROM是必备的指令,并且必须为第一条指令)。

  RUN: 用来执行命令行命令。其基本格式:

      shell格式: RUN  <命令>  ,输入在bash环境中的命令即可,一个dockerfile允许使用RUN不得超过127层,所以,使用一次RUN, 使用 ‘ \ ’ 换行,使用‘ && ’执行下一条命令。一般使用此种格式;

      exec格式: RUN  <"可执行文件", "参数1", "参数2">,此种方式像是函数调用中的格式;

  COPY:  复制文件。 其基本格式:

      格式1:COPY <源路径>...<目标路径>

      格式2:COPY [“<源路径1>”,....."<目标路径>"]

  ADD: 更高级的复制文件,在COPY的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用RUN解压;

  CMD:容器启动命令。其基本格式:

      shell格式: CMD <命令>

      exec格式: CMD ["可执行文件", "参数1", "参数2"...]

      参数列表格式: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数

  ENTRYPOINT: 入口点。其基本格式分为exec和shell,

      ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。当指定了ENTRYPOINT后,CMD的含义就发生了改变,不在是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了:  <ENTRYPOINT> "<CMD>"

  ENV: 设置环境变量。(都可以使用这里使用的变量)其基本格式:

      格式1:ENV <key> <value>

      格式2:ENV <key1>=<value1> <key2>=<value>...

  ARG: 构建参数。构建参数和ENV的效果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在将来容器运行时是不存在的。其基本格式:

      格式1: ARG <参数名> [=<默认值>]

      格式2: 该默认值可以在构建命令 docker build  中用 --build-arg <参数名>=<值> 来覆盖

  VOLUME: 定义匿名卷。 其基本格式:

      格式1: VOLUME ["<路径1>", "<路径2>"...]

      格式2: VOLUME <路径>

  EXPOSE:  暴露端口。EXPOSE指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式:

      格式1: EXPOSE <端口1> [<端口2>...]

  WORKDIR: 指定工作目录。其基本格式:

      格式1: WORKDIR <工作目录路径>

  USER: 指定当前用户。USER是帮助你切换到指定用户。 其基本格式:

      格式1: USER <用户名>

  HEALTCHECK: 健康检查,判断容器的状态是否正常。 其基本格式:

      格式1: HEALTCHECK [选项] CMD <命令> :设置检查容器健康状况的命令

      格式2: HEALTCHECK NONE: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检

Dockerflie的命令是很多的,不过用熟悉了就非常nice了。

简要版命令

FROM

基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER

镜像维护者的姓名混合邮箱地址

RUN

容器构建时需要运行的命令

EXPOSE

当前容器对外保留出的端口

WORKDIR

指定在创建容器后,终端默认登录的进来工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY

类似ADD,拷贝文件和目录到镜像中

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!

ENTRYPOINT

指定一个容器启动时要运行的命令!和CMD一样

ARG

构建时指定的一些参数

HEALTHCHECH

健康检查

USER

为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户

总结的构建流程如下:

docker run设置python环境变量_nginx_04

四、实战

通过Dockerfile来部署datax容器

首先,datax运行需要python2.x和jdk1.8。

上传jdk1.8 tar包已经datax安装包到本地服务器

docker run设置python环境变量_运维_05

在当前目录下编辑Dockerfile文件

  • 1、编写Dockerfile
FROM centos/python-27-centos7
//安装jdk
ADD jdk-8u221-linux-x64.tar.gz /opt/local
ENV JAVA_HOME /opt/local/jdk1.8.0_221
ENV PATH $JAVA_HOME/bin:$PATH
// 添加并解压datax文件到/opt/local 目录
ADD datax.tar.gz /opt/local/
// 设置运行的工作目录,可不添加,运行中使用 docker -w 指定
WORKDIR /opt/local/datax
ENTRYPOINT ["bash"]
  • 2、构建
格式命令:在当前目录下-> docker build -t="镜像名称:TAG" .
. 表示当前目录。

docker build -t="datax_python2" .

这个命令必须在Dockerfile文件所在的目录下运行:

docker run设置python环境变量_docker_06

查看本地的镜像,可以看到刚刚创建到的镜像:

docker run设置python环境变量_nginx_07

  • 3、运行

通过该镜像创建容器:

docker run -it --name dataxpython2 datax_python2