1.什么是Docker
Docker是一个快速交付应用、运行应用的技术:
Ubuntu和CentOS都是基于Linux内核,无非是系统应用不同,提供的函数库有差异,现在如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配。docker就可以解决这个问题。
- docker可以将程序及其依赖、运行环境、函数库、配置一起打包为一个镜像,这样就可以迁移到任意版的Linux操作系统上运行了,因为镜像中包含此程序所需完整的系统环境等等,仅依赖系统的Linux内核而不是系统应用。
2.镜像运行时利用沙箱机制形成隔离的容器,几个应用之间互不干扰。
3.启动、移除都可以通过命令来完成,方便快捷。
2.Docker与系统虚拟机的区别
Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,在另外一个操作系统中也可以运行应用。它们两个的区别是什么?
系统虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统的一款软件。比如在window操作系统上安装运行Centos,其中间是通过Hypervisor(虚拟机监控程序)来实现的。
而Docker仅仅是封装了程序运行环境等等,并没有模拟完整的操作系统。
2.1区别
-
Docker是一个系统上的一个进程,虚拟机是在操作系统上的操作系统。
-
docker相较于虚拟机来说体积小、性能好、启动速度块。
3.Docker架构
3.1镜像(Image)
Docker将应用程序及所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
3.2容器(Container)
镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
3.3DocekrHub
DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry,如网易云镜像服务、阿里云镜像服务...
3.4Docker架构
Docker是一个CS架构的程序,由两部分组成:
-
服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等。
-
客户端:通过命令或者RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
4.Docker镜像的相关命令
-
docker 命令 --help:查看此命令有关的帮助文档。
-
docker pull nginx latest:从远程拉取nginx最新版本的镜像。
-
docker images:查看docker仓库中所有的镜像。
-
docker save -o nginx.tar niginx:latest:将镜像下载保存到本地文件。
-
docker rmi nginx:latest:删除docker仓库中的镜像。
-
docker load -i niginx.tar:加载本地的镜像。
5.Docker容器的相关命令
-
docker logs -f:持续查看容器日志,ctrl+c可以退出查看。
-
docker ps -a:查看所有容器的状态。
创建容器命令解读:
-
docker run:创建并运行一个容器。
-
--name:给容器起一个名字
-
-p :将宿主机端口与容器端口映射,这个容器是运行在docker上的,但我们想的是在浏览器通过url进行访问,那么就要开辟一个端口的映射。冒号左侧是宿主机端口,右侧是容器端口。
-
-d:后台运行容器。
-
nginx:表示镜像的名称。
其他命令:
-
docker start 容器名称:重新启动这个容器,进程号还是当时创建时的进程号。
-
docker stop 容器名称:停止这个容器,杀死进程。
-
docker rm 容器名称 -f:强制删除这个容器。
-
docker exec -it mr bash:进入容器执行命令。exit退出。
6.数据卷
数据卷是一个虚拟目录,其实际指向宿主机文件系统中的某个文件(这个文件是系统自动创建的),那么我们可以将数据卷和容器中的某些文件进行挂载 ,这样我们只需修改数据卷指向宿主主机中的文件(使用vim),其容器中的文件内容就会自适应改变,就相当于这两个文件中的内容是同步相同的。
6.1数据卷的作用
将容器与数据修改分离,解耦合,方便操作容器内的数据,保证数据安全。
6.2数据卷的操作
-
docker volume create 数据卷名称:创建数据卷。
-
docker volume ls:查看所有的数据卷。
-
docker volume inspect 数据卷名称:查看数据卷详细信息(查看数据卷指向宿主主机中的文件)。
-
docker volume rm 数据卷名称:删除数据卷。
-
docker volume prune:删除没有使用的数据卷。
6.3如何将数据卷和容器进行挂载
语法:-v 数据卷:容器内文件
注意:如果运行命令时数据卷不存在,数据卷会自动被创建出来,而且数据卷指向宿主主机的文件也是自动创建的,我们改变不了地址,只能查询到该地址后再去修改文件。
6.4宿主机文件直接和容器内文件进行挂载
语法:-v 宿主主机自定义文件:容器内文件
我们也可以在宿主主机上自定义文件,然后直接和容器内的文件进行挂载。这样宿主主机的文件地址是我们自己定义的,我们自己会比较清楚。
7.Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。举例:
构建镜像的命令:
创建并运行容器:
像前面的idk配置,其他项目其实也基本一致,所以我们使用java:8-aloine镜像即可。如下:
在微服务项目中,因为我们的模块比较多,一个一个构建镜像并创建运行容器就会特别的麻烦,所以我们使用DockerCompose。
8.DockerCompose
Compose文件可以理解为多个dockerfile的文件总和。
DockerCompose可以基于Compose文件帮我们快速的部署微服务项目,并且无需手动一个个打成镜像,再创建和运行容器。其Compose相当于一键全部构建成镜像并自动创建容器运行。举例: