介绍
镜像与容器的关系就如果软件与进程一样,容器只是镜像的一个运行的实例。
Docker本质上就是宿主机上的一个进程,docker通过namespace实现了资源隔离,通过cgroup实现了资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作。
Docker是通过内核虚拟化技术来提供容器的资源隔离与安全保证。由于docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及hyperisor)支持。
- Namespace的六项隔离
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名 |
IPC | CLONE_NEWIPC | 信号量消息队列和共享内容 |
PID | CLONE_NEWPID | 进程编号 |
NEWWORK | CLONE_NEWNET | 网络设备,网络栈,端口 |
MOUNT | CLONE_NEWNS | 挂着点(文件系统) |
USER | CLONE_NEWUSER | 用户与用户组 |
搭建
移除旧的
1 | yum remove docker |
安装
1 | # 安装一些必要的系统工具 |
镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
请在该配置文件中加入(没有该文件的话,请先建一个):
1 | { |
修改完配置记得重启
1 | systemctl daemon-reload |
使用
操作
1 | # 启动docker |
网络
安装docker之后,默认会有一个新的网卡,地址为172.17.0.1
,以后的容器都会以ip+1占用ip地址172.17.0.2
。
持久化
默认情况下,docker启动的容器在关闭后,数据将不会存储。使用volume命令创建持久化数据目录。
镜像
介绍
Docker镜像制作提供了2种方式,通过 Dockerfile 来自动编译生成镜像和通过容器内操作,并进行 Commit 来实现打包生成镜像。
第一种思路多用于用户交互较少的时刻,比如软件部署时无需输入任何命令的应用。第二种思路用于用户交互较多、安装过程中配置较多的应用。
Dockerfile 打包
- 关键字
值 | 含义 |
---|---|
FROM | 制作该image的基础镜像 |
RUN | 运行一条指令 |
ENV | 常量设置 |
VOLUME | 目录 |
COPY | 文件拷贝 |
EENTRYPOINT | 设置容器启动时运行的指令 |
CMD | 容器启动时运行的指令,可以带参数 |
EXPOSE | 暴露在物理机器的端口 |
自定义容器
上传流程
1 | # 登录 |
镜像的名称必须以账号名称的风格处理 xxxx/xxxx
,不然push会拒绝denied:request access to the resource is denied
中文乱码
- 已经启动的容器
1 | # 进入容器 |
快捷键
快捷键 | 描述 |
---|---|
ctrl + p + q |
后台运行容器 |
ctrl + c |
退出和关闭容器 |
帮助
日期同步
共享主机的localtime (方法一)
1
docker run -d -v /etc/localtime:/etc/localtime --rm -p 8888:8080 tomcat:latest
复制主机的localtime (方法二)
1
docker cp /etc/localtime xxxx:/etc/localtime