<返回更多

用了这么多年Docker,殊不知你还有这么多弯弯绕!

2023-11-13  微信公众号  哪吒编程
加入收藏

单体应用拆分成微服务后,能够实现快速开发迭代,但因为小服务太多,导致测试和部署的成本提高。

单体应用中,将Spring Boot工程打包成一个war包,然后部署在linux服务器的Tomcat中就可以了。

拆分成微服务后,修改一个需求,可能会涉及多个微服务,这个时候,被修改过的代码都需要重新测试、打包、部署、上线发布。无形之中,给现场运维人员增加了成倍的工作压力。

微服务通常会在共有云上创建ECS进行扩容,ECS通常只包含了基本的操作系统环境,没有包含运行JAVA的环境jdk,就需要在ECS上安装jdk,而且每个服务依赖的jdk版本可能也不会相同,一般情况下,都会采用jdk8,但有些喜爱前言技术的项目经理,可能要试一下jdk21,毕竟也是一个长期稳定的大版本。

而容器技术可以解决上面的两个问题(代码部署难、缺环境)。

时下容器技术最火的当属Docker,很多小伙伴也用了多年,只知道它是容器技术,可以将程序和依赖打到Docker里,然后发布在Linux服务器中,就完成了程序的部署,一次构建、到处运行,很牛逼,至于其它的,就不知道了,也不想知道~

一、神之容器 Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。

一个完整的Docker由以下七个部分组成:

用了这么多年Docker,殊不知你还有这么多弯弯绕!

二、Docker架构图

1、Docker Client 客户端

Docker Client是Docker的客户端工具,也被称为Docker命令行界面(CLI)。它是用户与Docker平台进行交互的主要方式。

Docker Client 的主要作用如下:

Docker Client是用户与Docker平台进行交互的重要工具。它提供了命令行界面,让用户能够方便地管理Docker容器和镜像,并进行资源配置和网络通信等操作。

2、Docker Daemon 守护进程

Docker Daemon是Docker的守护进程,它是Docker平台的后台服务组件,充当服务器角色。

Docker Daemon 的主要作用如下:

Docker Daemon是Docker平台的核心组件,提供容器、镜像、网络和数据卷的管理功能。它扮演着守护进程的角色,确保Docker平台的正常运行和管理。

3、镜像(Image)

在Docker镜像中,Distribution、Layer、Image、Registry和Reference各自扮演了重要角色。

4、Docker Driver 驱动模块

Docker Driver是Docker的驱动模块,主要负责驱动Docker容器的运行。它通过与操作系统的交互,实现对Docker容器的创建、启动、运行和管理等操作。

Docker Driver 的主要作用如下:

Docker Driver是Docker中非常重要的组件,它通过与操作系统的交互,实现了Docker容器的创建、运行和管理等功能,为Docker平台的正常运行提供了底层支持。

5、Docker Graph内部数据库

Docker Graph是Docker中的一种数据结构,用于记录和跟踪Docker镜像和容器之间的关系。

Docker Graph 的主要作用如下:

Docker Graph在Docker的较新版本中可能已经被替代或集成到其他组件中,因此具体实现和用法可能会因版本而异。

6、Docker Libcontainer函数库

Docker Libcontainer函数库中包含:

这些组件和技术在Libcontainer中协作,共同实现了Docker容器的隔离、资源管理、网络通信和权限控制等功能,为Docker平台的稳定性和安全性提供了重要支持。

7、Docker Container 容器实例

Docker Container是Docker中的容器实例,它是通过Driver和Libcontainer共同协作创建出来的。Driver提供了容器的运行环境定制,而Libcontainer则负责容器的具体创建和管理操作。Docker Container是Docker架构中服务交付的最终体现形式。实现“一次构建,到处运行”的目标,大大提高了应用程序的部署效率和可移植性。

Docker Container 的主要作用如下:

Docker Container是Docker技术的核心组件之一,它提供了轻量级、隔离的运行环境,用于部署、运行和管理应用程序。它的出现改变了传统应用部署和运维的方式,提高了开发、测试、运维的效率和质量。

三、Docker安装

1、卸载Docker

sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

2、需要的安装包

yum install -y yum-utils

3、设置镜像仓库

yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

用国内的。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包索引。

