主要包括三个基本核心概念:
- 镜像(image):相当于一个静态的文件系统,类似于未安装的windows ios文件,相当于是一个未挂载的root文件系统
- 容器(container):容器是镜像运行时的实体,可以启动、创建、停止以及删除。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间
- 仓库(Repository):镜像中心,类似于maven的依赖包中心,用来保存镜像,最常使用的公共仓库是官方的Docker Hub
基本架构(cs架构):
守护进程(daemon)是生存期长的一种进程,没有控制终端。它们常常在系统引导装入时启动,仅在系统关闭时才终止
- Docker 客户端(Client):与docker host中的守护进程进行通信,通过命令执行实际的操作(cs架构中的c)
- Docker 主机(Host):运行容器,存储镜像的机器
- Docker Registry:一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
从hello-word可以得到docker执行的基本流程
- client 连接 hosts 的daemon进程
- daemon进程查看本地镜像,如果不存在,向远程Registry获取镜像
- daemon进程为镜像启动容器
- daemon进程将信息发送给client
几个基本概念
1. 容器与虚拟机的区别
虚拟机,相当于一套真的操作系统,在os层上增加了一层hypervisor,用来虚拟化硬件,每个虚拟机以层虚拟化的硬件为基础,建立自己的OS层(GuestOa),应用层.
容器,更偏向于一个进程隔离空间,空间内包含特定进程执行所需要的环境(镜像),容器之间互不干扰,但是共同调用底层的os接口,由daemon进程统一管理
2. Dockerfile相关总结
Docker基本使用(以某个项目部署为例)
在项目中添加Dockerfile(该文件用来提供构建镜像文件的必要信息)
docker builder 构建镜像文件
- 首先拉取基础docker镜像,之后将应用程序复制到docker容器中,根据应用程序依赖信息加载相关依赖,加载完成后执行初始run命令
- -t 指明生成镜像文件的tag
- . 指明dockerfile位置
docker run 指定并绑定端口后运行项目
docker基础镜像构建(搭建基础机器学习+深度学习环境)
To stop a container, use
CTRL-c
. This key sequence sendsSIGKILL
to the container. If--sig-proxy
is true (the default),CTRL-c
sends aSIGINT
to the container. If the container was run with-i
and-t
, you can detach from a container and leave it running using theCTRL-p CTRL-q
key sequence.
使用ubuntu作为基础镜像,安装anaconda
docker cp 复制文件到镜像中
docker attach 切换到前台
sh Anaconda3-2021.05-Linux-x86_64.sh
执行安装脚本
退出容器,将当前容器导出为镜像 docker commit
推送远程仓库(镜像名称中的用户名一定要与远程仓库用户名一致,否则报错)