Docker源码学习(一)
1.Docker简介
docker官方文档:https://docs.docker.com/get-started/overview/#docker-architecture
docker源码下载:https://github.com/docker/docker-ce
如果想要更深入的了解镜像,参考:http://c.biancheng.net/view/3143.html
Docker利用Linux内核的NameSpace技术将进程分隔开,每个容器只能看到本容器中的进程,可以很方便的管理软件环境(再也不用因为软件环境冲突,重装ubuntu系统了!)。可以对比anaconda理解,conda是将不同的python环境隔离开,但是docker是将软件环境和操作系统隔离开,这些环境也包括非python依赖。在学习源码之前先了解一下docker的架构。
Docker架构:Docker由仓库(Registry)、镜像(image)、容器(container)三部分组成,它使用客户端-服务端(c/s)的架构模式。需要注意的是,docker的镜像不包含操作系统内核,它是由一层一层的只读文件系统组成的。
第一次接触docker是为了在服务器上跑深度学习模型,当时在b站上听了狂神的课,因为是以用为主,所以对docker的了解停留在基本命令的使用(镜像的拉取,容器的建立,Dockerfile的编写等)现在既然致力于成为一个有技术深度的Gopher,抓到这么优秀的go语言开源项目,不分析一波源码太亏了!(下篇文章开始学习源码,文末附docker常用命令)
Docker常用命令:
#镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker pull #下载镜像 docker image pull
docker rmi #删除镜像 docker image rm
#容器命令
docker run 镜像id #新建容器并启动
docker attach #进入容器正在执行的终端
docker exec #进入当前容器后开启一个新的终端
docker ps #列出所有运行的容器
docker rm 容器id #删除容器
docker cp 容器id:容器内路径 宿主机目的路径 #从容器内拷贝到宿主机上
#启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
#退出容器
exit #容器直接退出
ctrl +P +Q #容器不停止退出