1. 编写 Vagrantfile 并创建虚拟机 并虚拟机绑定外部 192.168.205.10:8888 ip:port

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [

{

:name => "docker-node1",

:eth1 => "192.168.205.10",

:mem => "1024",

:cpu => "1",

:port => "8888"

}

]

Vagrant.configure(2) do |config|

config.vm.box = "centos/7"

boxes.each do |opts|

config.vm.define opts[:name] do |config|

config.vm.hostname = opts[:name]

config.vm.network "forwarded_port", guest: 80, host: opts[:port]

config.vm.provider "vmware_fusion" do |v|

v.vmx["memsize"] = opts[:mem]

v.vmx["numvcpus"] = opts[:cpu]

end

config.vm.provider "virtualbox" do |v|

v.customize ["modifyvm", :id, "--memory", opts[:mem]]

v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]

end

config.vm.network :private_network, ip: opts[:eth1]

end

end

config.vm.synced_folder "./labs", "/home/vagrant/labs"

config.vm.provision "shell", privileged: true, path: "./setup.sh"

end

2.创建labs 文件夹 及编写 setup.sh 文件

  mkdir labs

  vim setup.sh

#setup.sh

  

#/bin/sh

  # install some tools

  sudo yum install -y wget

  sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  sudo yum makecache

  sudo yum -y update

  sudo yum install -y git vim gcc glibc-static telnet bridge-utils

# install docker

  curl -fsSL get.docker.com -o get-docker.sh

  sh get-docker.sh

# start docker service

  sudo groupadd docker

  sudo usermod -aG docker vagrant

  sudo systemctl start docker

  rm -rf get-docker.sh

  sudo tee /etc/docker/daemon.json <<-'EOF'

  {

    "registry-mirrors": ["https://v2ltjwbg.mirror.aliyuncs.com"]

  }

  EOF

  sudo systemctl daemon-reload

  sudo systemctl restart docker

  docker version

3.创建虚拟机

  vagrant up

4.创建 redis 容器  不用使用 -p 将 docker 参数暴露

  docker run -d --name redis redis

5.编写dockerFile 文件

  FROM python:2.7    #基础镜像为 python:2.7

  LABEL maintaner="eaon eaon123@docker.com"  #创建者为eaon

  COPY . /app            # 复制当前的文件到 /app下

  WORKDIR /app            # 工作目录为 /app

  RUN pip install flask redis      #安装 flask 和 redis

  EXPOSE  5000             # 暴露 5000 端口进行访问

  CMD ["python", "app.py"]      # 运行 python app.py

6. build Dockerfile  创建镜像

  docker build -t 'flask-redis' .

7.编写 python 文件 app.py

 from flask import Flask    

 from redis import Redis

 import os

 import socket

 app = Flask(__name__)

redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)

 @app.route('/')

 def hello():    //定义 hello 函数  1.添加每次自增hits  2 返回一句话

  redis.incr('hits')

  return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())

if __name__ == "__main__":

   app.run(host="0.0.0.0", port=5000, debug=True)

8. 创建 redis-flask 容器

  docker run -d --link redis --name redis-flask -e REDIS_HOST=redis redis-flask

  -d 为后台运行

  --link redis 表示链接 redis 容器

  --name 表示容器名为 redis-flask

  -e 设置环境变量 REDIS_HOST=redis

  最后为启动镜像的名称

9. 虚拟机内访问

  将 redis-flask 添加参数 -p 4321:5000 并重新 创建容器 (前面是虚拟机的端口,后面是容器端口)

  docker stop redis-flask && docker rm redis-flask

  docker run -d --link redis --name redis-flask -p 4321:5000  -e REDIS_HOST=redis redis-flask

  在虚拟机内(容器外)使用 curl 127.0.0.1:4321 即可访问 容器内的应用

10 在外部访问 虚拟机内的容器

  将 redis-flask 修改参数 -p 8888:5000 并重新 创建容器 (前面是虚拟机的端口,后面是容器端口)

  docker stop redis-flask && docker rm redis-flask

  docker run -d --link redis --name redis-flask -p 8888:5000  -e REDIS_HOST=redis redis-flask

  在浏览器使用 192.168.205.10:8888 即可访问 虚拟机的容器内的应用

11. 环境变量 设置

  使用 -e env 可以自定义配置参数

  创建镜像

  docker run -d --name test -e EAON=eaon44 busybox /bin/sh -c "while true; do sleep 3600; done"

  运行镜像

  docker exec -it test /bin/sh

  查看环境变量

  env

  

18. docker 容器部署 python-redis的更多相关文章

  1. docker容器化python服务部署(supervisor-gunicorn-flask)

    docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...

  2. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  3. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

  4. pycharm使用docker容器的python解释器,

    上一篇是pycharm调用docker的镜像的python解释器. 此篇介绍pycharm 调用docker的容器的python解释器. 这两个思路还是不一样的,第一个是用pycham界面的选择pyt ...

  5. [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法

    Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法. 先起一个Redis的Docker容器,命名为 redis,再起一个自己的Dock ...

  6. Docker容器部署tomcat出现中文乱码

    docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [root@docker1 ~]# docker exec -it 41de9 ...

  7. Docker容器编译安装Redis

    Docker容器编译安装Redis 1.创建容器 -i 交互模式 -d 后端运行 -h 容器的hostname --name 容器名 --network 网卡 --ip IP地址 -p 端口映射 -- ...

  8. Docker如何部署Python项目

    Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...

  9. python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序

    背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...

随机推荐

  1. MyBatis parameterType、resultType的数据类型

    parameterType.resultType的数据类型要写全限定类名或者别名. mybatis已经给常用的数据类型起好了别名,参考mybatis.pdf  3.1.1小节: 基本数据类型很少用,一 ...

  2. 1. Centos 安装

    安装 Centos 6.9 配置网络 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes ...

  3. Swift 结构体struct

    //结构体是一个值类型 struct location{ //属性 var x:Double var y:Double //方法 func test() { print("结构体中的test ...

  4. 干货分享|Critique Essay写作解析

    Critique essay要求学生对另一篇文章进行批判性分析,通常是一本书.期刊文章或论文.不管你的专业是什么,你可能会被要求在某个时候写一篇Critique essay.拿心理学专业举例,评论一篇 ...

  5. 无法启动APK安装也,报异常FileUriExposedException

    无法打开APK安装页,报异常FileUriExposedException, https://juejin.im/entry/58e4643db123db15eb79a902

  6. Idea 打印GC

    设置 Run ⇒ Edit Configurations ⇒ VM options 添加 -XX:+PrintGCDetails 运行程序后会在末尾打印GC信息 2019-11-02 13:07:47 ...

  7. js基础学习之-js包装对象

    var test = "test"; test.a = "hello"; console.log(test.a); //undifined 定义: 在JavaS ...

  8. ES6中字符串的新增方法梳理

    1.String.fromCodePoint(); String,fromCodePoint()方法可以认为是对String.fromCharCode()方法的扩展,这两个方法的共同点在于都是用于Un ...

  9. ZOJ - 3870 Team Formation(异或)

    题意:给定N个数,求这N个数中满足A ⊕ B > max{A, B})的AB有多少对.(A,B是N中的某两个数) 分析: 1.异或,首先想到转化为二进制. eg:110011(A)和 1(B)- ...

  10. Toolbar融入状态栏实现沉浸式遇到的问题

    这里写一个纠结我一下午的问题,目的是写一个toolbar和状态栏相融合的沉浸式的样子,遇到各种各样的问题,还好最后慢慢解决了. 一.首先在活动中将状态栏设为透明 @Override protected ...