测试用到的python文件:

#!/usr/bin/env python3
#conding: utf-8
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import sys
import socket def hostname():
return socket.gethostname() def ipa():
return socket.gethostbyname(hostname()) data = {hostname(): ipa()} def httpserver(ipadd='127.0.0.1',sport=8888):
host = (ipadd, sport)
server = HTTPServer(host, Resquest)
server.serve_forever() class Resquest(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(data).encode()) if len(sys.argv) == 1:
httpserver()
elif len(sys.argv) == 3:
httpserver(sys.argv[1],eval(sys.argv[2]))

方式一

1、方式一所用到的Dockerfile文件

FROM centos:7
MAINTAINER "1072051214@qq.com"
COPY CentOS-Base.repo epel.repo /etc/yum.repos.d/
RUN yum install python3 net-tools -y && \
yum clean all
COPY ["app.py","/tmp"] ENTRYPOINT ["python3","/tmp/app.py"] CMD ["localhost","8888"]

  在该Dockerfile文件中,ENTRYPOINT中定义了需要在镜像中执行的py文件;而CMD定义了py文件所需要的默认参数;

2、构建镜像

  在Dockerfile存在的同级目录下放入构建所需的app.py、CentOS-Base.repo、epel.repo文件;

  在Dockerfile目录下执行构建命令

docker build -t zhang/python:v0.3 ./

3、测试效果

#查看镜像
[root@master dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zhang/python v0.3 ef2f8644ab79 6 hours ago 278 MB
#前台运行,先测试默认值是否生效
[root@master dockerfile]# docker run --rm zhang/python:v0.3 #再开一个终端
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb38dedce26d zhang/python:v0.3 "python3 /tmp/app...." 2 minutes ago Up 2 minutes reverent_kowalevski
[root@master ~]# docker exec -it cb38dedce26d /bin/bash
[root@cb38dedce26d /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN
#前台运行,测试传递参数进去是否生效
[root@master dockerfile]# docker run --rm zhang/python:v0.3 172.17.0.3 8080 #再开一个终端
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f43e54f80660 zhang/python:v0.3 "python3 /tmp/app...." 24 seconds ago Up 24 seconds laughing_torvalds
[root@master ~]# docker exec -it f43e54f80660 /bin/bash
[root@f43e54f80660 /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.17.0.3:8080 0.0.0.0:* LISTEN

方式二

1、方式二所用到的Dockerfile文件

FROM centos:7
MAINTAINER "1072051214@qq.com"
COPY CentOS-Base.repo epel.repo /etc/yum.repos.d/
RUN yum install python3 net-tools -y && \
yum clean all
COPY ["app.py","/tmp"] ENV HOST="localhost"
ENV PORT="8888" CMD python3 /tmp/app.py $HOST $PORT

  在该Dockerfile文件中,用ENV定义变量默认值;用CMD定义要运行的py文件;

2、构建镜像

  在Dockerfile存在的同级目录下放入构建所需的app.py、CentOS-Base.repo、epel.repo文件;

  在Dockerfile目录下执行构建命令

docker build -t zhang/python:v0.6 ./

3、测试效果

#查看镜像
[root@master dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zhang/python v0.6 ccb36fd6ad19 2 hours ago 278 MB
zhang/python v0.3 ef2f8644ab79 6 hours ago 278 MB
#前台运行,先测试默认值是否生效
[root@master dockerfile]# docker run --rm zhang/python:v0.6 #再开一个终端
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f577e9f651bb zhang/python:v0.6 "/bin/sh -c 'pytho..." About a minute ago Up About a minute nifty_cray
[root@master ~]# docker exec -it f577e9f651bb /bin/bash
[root@f577e9f651bb /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN
#前台运行,测试传递参数进去是否生效(-e和--env都可以)
[root@master dockerfile]# docker run --rm --env HOST=172.17.0.3 --env PORT=8085 zhang/python:v0.6 #再开一个终端
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c631fd54ad0 zhang/python:v0.6 "/bin/sh -c 'pytho..." 35 seconds ago Up 34 seconds eager_yalow
[root@master ~]# docker exec -it 0c631fd54ad0 /bin/bash
[root@0c631fd54ad0 /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.17.0.3:8085 0.0.0.0:* LISTEN

向docker镜像中传递变量的两种方式的更多相关文章

  1. hive 传递变量的两种方式

    在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...

  2. js中使用对象变量的两种方式

    function Person(){ this.a=function(){ window.alert("a"); } this.b=function(){ window.alert ...

  3. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  4. jQuery中开发插件的两种方式

    jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...

  5. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  6. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

  7. 数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式

    https://zhuanlan.zhihu.com/p/64418286 假设有一组数据, 已知每一个产品贡献的利润,如果要计算前几名产品的贡献利润总和,或者每一个产品和利润更高产品的累计贡献占总体 ...

  8. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  9. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

随机推荐

  1. k8s入门之Secret(十)

    Secret与ConfigMap都是用来存储配置信息的,不同之处在于ConfigMap是明文存储的,而Secret用来保存敏感信息,如:密码.OAuth令牌,ssh key等等.Secret常用有三种 ...

  2. 面试官:ElasticSearch是什么,它有什么特性与使用场景?

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,我本以为我跟面试我的 ...

  3. 分布式下Session一致性问题

    一.Session一致性问题 1.1 什么是Session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分 ...

  4. Spring 源码(16)Spring Bean的创建过程(7)属性填充

    知识回顾 上一篇介绍了Spring中三级缓存的singletonObjects.earlySingletonObjects.singletonFactories,Spring在处理循环依赖时在实例化后 ...

  5. 好客租房16-jsx中的列表渲染

    如果要渲染一组数组 应该使用数组的map方法 注意:渲染列表时候添加key属性 key属性的值要保持唯一 原则:map()遍历谁 就给谁添加key属性 尽量避免索引号作为key //导入react i ...

  6. 【原创】项目五w1r3s.v1.0

    实战记录 1.nmap信息枚举 1)C段扫描 nmap -sP 192.168.186.0/24 2)扫描全端口信息 nmap -p- 192.168.186.143 3)扫描版本信息 nmap -p ...

  7. vue内容拖拽放大缩小

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 4.使用CFileDialog打开文件对话框,获得文件路径 -windows编程

    引言:没想到2022年还有很多工业软件公司依然使用MFC,微软也一直在更新MFC的库,这次使用MFC封装的CFileDialog类,写一个获得选定文件路径,名称,扩展名的程序. 个人技术博客(文章整理 ...

  9. 1.1 操作系统的第一个功能——虚拟化硬件资源 -《zobolの操作系统学习札记》

    1.1 操作系统的第一个功能--虚拟化硬件资源 目录 1.1 操作系统的第一个功能--虚拟化硬件资源 问1:操作系统一般处于计算机系统的哪一个位置? 问2:管理硬件资源为什么要单独交给操作系统? 问3 ...

  10. Javaweb_Tomcat配置

    1.基本概念 1.1 前言 web开发: web,网页的意思 静态web html,css 提供给所有人看的数据始终不会发生改变 动态web 淘宝,几乎所有的网站 提供给所有人看的数据始终会发生变化, ...