文章目录
docker笔记
教学视频
https://www.bilibili.com/video/BV1ZU4y1a777
相关文档
https://docs.docker.com/reference/
文章简述
这边我只是简单的过了一遍docker知识,以下是个人笔记,不太全面以及有些知识点可能记录的有点错误,这篇文章主要目的在于了解docker。
想更加了解全面知识可以去看上面的相关文档
1 容器技术
操作系统层虚拟化
1.1 内核技术组成
- Cgroups(Control group)资源管理
- SELinux安全
- NameSpace命名空间
1.2 NameSpace命名空间(Linux)
- UTS
- NETWORK
- MOUNT
- USER
- PID
- IPC
1.3 Docker与传统虚拟化的对比
2 镜像、容器
镜像相当于是模板,容器是实例
2.1 概念
- 镜像是容器的核心
- 在Docker中容器是基于镜像启动的
- 镜像采用分层设计
- 使用COW(Copy of Write)技术创建容器
2.2 来源
- 官方下载
- 自己制作
3 Docker镜像管理
镜像管理的方式以及命令
相关逻辑
对于镜像的管理,需要知道镜像可以从哪里获取到有,以及获取方式,获取下来后还要查看这个镜像的信息,以及后续对镜像的备份和恢复,镜像操作的历史信息查看等等。
相关命令
docker // 单单输入docker即可显示出提示信息
docker --help
docker images // 查看
docker search ... // 查找
docker rmi 镜像名称:镜像标签 // 删除
docker push ... // 上传(上传至仓库)
docker pull ... // 下载(从仓库下载)
docker save ... // 备份
docker load ... // 恢复
docker history ... // 查看历史
docker inspect ... // 查看详细信息
docker tag ... // 给镜像重命名以及新标签
4 容器管理
每一个容器在宿主机上对应一个进程
以下介绍简单的容器管理的方式以及命令
4.1 相关逻辑
如何通过镜像启动运行一个容器,以及进入容器后要对容器的具体信息查询,容器的删除、停止、重启等
4.2 相关命令
docker run … // 指定某个镜像创建容器
docker start …
docker stop …
docker restart …
docker top 容器id
docker inspect …
docker rmi/rm*/… …
docker exec 容器id
docker attach …
5 自定义镜像
镜像它是分层设计的,所以对于镜像可以自己再次进行封装,即在原来的层上面再封装一层或几层,这样就可以实现出一个更多功能的镜像。
5.1 自定义镜像方式
-
commit方式
-
Dockerfile方式
6私有仓库
对于docker来说,有镜像、容器以及仓库,从仓库上拉取镜像以及上传自定义的镜像,有了镜像就可以生成容器。
6.1 逻辑图
7 外部存储卷
7.1 What
外部存储卷相当于一个共享空间,作用对象是多个容器之间
7.2 Why
为了多个容器之间可以共享数据信息,减少多容器重复操作。
比如容器1和容器2都需要相同的配置信息文件,那么正常来说需要在容器1和容器2上都创建相同的配置信息文件,外部存储卷概念的应用意思是把宿主机上的某个目录定义为一个公共目录,然后容器1和容器2就可以共享这个宿主机上的目录,就可以实现只改动这一个目录来达到同时修改了容器1和2的效果。
7.3 How
7.3.1 容器间的卷服务
多个容器之间可以映射同一个目录来达到数据共享的目的
相关命令
使用参数-v来指定宿主机目录映射到容器内的目录
docker run -itd -v 宿主机真实目录:容器内目录 指定容器
7.3.2 多主机间的卷服务
上述是为了实现一个宿主机内多个容器之间的数据信息共享。然而如果要实现多个主机多容器之间的信息共享,需要依靠在多主机之间依靠NFS服务实现多主机间的信息共享+容器间的卷服务。
实现方式
- 在多个主机之间选择主机1作为NFS服务主机,将主机1的NFS服务进行配置(选择某个目录进行共享)并开启。
- 其余主机就可以通过mount将NFS服务机上的共享目录挂载在本地。(这里就实现了多主机之间共享数据功能)
- 然后在每个主机内部可以创建多个容器,这多个容器又可以指定映射共享多主机共享的那个目录。(这样就实现了多主机多容器都共享同一个目录)
8 *对外发布docker服务
8.1 What&Why
假设只有一台宿主机以及该台宿主机下已经配置了两个容器,分别是nginx服务容器和apache服务容器。
此时要实现的效果是外部通过浏览器访问宿主机时(默认是访问80端口),可以直接访问到nginx或者apache服务。
基于上面的需求,那么就需要将nginx容器/apache容器(二选一)与宿主机的80端口进行绑定,这样这个宿主机就相当于是一个nginx服务器/apache服务器,外部访问这个宿主机的时候(访问80端口的时候),访问的就是该宿主机中80端口对应绑定的容器了。而且宿主机80端口绑定要切换绑定容器也很方便。
8.2 How
-
使用docker命令的-p参数把容器端口与宿主机端口进行绑定
-
-p 容器端口:宿主机端口
-
在启动容器的时候可以进行端口绑定
-
例:宿主机80端口绑定httpd容器(apache服务)/nginx容器 docker run -itd -p 80:80 docker.io/myos:httpd docker run -itd -p 80:80 docker.io/myos:nginx