简单来讲就是一个装应用的容器,能够把你想装的通通打包丢进去。Docker 在容器的基础上,又进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的建立和维护,这使得 Docker 技术比虚拟机技术更为轻便、快捷。linux
Docker 与传统虚拟化方式的不一样之处在于,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操做系统,再在该系统上运行所需的应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,并且也没有进行硬件虚拟。所以容器要比传统的虚拟机更为轻便。 nginx
镜像 :docker
Docker 镜像,至关于一个特殊的文件系统,能够提供用户提供空间支持。除了提供容器运行时所需的程序、库、资源配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建后也不会改变。json
严格来讲,镜像是一个分层存储的架构。它在构建时,会一层一层构建,前一层是后一层的基础。每层构建完成后就不会再发生改变,后一层上的任何改动仅发生在这一层。好比,删除前一层文件的操做,实际上只是在当前层作一个“上层已删除”的标记,而不会真正把上层文件删掉。在最终容器运行的时候,虽然不会看到这个文件,但实际上它将一直跟随着镜像。所以,在构建镜像时应该额外当心,不要把无用的数据留到下一层去清理。bash
容器 :网络
镜像
与 容器
的关系,就像 Java 中 类
与 实例
的关系。镜像是静态的定义,容器是镜像运行时的实体。容器的本质是一个进程,是真正跑项目程序、消耗机器资源、提供服务的部分,至关于一个小虚拟机,为镜像提供隔离的运行环境。架构
和镜像相同,容器采用的也是分层存储架构,每个容器运行时,是以镜像为基础层,在其上建立一个当前容器的存储层,即容器存储层。容器存储层的生命周期和容器同样,当容器消亡时,该存储层将随之消亡,保存于其中的信息也一同丢失。性能
按照 Docker 最佳实践的要求,容器不该该向其存储层内写入任何数据,容器存储层要保持无状态化。全部的文件写入操做,都应该使用 数据卷
,或绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。ui
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。所以,使用数据卷后,容器删除或者从新运行以后,数据却不会丢失。spa
仓库 :
Docker 的仓库用来存放镜像。与 Git 相似,它提供一个集中存储、分发镜像的服务,使得咱们能够从中心仓库或我的仓库自由拉取镜像,也能够将制做好的镜像提交到远程仓库。
deepin 下直接安装就好啦,其余版本能够参考 官方文档 。
出现这个就说明安装成功 :
由于docker的默认镜像源下载比较慢,因此通常会换成国内的镜像源。以阿里为例,进入它的 容器镜像服务,找到本身的镜像加速器。
而后将它添入 /etc/docker/daemon.json(没有就本身建立一个)。
最后重启一下,就能够正常使用了 :
默认状况下docker是只能经过root权限访问的,就像下图,或者是 sudo -s
以后再进行操做。
经过放大 docker.sock( Docker 守护进程 ( Docker daemon ) 默认监听的 Unix 域套接字,容器中的进程能够经过它与 Docker 守护进程进行通讯 )的访问权限,可使普通用户也能直接使用 docker 命令 :
docker pull [OPTIONS] IMAGE [:TAG]
复制代码
docker images [OPTIONS] [REPOSITORY[:TAG]]
复制代码
docker images
就够啦docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG..]
复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG..]
复制代码
docker ps
复制代码
docker run (-d) IMAGE
复制代码
docker run nginx
docker run -d nginx
docker exec -it [容器id] bash
复制代码
docker run -d -p [主机端口:容器端口] [容器名或id]
复制代码
docker run -d -p 8080:8080 nginx
docker restart [容器id]
复制代码
docker stop [容器id]
复制代码
docker start [容器id]
复制代码
docker rm [容器id]
复制代码
docker rmi [镜像id]
复制代码
注意删除镜像前要先删除容器,而删除容器前要先中止容器。
首先中止所有容器 :
docker stop $(docker ps -a -q)
复制代码
而后进行删除 :
docker rm $(docker ps -a -q)
复制代码
-- tbc --