01-docker的介绍与基础使用

背景

相信作为软件开发者,对于docker应该都不会陌生。自从有了docker之后,我们环境的部署、迁移、实例扩容等都变得极为简单,我们再也不用担心测试时的环境跟正式环境不一样导致一堆非代码逻辑问题导致的错误,也可以更加灵活的为应用添加或删减相应的资源,让有限的资源可以以最大程度得到利用。那么,Docker究竟是什么东西呢?他到底是通过什么方法实现上述功能的呢?其原理又是如何?今天我们就来一起探讨一下这个话题。

Docker是什么

Docker是一个容器。那么,既然是容器,肯定是用来装东西的,杯子是水的容器,房子是人的容器,那么Docker里面究竟装的是什么呢?实际上,在Docker当中,我们装的是应用(Application)。也就是说,Docker是应用的容器。

Docker是一种管理应用的现代手段,让应用管理变得更加容易预测与更加高效。

Docker的安装

关于Docker的安装,官网已经给出了各个系统极为详细得方案,这边就不再赘述了,不明白的同学可以去看一下:docker安装

搜索与拉取镜像

docker安装好之后,我们便可以尝试从docker hub中搜索目标基础镜像,如:nodemysql等,docker hub

这里可以搜索到所有你想要的基础镜像,搜索到之后,我们就可以使用以下命令将目标镜像拉取到本地:

bash 复制代码
docker pull node

PS: 如果觉得使用官方的仓库拉取太慢,可以参考以下教程使用阿里云的加速器

下载成功之后,使用以下命令可以查看已经下载到本地的镜像列表:

bash 复制代码
docker images

![图片转存失败,建议将图片保存下来直接上传](/Users/tangwenhui/Library/Application Support/typora-user-images/image-20221023191518568.png)

运行镜像

镜像下载到本地之后,我们就可以尝试让镜像运行起来了,我们以mysql为例,我们可以到docker hub搜索相应镜像的详细信息,上面会有详细得运行参数介绍:

其中的一些参数解释:

  • name启动的容器实例的名称
  • e代表给 docker 容器传入环境变量,如:MYSQL_ROOT_PASSWORD 代表 mysql 根用户的密码
  • ddocker是支持分离模式的,如果你不想敲完上述命令后,命令行一直输出命令,无法做其他事情,可以通过此参数规定使用分离模式启动
bash 复制代码
# 以下为一个真实启动的命令示例
docker run --name kmysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

执行命令之后,会在命令行中输出一长串的字符,这个就是启动起来的容器的id,我们可以通过这个id对这个启动起来的容器进行管理。

查看运行中的容器

我们的容器已经在后台运行起来了,那么,我们应该如何查看运行中的容器的信息呢?

bash 复制代码
docker ps
# 或
docker container ls

通过这个命令,我们可以看到该容器启动的一些信息。

如果我们想要查看容器更加详细的基础信息,如启动起来的mysql服务是在哪个ip地址,这样你才能使用mysql的客户端软件通过ip去访问mysql服务,可以使用以下命令:

bash 复制代码
docker inspect 00d
# 使用以下命令可以搜索 ip 地址相关的信息
docker inspect 00d | grep "IPAddress"

mysql服务启动起来之后,我们就可以尝试连接一下服务,看是否真的正常启动成功了。这边推荐使用dbeaver数据库,以下是该数据的安装、启动、连接数据库的详情:

  • 安装

    bash 复制代码
    docker pull dbeaver/cloudbeaver
  • 启动

    bash 复制代码
    sudo docker run --name cloudbeaver --rm -ti -p 8081:8978 -v /var/cloudbeaver/workspace:/opt/cloudbeaver/workspace dbeaver/cloudbeaver:latest

    运行上述命令后,将会在本机的8081端口启动一个web服务,我们只需要访问:http://localhost:8081即可。

  • 连接数据库

至此,我们就已经使用dbeaver成功连接上了我们本地启动的mysql服务了。

Docker的原理

简单的讲,Docker不隔离计算,只隔离环境

什么是环境

环境包括:文件系统网络用户权限等。

比如说在Docker容器内的进程,只能看到Docker容器内部的资源,例如我们再Docker容器内部看到的根目录/实际上在用户本机上可能只是映射到了某一个目录,如:/usr/fs/xxx

在进程中看到的网络,也是与用户本机的实际网络是相互隔离的。

执行进程的用户,也是Docker容器内部的用户,与用户本机的用户也是完全隔离的。

什么是计算

与虚拟机不同的是:"docker不隔离计算。docker容器中的进程也是真实的进程,而不是虚拟进程。"

docker容器的进程写入文件的时候,并不是在虚拟机里面写入文件,而是在用户本地的操作系统中的文件系统中写入,只不过与我们经常使用的文件隔离开了而已。

docker是一种隔离技术而非虚拟化技术

虚拟化技术最明显的特征是执行层面的虚拟化------虚拟CPU指令。例如你在电脑上装了一个虚拟机,但你的电脑并不会管理虚拟机的进程,因为虚拟机中的进程已经完全运行在虚拟化技术上了。

docker则是将自己直接嫁接到了操作系统上,docker中的进程,实际也是真实的进程。在docker当中的文件系统,也是真实的文件系统,只是被挂在到了某个特殊的文件路径上并做了隔离而已。

docker中使用的网络,也是真实的网络,同样只是做了隔离而已。

相关推荐
容器魔方2 小时前
中选名单出炉|18位学生入选开源之夏KubeEdge课题,欢迎加入!
云原生·容器·云计算
保持学习ing3 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
susu10830189114 小时前
Debian 11 Bullseye 在线安装docker
运维·docker·debian
love530love4 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
人生匆匆5 小时前
docker进入启动失败的容器
运维·docker·容器
退役小学生呀6 小时前
十、K8s集群资源合理化分配
linux·云原生·容器·kubernetes·k8s
魂尾ac8 小时前
Centos Docker 安装(100%成功)
linux·docker·centos
Johny_Zhao15 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
zwjapple16 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
代码老y18 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器