18. docker 容器部署 python-redis
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