一、镜像制作方式
Docker
制作镜像主要有以下两种方式:
- 使用
docker commit
命令创建镜像:- 通过
docker run
命令启动容器。 - 修改
Docker
镜像内容。 docker commit
提交修改的镜像。docker run
新的镜像。
- 通过
- 使用
Dockerfile
创建镜像:
备注:使用docker commit
来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用docker build
来创建一个新的镜像。
二、Dockerfile
基本语法
- Dockerfile 指令介绍
- 使用
#
来注释 FROM
指令告诉Docker
使用哪个镜像作为基础- 接着是维护者的信息
RUN
开头的指令会在创建中运行,比如安装一个软件包,在这里使用apt-get
来安装了一些软件
- 使用
三、Dockerfile
创建镜像示例
A、新建Dockerfile
文件
mkdir -p /data/data/docker
touch /data/data/docker/Dockerfile
B、编辑Dockerfile
文件
Dockerfile
中每一条指令都创建镜像的一层
# 这里是注释
# 设置继承自哪个镜像
FROM ubuntu:14.04
# 下面是创建者的基本信息
MAINTAINER hjyang (17826xxxx@qq.com)
# 在终端需要执行的命令
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
C、docker build
生成镜像
cd /data/data/docker
# -t:添加 tag(指定新的镜像的用户和镜像名称信息)
# ".":Dockerfile所在的路径(当前目录),也可以是一个具体的Dockerfile路径。
docker build -t="hjyang/ubuntu:v1" .
docker images
D、使用docker run
运行镜像
# 以交互方式运行docker
docker run -it hjyang/ubuntu:v1 /bin/bash
# 运行docker时指定配置
docker run -d -p 10.211.55.4:9999:22 ubuntu:tools '/usr/sbin/sshd' -D
# 参数:
# -i:以“交互模式”运行容器,让容器的标准输入保持打开
# -t:容器启动后会进入其命令行,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
# -v:将本地哪个目录挂载到容器中(一次run中可以挂载多个数据卷),格式:-v <宿主机目录>:<容器目录>
# -p:表示宿主机与容器的端口映射,此时将容器内部的22端口映射为宿主机的9999端口
# 这里使用宿主机的IP+端口号(10.211.55.4:9999),它映射容器内部的端口号22。
# ssh外部需要访问:ssh root@10.211.55.4 -p 9999
# 指定镜像可以使用“镜像 ID” 或“仓库名:标签名”
四、Docker
网络
Docker
网络功能相对简单,没有过多复杂的配置,Docker
默认使用birdge
桥接方式与容器通信。- 启动
Docker
后,宿主机上会产生docker0
这样一个虚拟网络接口,docker0
不是一个普通的网络接口, 它是一个虚拟的以太网桥,可以为绑定到docker0
上面的网络接口自动转发数据包,这样可以使容器与宿主机之间相互通信。 - 每次
Docker
创建一个容器,会产生一对虚拟接口,在宿主机上执行ifconfig
,会发现多了一个类似veth****
这样的网络接口,它会绑定到docker0
上,由于所有容器都绑定到docker0
上,容器之间也就可以通信。 - 在宿主机上执行
ifconfig
,会看到docker0
这个网络接口, 启动一个container
,再次执行ifconfig
, 会有一个类似veth****
的interface
,每个container
的缺省路由是宿主机上docker0
的ip
,在container
中执行netstat -r
可以看到container
路由。 - 在容器中使用
netstat -r
命令查看容器的IP地址,容器中的默认网关跟docker0的地址是一样的,在宿主机中使用ifconfig查看docker0的IP地址。 - 当容器退出之后,
veth***
虚拟接口也会被销毁。