1.docker的优势
- 更高效的利用系统资源
- 更快的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展
docker 默认安装目是 /var/lib/docker
2.Docker和虚拟机的区别
虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器。
Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算。
Docker所用的资源更少,性能更高。同样一个物理机器,Docker运行的镜像数量远多于虚拟机的数量。
虚拟机实现了操作系统之间的隔离,Docker算是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。
3.Docker的基本概念
镜像(提供容器运行所需要的程序、库、资源、配置文件等其他一些配置参数, 分层存储概念)
容器(类似一个个独立的进程)
仓库
虚悬镜像(dangling image): 镜像没有仓库名或没有标签
查询显示虚悬镜像
docker images -f dangling=true
删除虚悬镜像
docker rmi $(docker images -q -f dangling=true)
docker image prune [option] 删除未使用的镜像
名字, 速记 默认描述
--all , -a 默认,删除所有未使用的映像,而不仅仅是悬空映像
--filter 提供过滤值(例如'until =“)
--force , -f 不要提示确认
docker rm & docker rmi & docker prune 的差异
docker rm : 删除一个或多个 容器
docker rmi : 删除一个或多个 镜像
docker prune: 用来删除不再使用的 docker 对象
利用 commit 理解镜像构成
注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被 入侵后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该 使用 Dockerfile 来完成。如果你想要定制镜像请查看下一小节。 镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运 行的基础。在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像。直接 使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就 需要定制这些镜像。接下来的几节就将讲解如何定制镜像。 回顾一下之前我们学到的知识,镜像是多层存储,每一层是在前一层的基础上进行 的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为 容器运行时的存储层。 现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的。
docker run --name webserver -d -p 80:80 nginx
第一次本机没有会从远端下载
这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。 如果是在 Linux 本机运行的 Docker,或者如果使用的是 Docker Desktop for Mac/Windows,那么可以直接访问:http://localhost;如果使用的是 Docker Toolbox,或者是在虚拟机、云服务器上安装的 Docker,则需要将 localhost 换 为虚拟机地址或者实际云服务器地址。 直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面。例如本机IP为 192.168.70.128:80
image.png
现在我们定制好了变化,我们希望能将其保存下来形成镜像。
可以使用以下命令保存镜像
docker commit --author "Tao Wang <twang2218@gmail.com>" --message "修改了默认网页" webserver nginx:v2
新的镜像定制好后,我们可以来运行这个镜像。docker run --name web2 -d -p 81:80 nginx:v2
如下图所示
docker commit命令一般不使用此命令,原因有如下几点:
- 过程中涉及到的其他很多无关操作会被牵扯进来,导致镜像十分臃肿
- 所有操作都为黑箱操作,其他人无法得知
- 后期的每一次修改都影响巨大,使镜像更为臃肿
Dockerfile 基础镜像选择
先看看基础镜像的dockerfile,它们是么创建出来的。
scratch
空镜像
alpine
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
debian
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
centos/fedora/ubuntu
FROM scratch
ADD centos-7.4.1708-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="20170911"
CMD ["/bin/bash"]
建议
docker是容器不同于虚拟机,运行之后只有应用程序在里面运行,基础镜像只是为应用程序提供依赖包。应用程序是主,基础镜像是次。
如果没有必要,选择最小的依赖环境alpine,然后在这个基础上制作自己的镜像。
网友评论