Docker(二)Image 与网络
Docker Image
我们介绍一下如何构造一个自定义的 Docker Image。在Docker 中,我们使用Dokcerfile 构建一个docker的描述。
首先我们定义一下需要启动一个什么应用,以 web app 为例,我们有以下需求:
- 操作系统:centos
- 更新软件:yum -y update
- 安装依赖:yum
- 安装Python依赖:pip
- 复制源代码到 /opt 文件夹
- 使用flask命令执行web server
定义了需求后我们开始编写Dockerfile:
FROM centos RUN yum -y update
RUN yum -y install python3 RUN pip3 install flask
RUN pip3 install flask-mysql COPY . /opt/source-code ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
然后 build 此docker:
docker build -t zack/webapp .
若是需要上传此镜像到 docker hub,则可以使用 docker push zack/webapp 进行推送。
Dockerfile 结构
Dockerfile 可以的基本语法为:
FROM ubuntu => 基础image,可以是纯操作系统,也可以是基于其他image
RUN yum -y update => 执行命令
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run => 在 image 以 docker container 运行后,执行的指令
在 build 过程中,可以看到多个step:
Step 1/7 : FROM centos
---> 0f3e07c0138f
Step 2/7 : RUN yum -y update
---> Using cache
---> 45828a832352
Step 3/7 : RUN yum -y install python3
---> Using cache
---> 6c66ca299317
…
成功的 step 会被缓存,以减少下次build的时间。
Docker Compose
在部署多个container组件时,如web app、database、message system 等,一般我们不会每次部署一个container,而是使用 docker compose文件。例如:
services:
web:
image: "zack/webapp"
database:
image: "mongodb"
messaging:
image: "redis:alpine"
orchestration:
image: "ansible"
之后使用docker-compose up 即可部署一套系统,使用docker-compose stop 停止系统,或是使用docker-compose 下线整个系统。
Docker 网络
在 Docker 启动时,有3种网络模式,分别为Bridge、none、host。在执行docker run 时,默认的是bridge模式。
Bridge
在bridge 模式下,每个Container都是启动在私有子网下,并有自己的私有ip地址,一般是172.17.0.x,如:
Container 之间客户相互访问,但是外部无法直接访问到内部的 docker container。若是需要Container可以被外部访问,则一般有两个方法:
- 使用之前介绍过的port mapping 的方式,将外部端口与Container 端口映射
- 使用 host network
Host
Host network 是将 Docker Container 的端口直接映射到主机同一端口,与port mapping的区别较为明显。使用 host network 启动时,可以用:
docker run --network=host training/webapp
None
最后一个是 none network,在这种模式下启动的 container 将无任何ip地址。启动的方式为:
docker run --network=none training/webapp
自定义Docker网络
在 bridge 网络模式下,docker默认子网使用的是 172.17.0.x 的地址,若是我们需要另一另一个网络呢?比如:
在这种需求下,我们可以使用docker network create 命令创建一个网络。例如:
> docker network create --driver bridge --subnet 182.18.0.0/16 custom-isolated-network
之后我们即可使用 docker network ls 命令查看当前的docker 网络,如:
> docker network ls
NETWORK ID NAME DRIVER SCOPE
686a2c7d0d84 bridge bridge local
ee612a9c4873 custom-isolated-network bridge local
491d93c817b7 host host local
a3184c11c69b none null local
之后即可使用以下命令将container 启动在此网络下:
docker network run --network=custom-isolated-network training/webapp
进一步验证:
> docker exec 957cd71c547c ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:b6:12:00:02
inet addr:182.18.0.2 Bcast:182.18.255.255 Mask:255.255.0.0
Docker(二)Image 与网络的更多相关文章
- Docker入门篇(二)之docker的单主机网络
Docker 安装时会自动在host上创建三个网络,我们可用 docker network ls命令查看: [root@localhost ~]# docker network ls NETWORK ...
- docker从零开始网络(二)桥接网络
使用桥接网络 在网络方面,桥接网络是链路层设备,它在网络段之间转发流量.桥接网络可以是硬件设备或在主机内核中运行的软件设备. 就Docker而言,桥接网络使用软件桥接器,该软件桥接器允许连接到同一桥接 ...
- docker学习3-虚拟网络模式
一.虚拟机网络模式 在理解docker网络隔离前,先看下之前虚拟机里对网络的处理,VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-onl ...
- Docker Swarm 创建overlay网络
Docker Swarm 创建overlay网络 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1. ...
- docker进阶——数据管理与网络
一.数据卷管理 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者 需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及 到容器的数据管理 (1)Data Vo ...
- Docker的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=host指定. · container ...
- Docker实践(2)—虚拟网络
1 docker(container)的虚拟网络 docker的虚拟网络结构: host创建一个虚拟bridge,每个container对应一个虚拟网络设备(TAP设备),与bridge一起构成一个虚 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- Docker(二)
Docker Compose 多主机网络 容器集群管理 Docker结合Jenkins构建持续集成环境 Docker结合Consul实现服务发现 Docker API 日志管理
- Docker基础内容之网络基础
网络命名空间基本原理 单机版多容器实例网络交互原理 在宿主机上面打开两张网卡eth0与eth1,打通两张网卡的链路 在test1上面启动一个veth网卡,创建一个namespace:并桥接到eth0上 ...
随机推荐
- 想在don‘t starve中活的更久?那饥荒海难攻略你怎么能不知道!
饥荒海难mac版是一款非常好玩的烧脑游戏.玩家将扮演一个勇敢的绅士科学家威尔逊,被一个恶魔困住并送到一个神秘的荒野世界,玩家必须利用异世界中的自然资源让自己存活下去,并且抵御各种异世界生物的威胁.想在 ...
- 关于对 softirq、work_queue、tasklet 学习后的一点总结
本文基于linux版本:4.14.111 简单的总结下 softirq.work_queue.tasklet 三种中断下半部的工作原理及区别,并附上三种形式的简单实例. 一.运行原理① softirq ...
- Java获取IP地址,IpUtils工具类,Java IP地址获取
================================ ©Copyright 蕃薯耀 2020-01-17 https://www.cnblogs.com/fanshuyao/ import ...
- python数据类型(第二弹)
针对上一篇博文提出的若干种python数据类型,笔者将在本文和后续几篇博文中详细介绍. 本文着重介绍python数据类型中的整数型.浮点型.复数型.布尔型以及空值. 对于整数型.浮点型和复数型数据,它 ...
- 剑指offer-面试题48-最长不含重复字符的子字符串-动态规划
/* 题目: 最长不含重复字符的子字符串. */ /* 思路: f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1) distance,当前字符和上一次出现 ...
- Kali Linux中Chrome浏览器不能启动的问题
kali中自带了Chromium Web Browser,我点了几次没反应.我还以为是Chrome的版本问题.于是下载了Chrome的deb包. 安装中还解决了一个包依赖问题.安装成功还是不能启动.于 ...
- 吴裕雄--天生自然 JAVA开发学习:Java 开发环境配置
- [P5748] 集合划分计数 - 生成函数,NTT
求 \(10^5\) 以内的所有贝尔数:将 \(n\) 个有标号的球划分为若干非空集合的方案数 Solution 非空集合的指数生成函数为 \(F(x)=e^x-1\) 枚举一共用多少个集合,答案就是 ...
- Jquery基础(动画效果的轮播图特效)
jquery文档准备的三种写法: $(document).ready(function() { }); $().ready(function() { }); $(function() { }); jq ...
- sql server 发送邮件
-- BI EMAIL declare @CC varchar(10),@MAIL varchar(500), @str varchar(800),@year varchar(4),@month va ...