余子越的博客
Toggle navigation
余子越的博客
主页
计算机网络
大数据分析
系统与工具
编程之路
容器引擎
作者
归档
标签
Docker 运行容器
2018-09-02 13:35:34
101
0
0
yuziyue
[TOC] # 一、容器当虚拟机使用 在某种程度上,Docker 可以当做虚拟机来使用,可以给容器配置网桥方式上网。这种方式大大降低了容器的灵活性。 ## 1、容器启动脚本 编辑脚本 run_container.sh ``` #!/bin/bash host_name=node1 image_name=centos container_name=centos-node1 docker run -itd \ --privileged=true \ --net=none \ -h $host_name \ --name $container_name \ -v /home:/home \ -v /data:/data \ $image_name \ /bin/bash ``` ## 2、网桥配置脚本 为了使容器像局域网的一台机器一样使用,有用局域网同网段的IP地址,需要使用网桥方式。安装配置工具 brctl。 ``` yum install bridge-utils -y ``` 编辑脚本 set_bridge.sh ``` #!/bin/bash brctl addbr bridge0 ip link set dev bridge0 up brctl addif bridge0 ens33 ip addr del 10.16.80.182/24 dev ens33 ip addr add 10.16.80.182/24 dev bridge0 ``` bridge0 是新设置的网桥,ens33 是物理物理网卡,10.16.80.182/24 是物理网卡的IP地址,执行该脚本后物理网卡的IP地址会被配置到新的网桥上,所有的网络都走bridge0 。 ## 3、配置容器 IP 下面的脚本用于配置容器IP,配置成功后,容器就相当于局域网的一台物理机一样,和物理机属同一网段。 ``` #!/bin/bash if [ $# -ne 1 ];then echo "Usage:" echo "sh $0 < containerid >" exit 1 fi container_id=$1 A=etha # represents container's device B=ethb # represents host machine's device pid=`docker inspect -f '{{.State.Pid}}' $container_id` echo $pid mkdir -p /var/run/netns ln -s /proc/$pid/ns/net /var/run/netns/$pid ip link add $A type veth peer name $B brctl addif bridge0 $B ip link set $B up ip link set $A netns $pid ip netns exec $pid ip link set dev $A name eth0 ip netns exec $pid ip link set eth0 up ip netns exec $pid ip addr add 10.16.80.181/24 dev eth0 ip netns exec $pid ip route add default via 10.16.80.1 ``` - 10.16.80.181/24 容器IP地址 - 10.16.80.1 容器网关 **注意**: 宿主机的防火墙配置可能对容器的网络有影响,如果非常熟悉防火墙的配置,可以手动放开配置项,如果不熟悉,可以完全关闭防火墙。 ## 4、容器初始化 容器IP配置好后,使用docker命令登录容器,配置sshd服务,然后就可以使用ssh连接进docker了。 ## 5、远程连接容器 和普通机器一样,使用同样的方式连接即可。 <br><br> # 二、容器正确打开方式 ## 1、编辑 app.py 文件 ``` from flask import Flask import os import socket app = Flask(__name__) @app.route("/") def hello(): visits = "<i>list things here! </i>" html = """ <h3>Hello {name}!</h3> <b>Hostname:</b> {hostname}<br/> <b>Visits:</b> {visits} """ return html.format(name=os.getenv("NAME"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80) ``` 上面是一个最简单的flask应用app。 ## 2、编写 requirements.txt 文件 ``` Flask ``` ## 3、编写 Dockerfile 文件 ``` FROM python:2.7-slim WORKDIR /app ADD . /app RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 80 ENV NAME "yuchaoshui" CMD ["python", "app.py"] ``` 上面的Dockerfile以python:2.7-slim为基础镜像,创建了一个flask的应用APP。 ## 4、使用build构建镜像 ``` docker build -t friendlyhello ``` ## 5、运行创建的容器并访问 注意,宿主机的防火墙需要放开4000端口。 ``` docker run -p 4000:80 friendlyhello ``` 访问宿主机 http://IP:4000 即可访问flask应用。 更复杂的可以根据此步骤扩展。 <br><br><br>
上一篇:
CentOS 7 修改镜像下载地址
下一篇:
Docker 常用命令及解释
0
赞
101 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
文档导航