等你发现时光是贼了,它早已偷光你的选择。
最近一直在学习Docker, 使用Docker搭建漏洞环境, 踩了点坑, 也写点总结
简介
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
Docker 镜像
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker 容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
Docker 仓库
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,16.04, 18.04。我们可以通过 ubuntu:16.04,或者 ubuntu:18.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
安装
Ubuntu 上安装
1 | sudo apt-get install apt-transport-https |
或者使用脚本安装最新Docker
1 | curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh – |
Mac 上安装
前往官网下载安装包:https://www.docker.com/products/docker#/mac
下载完以后直接安装,安装完成后运行docker run hello-world,如果没有报错,说明安装成功。
常用命令
镜像
- 查看本地镜像列表:
1 | root@Kali:~# docker images -a |
- 其他镜像操作:
1 | docker search (image-name) 查询镜像 example:docker search ubuntu |
容器
- 检查容器运行状态:
1 | docker ps -a |
- 创建容器
- –rm 一旦进程退出,则删除容器
- -it 进入交互模式
- ubuntu 容器立足的镜像名字
- /bin/bash 要运行的命令
- -d 后台运行
- -p 映射的端口,:前为本机,后为容器
- –name 自定义名称
1 | docker run --rm -it ubuntu /bin/bash |
1 | docker run -d -p 8000:80 --name test image-name |
- 更多容器操作:
1 | docker attach container 进入容器交互式界面 |