yum mackecache fast

4、安装Docker相关

ce社区版,ee企业版,推荐安装企业版。

yum install docker-ce docker-ce-cli containerd.io。

用了这么多年Docker,殊不知你还有这么多弯弯绕!

5、启动Docker

systemctl start docker

6、使用docker version查看版本

用了这么多年Docker,殊不知你还有这么多弯弯绕!

7、启动hello world镜像

docker run hello-world

用了这么多年Docker,殊不知你还有这么多弯弯绕!

8、卸载

yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

四、run的流程和docker原理

1、run的流程

用了这么多年Docker,殊不知你还有这么多弯弯绕!

2、与传统虚拟化方式对比

这就是Docker为何比虚拟化更快的原因,Docker有着比虚拟机更少的抽象层,docker利用的是宿主机的内核,VM需要的是Guest OS。

用了这么多年Docker,殊不知你还有这么多弯弯绕!

五、Docker镜像常用命令

1、基本命令

docker version
docker info
docker 命令 --help #万能命令

docker images。

用了这么多年Docker,殊不知你还有这么多弯弯绕!

解释:

可选项

2、搜索镜像

docker search。

可选项

--filter-STATUS-3000 #搜索大于3000的。

3、下载镜像

指定版本下载。

docker pull 镜像名[:tag]。

用了这么多年Docker,殊不知你还有这么多弯弯绕!

4、删除镜像

docker rmi -f 镜像id。

六、docker容器常用命令

1、下载容器

docker pull centos。

2、docker run [可选参数] image

参数说明:

3、列出所有的运行的容器

docker ps [参数]。

例如:docker ps -aq,显示当前正在运行的容器的编号。

4、删除容器

5、启动和停止容器

6、进入当前正在运行的容器

  1. 方式一:docker exec -it 容器id /bin/bash,进入容器后开启一个新的终端(常用)。
  2. 方式二:docker attach 容器id,进入容器当前正在执行的终端。

7、从容器内拷贝文件到主机

docker cp 容器id:容器内路径 主机路径。

例如:docker cp 容器id:/home/test.java /home。

8、其它常用命令

后台启动容器 -d。

查看日志命令。

docker logs --help。

显示指定行数的日志:

docker logs -tf --tail 10 容器id。

-f:内容,,,-t:时间。

例如:循环执行。

docker run -d centos /bin/sh -c "while;do echo hello world;sleep 1;done"。

显示容器中的进行信息。

查看docker内部的进程信息:docker top 容器id。

查看容器的元数据。

docker inspect --help。

显示容器的所有信息:

docker inspect 容器id。

七、docker常用命令小结

常用命令

命令含义

attach

当前shell下attach连接指定运行镜像

build

通过Dockerfile定制镜像

commit

提交当前容器为新的镜像

cp

从容器中拷贝指定文件或者目录到宿主机中

create

创建一个新的容器,同run 但不启动容器

diff

查看docker容器变化

events

从docker服务获取容器实时事件

exec

在已存在的容器上运行命令

export

导出容器的内容流作为一个tar归档文件(对应import)

history

展示一个镜像形成历史

images

列出系统当前镜像

import

从tar包中的内容创建一个新的文件系统映像(对应export)

info

显示系统相关信息

inspect

查看容器详细信息

kill

强制停止指定docker容器

load

从一个tar包中加载一个镜像(对应save)

login

注册或者登陆一个docker源服务器

logout

从当前Docker registry退出

logs

输出当前容器日志信息

pause

暂停容器

port

查看映射端口对应的容器内部源端口

ps

列出容器列表

pull

从docker镜像源服务器拉取指定镜像或者库镜像

push

推送指定镜像或者库镜像至docker源服务器

rename

重命名容器

restart

重启运行的容器

rm

移除一个或者多个容器

rmi

移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)

run

创建一个新的容器并运行一个命令

save

保存一个镜像为一个tar包(对应load)

search

在docker hub中搜索镜像

start

启动容器

stats

统计容器使用资源

stop

停止容器

tag

给镜像打标签

top

查看容器中运行的进程信息

unpause

取消暂停容器

version

查看容器版本号

wait

截取容器停止时的退出状态值

关键词:Docker      点击(20)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多Docker相关>>>