Docker

1.什么是Docker

开发者们,Docker到底是什么,能干什么? - 知乎

Docker是一个快速交付应用、运行应用的技术:

Ubuntu和CentOS都是基于Linux内核,无非是系统应用不同,提供的函数库有差异,现在如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配。docker就可以解决这个问题。

  1. docker可以将程序及其依赖、运行环境、函数库、配置一起打包为一个镜像,这样就可以迁移到任意版的Linux操作系统上运行了,因为镜像中包含此程序所需完整的系统环境等等,仅依赖系统的Linux内核而不是系统应用。

Docker_第1张图片

2.镜像运行时利用沙箱机制形成隔离的容器,几个应用之间互不干扰。

3.启动、移除都可以通过命令来完成,方便快捷。

2.Docker与系统虚拟机的区别

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,在另外一个操作系统中也可以运行应用。它们两个的区别是什么?

系统虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统的一款软件。比如在window操作系统上安装运行Centos,其中间是通过Hypervisor(虚拟机监控程序)来实现的。

而Docker仅仅是封装了程序运行环境等等,并没有模拟完整的操作系统。

Docker_第2张图片 

2.1区别

  • Docker是一个系统上的一个进程,虚拟机是在操作系统上的操作系统。

  • docker相较于虚拟机来说体积小、性能好、启动速度块。

3.Docker架构

3.1镜像(Image)

Docker将应用程序及所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

3.2容器(Container)

镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

Docker_第3张图片 

3.3DocekrHub

DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry,如网易云镜像服务、阿里云镜像服务...

3.4Docker架构

Docker是一个CS架构的程序,由两部分组成:

  • 服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等。

  • 客户端:通过命令或者RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

Docker_第4张图片 

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_第5张图片

  • 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),其容器中的文件内容就会自适应改变,就相当于这两个文件中的内容是同步相同的

     Docker_第6张图片

 

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。举例:

 Docker_第7张图片

 构建镜像的命令:

Docker_第8张图片

创建并运行容器:

  像前面的idk配置,其他项目其实也基本一致,所以我们使用java:8-aloine镜像即可。如下:

Docker_第9张图片 

在微服务项目中,因为我们的模块比较多,一个一个构建镜像并创建运行容器就会特别的麻烦,所以我们使用DockerCompose。

8.DockerCompose

Compose文件可以理解为多个dockerfile的文件总和。

DockerCompose可以基于Compose文件帮我们快速的部署微服务项目,并且无需手动一个个打成镜像,再创建和运行容器。其Compose相当于一键全部构建成镜像并自动创建容器运行。举例:

Docker_第10张图片 

你可能感兴趣的:(docker,容器,运维)