向docker镜像中传递变量的两种方式
测试用到的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镜像中传递变量的两种方式的更多相关文章
- hive 传递变量的两种方式
在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...
- js中使用对象变量的两种方式
function Person(){ this.a=function(){ window.alert("a"); } this.b=function(){ window.alert ...
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...
- jQuery中开发插件的两种方式
jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...
- LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...
- Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...
- 数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式
https://zhuanlan.zhihu.com/p/64418286 假设有一组数据, 已知每一个产品贡献的利润,如果要计算前几名产品的贡献利润总和,或者每一个产品和利润更高产品的累计贡献占总体 ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- web.config文件中配置数据库连接的两种方式
web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报 分类: 数据库(74) 在网站开发 ...
随机推荐
- 使用 HDFS 协议访问对象存储服务
背景介绍 原生对象存储服务的索引是扁平化的组织形式,在传统文件语义下的 List 和 Rename 操作性能表现上存在短板.腾讯云对象存储服务 COS 通过元数据加速功能,为上层计算业务提供了等效于 ...
- 【Python数据分析案例】python数据分析老番茄B站数据(pandas常用基础数据分析代码)
一.爬取老番茄B站数据 前几天开发了一个python爬虫脚本,成功爬取了B站李子柒的视频数据,共142个视频,17个字段,含: 视频标题,视频地址,视频上传时间,视频时长,是否合作视频,视频分区,弹幕 ...
- 1.Docker简介
Docker是个什么东西 假定您在开发一个项目,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置.其他开发人员身处的环境配置也各有不同.您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件 ...
- IE 浏览器将停止服务,这是真的吗?
浏览器通常是指用来检索.展示以及传递 Web 资源信息的一种应用程序,它能将网页.图片.视频等等 Web 上的信息呈现给我们. 如果现在发起一个投票:"你觉得好用的浏览器是什么?" ...
- 提升站点SEO的7个建议
1.使用HTTPS 谷歌曾发公告表示,使用安全加密协议(HTTPS),是搜索引擎排名的一项参考因素. 所以,在域名相同情况下,HTTPS站点比HTTP站点,能获得更好的排名. 在网络渠道分发或合作上, ...
- windows获取高精度时间戳 精度100ns
#include <stdio.h> #include <Windows.h> int main(void){ LARGE_INTEGER ticks,Frequency; Q ...
- 929. Unique Email Address - LeetCode
Question 929. Unique Email Address Solution 题目大意: 给你一个邮箱地址的数组,求出有多少个不同的地址,其中localName有如下规则 加号(+)后面的字 ...
- linux篇--mysql数据库备份并删除前一分钟的数据
linux 中mysql数据库定时备份并删除前一分钟的所有数据 #!/bin/bash #mysqldump -uroot -ppassword01! imaginebase > /home/b ...
- 【系统】查看windows系统是否永久激活
查看windows系统是否永久激活 查看激活时间 slmgr.vbs -xpr 查看激活详情 slmgr.vbs -dlv
- 一文学完Linux Shell编程,比书都好懂
一. Shell 编程 1. 简介 Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务. Shell 既是一种命令语言,又是一种程序设计语言. Shell scr ...