zoukankan      html  css  js  c++  java
  • 制作docker映像(一)--python应用程序

    本文以简单Python应用为例,介绍docker映像制作。

    1.创建Dockerfile

    工程目录结构如下:

    [lanyang@localhost docker_demo]$ mkdir -p myapp
    [lanyang@localhost docker_demo]$ cd myapp/
    [lanyang@localhost myapp]$ ll
    total 8
    -rw-rw-r--. 1 lanyang lanyang 108 Feb 15 16:30 Dockerfile
    -rw-rw-r--. 1 lanyang lanyang  34 Feb 15 16:20 say_hello.py
    

    Dockerfile文件内容如下:

    FROM python:3.6.4
    RUN mkdir -p /opt/app/myapp
    WORKDIR /opt/app/myapp
    COPY say_hello.py .
    CMD python say_hello.py
    

    FROM 基础映像,定制映像都是基于基础映像。会从远程仓库拉取。

    RUN 在Docker 编译环境中执行指定的命令。

    WORKDIR 指定工作目录。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    COPY 从上下文目录中复制文件到容器的指定目录。say_hello.py内容见下文。

    CMD 指定容器默认的执行命令。Dockerfile只允许指定一次CMD命令,如果使用多个CMD会覆盖之前的所有的指令,只有最后一个指令生效。一般来说,这是Dockerfile的最后一条指令。
    另外,docker run会覆盖CMD命令。

    CMDRUN的区别是:RUN只在创建映像时执行一次,先于CMD

    CMD会在每次启动容器时执行的。
    这里,执行python脚本。

    say_hello.py文件

    文件内容如下:

    print("Hello python from Docker!")
    

    2.构建映像

    接着,使用上面创建的Dockerfile构建映像。

    命令如下:

    [lanyang@localhost myapp]$ docker build -t myapp .
    Sending build context to Docker daemon  3.072kB
    Step 1/5 : FROM python:3.6.4
     ---> 07d72c0beb99
    Step 2/5 : RUN mkdir -p /opt/app/myapp
     ---> Using cache
     ---> 69bfc2675907
    Step 3/5 : WORKDIR /opt/app/myapp
     ---> Using cache
     ---> 809c8f410c2b
    Step 4/5 : COPY say_hello.py .
     ---> cfa9e03f91bf
    Step 5/5 : CMD python say_hello.py
     ---> Running in 5e7fd488c6b9
    Removing intermediate container 5e7fd488c6b9
     ---> 61dbd13df63f
    Successfully built 61dbd13df63f
    Successfully tagged myapp:latest
    

    其中,

    -t 给构建映像打标签,标签格式name:tag, 这里name指定为myapp。tag不指定,会使用默认latest

    . 上下文路径,会将路径下的所有文件打包到docker映像。
    如果没有指定,那么默认上下文路径就是 Dockerfile 所在的位置。

    3.测试映像

    使用上面常见的映像启动一个容器:

    [lanyang@localhost myapp]$ docker run -d --name myapp-test1 myapp
    a0a6e7d7f6df5abcb16f5ecc70bc43cef0b2dc9d75222fbeaa1fcf08288b1cd2
    

    其中,
    myapp是映像名称。

    -d 表示后台运行容器, 并打印container id。

    --name 指定容器名称, 这里为myapp-test1

    查看容器是否启动

    [lanyang@localhost myapp]$ docker container ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    这里容器启动后,只打印一条日志,就退出了。
    执行查看命令要迅速。

    查看容器输出结果

    [lanyang@localhost myapp]$ docker logs myapp-test1
    Hell world from Docker!
    

    容器创建后,可以使用docker start启动容器, 并使用-i参数,让容器直接输出到当前终端:

    [lanyang@localhost ~]$ docker start myapp-test1 -i
    Hell python from Docker!
    [lanyang@localhost ~]$ 
    

    4.参考

    Docker Hub

  • 相关阅读:
    Linux性能监测:CPU篇
    Linux性能监测:监测目的与工具介绍
    敏捷开发学习笔记
    Sonar+Hudson+Maven构建系列之三:安装Hudson
    Sonar+Hudson+Maven构建系列之二:迁移Sonar
    Sonar+Hudson+Maven构建系列之一:安装Sonar
    nohup之no hang up, kill, ps -ef, ps aux, grep
    Sonar相关资料
    自动、手动同步FishEye, JIRA的联系人信息
    SOAPFaultException
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/12313743.html
Copyright © 2011-2022 走看看