Docker
Docker是时下热门的容器技术,Docker是os层虚拟化架构(虚拟出来的操作系统和宿主机操作系统共享一个内核)的一种体现产品。
容器化技术(我们可以把tomcat,redis,nginx……安装docker容器中),可以方便对软件的环境(开发环境/测试环境/生产环境……)进行搬运,可以极大的减少部署成本。且各个容器之间是相互隔离的,减少软件之间的影响。
Docker 架构
Docker 包括三个基本概念:
镜像(Image):一个只读模板。
容器(Container):通过镜像创建容器。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库用来保存镜像。
容器与镜像的关系类似于面向对象编程中的对象与类。
在安装好并启动了Docker之后,我们可以使用在命令行中使用Docker命令操作Docker,比如我们使用如下命令打印Docker的版本信息。
docker verion
其结果如下:
从上面的图中,我们看到打出了两个部分的信息:Client和Server。
这是因为Docker跟大部分服务端软件一样(如MySQL),都是使用C/S的架构模型,也就是通过客户端调用服务器,只是我们现在刚好服务端和客户端都在同一台机器上而已。
因此,我们可以使用下面的图来表示Docker的架构,DOCKER_HOST是Docker Server,而Clinet便是我们在命令中使用Docker命令。
Docker Engine
Docker Server为客户端提供了容器、镜像、数据卷、网络管理等功能,其实,这些功能都是由Docker Engine来实现的。
- dockerd:服务器守护进程。
- Client docker Cli:命令行接口
- REST API:除了cli命令行接口,也可以通过REST API调用Docker
下面是Docker Engine的示例图:
Docker安装
1.查看是否已安装docker,如安装,卸载旧版本极其相关依赖
1 | yum list installed | grep dockeryum remove docker \<br> docker-client \<br> docker-client-latest \<br> docker-common \<br> docker-latest \<br> docker-latest-logrotate \<br> docker-logrotate \<br> docker-engine |
2.安装docker
1 | yum install -y docker |
3.启动及查看
systemctl start/status/stop docker
docker version
注册中心Registery
类似于maven仓库,集中存放镜像文件的场所,一个Registry中会有多个Repository
仓库Repository是对于其中的镜像进行分类管理,一个Repository中会有多个不同tag的Image
Registry分为公有(public)和私有(private)两种形式
最大的公有Registry是Docker Hub,存放了数量庞大的镜像供用户下载使用https://hub.docker.com
国内的公开Registry包括USTC、网易云、DaoCloud、AliCloud等
配置国内镜像(USTC)
- 在宿主机器编辑文件: vi /etc/docker/daemon.json.
- 在该配置文件中加入(没有该文件的话,就建一个:
1 2 3 | { "registry-mirrors" : [ "https://docker.mirrors.ustc.edu.cn" ] } |
镜像(Image)相关操作
Docker本质上是一个运行在Linux操作系统上的应用,而Linux操作系统分为内核和用户空间,无论是CentOS还是Ubuntu,都是在启动内核之后,通过挂载Root文件系统来提供用户空间的,而Docker镜像就是一个Root文件系统。
Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像是一个静态的概念,不包含任何动态数据,其内容在构建之后也不会被改变。
下面的命令是一些对镜像的基本操作,如下:
1.查看镜像列表
1 2 3 4 | # 列出所有镜像 docker image ls #简洁版本 docker images |
2.拉取镜像
我们可以使用命令从一些公用仓库中拉取镜像到本地,下面就列举一些常用的公用仓库拉取镜像的方式!。
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
拉取一个镜像,需要指定Docker Registry的地址和端口号,默认是Docker Hub,还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,另外,仓库名则由作者名和软件名组成。可以从https://hub.docker.com上查找相关镜像。
3.删除镜像
当本地有些镜像我们不需要时,那我们也可以删除该镜像,以节省存储空间,不过要注意,如果有使用该镜像创建的容器未删除,则不允许删除镜像。
1 2 3 4 5 | # image_name表示镜像名,image_id表示镜像id dockere image rm image_name /image_id #删除镜像的快捷命令: docker rmi image_name /image_id |
4.导入导出镜像
可将已有镜像导出,以后可使用自己的镜像,不用到远程(特别是国外)去拉取
1 | #导出镜像<br>docker save image_name:tag/image_id > path<br>#导入镜像<br>docker load < path#path代表保存或加载的路径 |
容器(Container)相关操作
Docker的镜像是用于生成容器的模板,镜像分层的,镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象,对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。
1.启动和停止容器
1.以交互方式启动容器: docker run -it --name 容器名称 镜像 /bin bash.
1 | docker run -it --name xx xx /bin bash |
2.以守护进程方式启动容器: docker run -d --name 容器名称 镜像
1 | docker start container_id |
2.停止正在运行的容器
1 2 | # container_id表示容器的id docker stop container_id |
3.查看所有容器
1 2 3 4 | # 查看所有容器 docker container ls # 查看所有容器 docker ps |
4.删除容器
不允许删除正在运行的容器,因此如果要删除的话,就必须先停止容器。
1 2 3 4 5 6 7 | # container_id表示容器id,通过docker ps可以看到容器id $ docker rm container_id # 删除所有容器 docker rm $(docker ps -q) # 删除所有退出的容器 docker container prune |
5.进入容器
1 2 | # 进入容器,container_id表示容器的id,command表示Linux命令,如/bin/bash docker exec -it container_id command |
Docker应用
1.拉取tomcat镜像,启动容器,映射端口
1 2 | docker pull tomcat<br>docker images docker run -d --name docker-tomcat -p 9090:8080 tomcat:9 |
2.部署application
1 2 | docker exec -it docker-tomcat /bin/bash docker cp xx.war docker-tomcat: /webapps |
3.启动容器,访问application
Docker网络管理
Docker swarm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!