测试用到的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. 实战 target 选择器,解放生产力!

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  2. Git命令行提交代码步骤

    先进入对应的项目目录 1.拉取服务器代码,避免覆盖他人代码 git pull 2.查看当前项目中有哪些文件被修改过 git status 具体状态如下: 1:Untracked: 未跟踪,一般为新增文 ...

  3. python之装饰器补充与递归函数与二分查找

    目录 多层装饰器 有参装饰器 递归函数 基本演示 斐波那契数列 总结 小拓展 算法之二分法 简介 举例 总结 多层装饰器 我们已经知道了语法糖的作用是将装饰对象自动装饰到装饰器中,一个语法糖的应用我们 ...

  4. 在 Git 提交信息中使用 Emoji

    Gitmoji 旨在解释如何在 Git 提交消息时使用表情符号.在提交信息时使用表情符号,可以更容易地识别提交的目的或意图. Emoji 列表 :优化项目结构 / 代码格式 :art: ️ :性能提升 ...

  5. js 动画补间 Tween

    1 /* RunningList (触发过程中可以安全的删除自己) 2 如果触发过程中删除(回调函数中删除正在遍历的数组), 不仅 len 没有变(遍历前定义的len没有变, 真实的len随之减少), ...

  6. CF1682C. LIS or Reverse LIS?

    题意:给\(n\)个数,问你能构出严格上升子序列长度和下降子序列长度最小值的最大值. 思路: 如果一个数出现至少两次,ans++. 统计出现一次的个数,因为再最长上升子序列中,只能有一个值能贡献到下降 ...

  7. 「JOISC 2019 Day4」蛋糕拼接 3

    loj 3039 NKOJ Description \(n\)个蛋糕,每个蛋糕有\(w_i,h_i\).选\(m\)个蛋糕满足\(\sum\limits_{j=1}^mw_{k_j}-\sum\lim ...

  8. AcWing 4378. 选取数对

    y总分析:这种题(我也不知道说的是哪种题hh)一般解法为贪心或dp,而本题用的是dp. 其实个人感觉题目不是很严谨,从y总讲解和题解分析得知各个数对区间是不能重叠的,但是题目使用的是≤,感觉数对的区间 ...

  9. 工具分享:清理 Markdown 中没有引用的图片

    前言: 之前,我写笔记的工具一直都是 notion,而且没有写博客的习惯.但是一是由于 notion 的服务器在国外,有时候很不稳定:二是由于 notion 的分享很不方便,把笔记分享给别人点开链接之 ...

  10. 『忘了再学』Shell基础 — 29、AWK内置变量

    目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...