虚拟化技术
虚拟机就是在你的操作系统里面装一个软件(如VMWare),然后通过这个软件再模拟出n台“子电脑”出来。子电脑意味着要虚拟出整个操作系统,会导致占用空间更大,启动更慢
虚拟机
VMWare官方文档:https://docs.vmware.com/cn/VMware-Workstation-Pro/index.html
网络连接类型
网络连接类型 | 特点 | 标识 |
---|---|---|
桥接 | 虚拟机和宿主机在网络上是平级的关系,可以把虚拟机当作一台独立的电脑,然后跟宿主机连接在同一交换机上。宿主机、虚拟机、其他PC机三者可以ping通。 | VMnet0 |
NAT | 只要宿主机能上网,虚拟机就能上网。主机和虚拟机可以ping通,但是其他机器ping不通虚拟机。 | VMnet8 |
仅主机 | 虚拟机与宿主机直接连起来 | VMnet1 |
Bridged桥接模式
https://note.youdao.com/ynoteshare1/index.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note
确认一下主机的ip地址、网关、DNS
vi /etc/sysconfig/network-scripts/ifcfg-eth0
分区
分区 | 用途 | 大小 |
---|---|---|
/boot | 系统空间 | 200M |
/ | 应用空间 | 10GB |
swap | 虚拟交换空间 | 2048M |
容器技术
容器技术也是虚拟化技术,属于轻量级的虚拟化。但是它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
特性 | 虚拟机 | 容器 |
---|---|---|
隔离级别 | 操作系统级别 | 进程级别 |
隔离策略 | Hypervisor | GGroups |
系统资源 | 5%~15% | 0%~5% |
启动时间 | 分钟 | 秒 |
镜像存储 | GB~TB | KB~MB |
集群规模 | 上百 | 上万 |
高可用策略 | 备份,容灾,迁移 | 弹性,负载,动态 |
镜像 | 隔离 | 资源消耗 | |
---|---|---|---|
虚拟机VMWare | 虚拟硬件,运行完整的操作系统 | 开启多个虚拟机 | 几G 分钟 |
容器Docket | 直接运行在宿主机上 | 容器间隔离 每个容器内都有一个属于自己的文件系统,互不影响 | 几M 秒级 |
docker中的容器是共享Host OS 的,而VM存在独立的OS。每一个容器与VM的功能是相似的,但是没有VM那么笨重
Docket容器
镜像+集装箱式的隔离
Docker概述
Docker 是一个开源的应用容器引擎,基于GO语言并遵从Apache2.0协议开源。
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
问题一:环境的切换与配置麻烦。
开发(开发环境)----> 测试(测试环境)-----> 运维(生产环境)
之前:在开发环境构建出了一个war包,先在Linux下载好Java、Tomcat、MySQL,配置好环境变量,将war包丢到Tomcat的webapps文件夹下,才能在Linux跑起来。
Docket:将我们的想要的环境构建(打包)成一个镜像,然后我们可以推送(发布)到网上去。想要用这个环境的时候,在网上拉取一份。
有了Docker,我们在搭环境的时候,跟以前的方式就不一样了。
现在:在Linux下直接拉取一份镜像(各种环境都配好了),将镜像运行起来,把war包丢进去就好了。
问题二:应用之间需要隔离。
把多个应用部署在同一台服务器上,假设应用之间不隔离,那可能会出现什么问题?
如果版本更新,导致服务不可用
如果一个应用出现了问题,导致CPU占100%。那另一个应用也会受到关联,跟着一起凉凉了。
这两个应用是完全不同技术栈的应用,比如一个PHP,一个.NET。这两个应用各种的依赖软件都安装在同一个服务器上,可能就会造成各种冲突/无法兼容,这可能调试就非常麻烦了。
Docket:Docker底层用的Linux的cgroup和namespace这两项技术来实现应用隔离。
在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间(namespace)区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。
Docket架构
组件 | 概念 | 说明 |
---|---|---|
Images | 镜像 | 通过运行镜像启动容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容-代码,运行时,库、环境变量和配置文件。 |
Container | 容器 | 容器是独立运行的一个或一组应用,是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 |
Registry | 仓库 | DockerHub就相当于Maven的Repository,在Respository中存放是一个一个的jar包,而在DockerHub存放的是一个一个的镜像。 |
容器与镜像的关系类似于面向对象编程中的对象与类。
Images container1 = new Images();
Images container2 = new Images();
…
Images containersn = new Images();
面向对象 | Docker |
---|---|
对象 | 容器 |
类 | 镜像 |
其他组件 | 概念 | 说明 |
---|---|---|
Client | 客户端 | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Host | 主机 | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Machine | 命令行工具 | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker网络原理
Docket镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行库、环境变量和配置文件。
将应用和环境打包成一个镜像!就可以直接运行。
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel,
Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。这一层与我们典型的
Linux/Unix系统是一样的,包含boot加載器和内核。当boot加载完成之后整个内核就都在内存中了,此时
内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中 的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu,
Centos等等。
Docket镜像构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
dockerfile
dockerfile 是用来构建docker镜像的文件!命令参数脚本!
# 基础镜像,一切从这里开始构建
FROM 10.45.80.1/public/centos7.6_java8_tomcat9_base:9.0.37
# 镜像是谁制作的
MAINTAINER srilanka.whalecloud
# 镜像构建的时候需要运行的命令
RUN cd /usr/tomcat/tomcat9.0/webserver/webapps/ && mkdir fm-web
# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
ADD Code/fm-prj-srilanka-parent/fm-prj-srilanka-web/target/fm-web/ /usr/tomcat/tomcat9.0/webserver/webapps/fm-web/
# 类似ADD,将我们文件拷贝到镜像中
COPY Code/docker-app.def /app/docker-app.def
COPY Code/ZSMART_HOME /app/ZSMART_HOME
# 构建的时候设置环境变量!
ENV ZSMART_HOME /app/ZSMART_HOME
ENV CATALINA_HOME /usr/tomcat/tomcat9.0/webserver
ENV LOG_PATH /app/logs
ENV z_app zpass
ENV srvRunPath fm
ENV LANG en_US.UTF-8
# 镜像构建的时候需要运行的命令
RUN chown -R zpaas:zpaas /app/ZSMART_HOME \
&& chmod +x /app/ZSMART_HOME/bin/* \
&& chown -R zpaas:zpaas /usr/tomcat/tomcat9.0/webserver \
&& mkdir -p /app/logs \
&& chmod +x /app/docker-app.def \
&& chown -R zpaas:zpaas /app
# 指定这个容器启动的时候要运行的命令,可以追加命令
ENTRYPOINT ["/usr/local/bin/tini", "-g", "--", "/app/docker-entrypoint.sh"]
# 挂载的目录
VOLUME ["/app/logs"]
# 镜像的工作目录
WORKDIR /app
# 指定执行后续命令的用户和用户组
USER zpaas
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
CMD ["start"]
#注
#1)CMD 和 ENTRYPOINT
#CMD指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
#ENTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
#2)
EXPOSE # 保留端口配置
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
镜像构建
docker build -f 文件路径 -t 用户名/镜像名:[tag] .
运行镜像
发布镜像
(DockerHub 、阿里云仓库)
https://hub.docker.com/
Docket容器
容器数据卷
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
Docker安装
#卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装Docket(使用root权限操作)
yum install -y docker
#开启Docket服务
systemctl start docker.service
#查看安装结果
docker version
#设置开机启动
systemctl enable docker.service
#配置Docket镜像下载加速(默认安装后的Docker环境在拉取Docker镜像时速度很慢)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://x44nsz66.mirror.aliyuncs.com"]
}
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
#阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
systemctl daemon-reload
systemctl restart docker.service
#检查加速器是否生效
docker info
Docker命令
Docker镜像
命令 | 用法 | 含义 | 参数 | 备注 |
login | docker login [OPTIONS] | 登陆到一个Docker镜像仓库 | docker login -u 用户名 -p 密码 docker logout退出登陆 | |
pull | docker pull [OPTIONS] 镜像:版本 | 从docker中心镜像仓库拉取指定镜像 | -a :拉取所有 tagged 镜像 | |
--disable-content-trust:忽略镜像的校验,默认开启 | ||||
push | docker push [OPTIONS] 镜像:版本 | 推送指定镜像或者库镜像至docker源服务器 | --disable-content-trust:忽略镜像的校验,默认开启 | |
search | docker search [OPTIONS] 镜像 | 在 docker hub中心镜像仓库中搜索镜像 | --automated :只列出 automated build类型的镜像; | NAME镜像仓库源的名称。DESCRIPTION镜像的描述 |
--no-trunc :显示完整的镜像描述; | STARS点赞数。OFFICIAL是否 docker 官方发布。AUTOMATED自动构建 | |||
-f <过滤条件>:列出收藏数不小于指定值的镜像。 | ||||
images | docker images [OPTIONS] 镜像:版本 | 查看本地主机的所有镜像 | -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层); | REPOSITORY镜像的仓库源 |
--digests :显示镜像的摘要信息; | TAG镜像的标签 | |||
-f :显示满足条件的镜像; | IMAGE ID镜像的id | |||
--format :指定返回值的模板文件; | CREATED镜像的创建时间 | |||
--no-trunc :显示完整的镜像信息; | SIZE镜像的大小 | |||
-q :只显示镜像ID。 | ||||
rmi | docker rmi [OPTIONS] 镜像:版本 | 删除本地一个或多个镜像 | -f :强制删除; | |
--no-prune :不移除该镜像的过程镜像,默认移除; | ||||
tag | docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] | 给本地镜像打标签 | ||
build | docker build [OPTIONS] PATH | URL | - | 使用 Dockerfile 创建镜像。 | --build-arg=[] :设置镜像创建时的变量; | |
--cpu-shares :设置 cpu 使用权重; | ||||
--cpu-period :限制 CPU CFS周期; | ||||
--cpu-quota :限制 CPU CFS配额; | ||||
--cpuset-cpus :指定使用的CPU id; | ||||
--cpuset-mems :指定使用的内存 id; | ||||
--disable-content-trust :忽略校验,默认开启; | ||||
-f :指定要使用的Dockerfile路径; | ||||
--force-rm :设置镜像过程中删除中间容器; | ||||
--isolation :使用容器隔离技术; | ||||
--label=[] :设置镜像使用的元数据; | ||||
-m :设置内存最大值; | ||||
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap; | ||||
--no-cache :创建镜像的过程不使用缓存; | ||||
--pull :尝试去更新镜像的新版本; | ||||
--quiet, -q :安静模式,成功后只输出镜像 ID; | ||||
--rm :设置镜像成功后删除中间容器; | ||||
--shm-size :设置/dev/shm的大小,默认值是64M; | ||||
--ulimit :Ulimit配置。 | ||||
--squash :将 Dockerfile 中所有的操作压缩为一层。 | ||||
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。 | ||||
--network: 默认 default。在构建期间设置RUN指令的网络模式 | ||||
history | docker history [OPTIONS] 镜像 | 查看指定镜像的创建历史。 | -H :以可读的格式打印镜像大小和日期,默认为true; | |
--no-trunc :显示完整的提交记录; | ||||
-q :仅列出提交记录ID。 | ||||
save | docker save [OPTIONS] 镜像.tar [镜像...] | 导出镜像 | -o :输出到的文件。 | |
load | docker load [OPTIONS] | 导入镜像 | --input , -i : 指定导入的文件,代替 STDIN。 | |
--quiet , -q : 精简输出信息。 | ||||
import | docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] | 从归档文件中创建镜像 | -c :应用docker 指令创建镜像; | |
-m :提交时的说明文字; | ||||
info | docker info | 显示 Docker 系统信息,包括镜像和容器数 | ||
version | docker version | 查看 docker版本号 |
Docker容器
先有镜像才能创建容器
命令 | 用法 | 含义 | 参数 | 备注 |
run | docker run [OPTIONS] 镜像 | 创建一个新的容器并运行 | -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; | |
-d: 后台运行容器,并返回容器ID; | ||||
-i: 以交互模式运行容器,通常与 -t 同时使用; | ||||
-P: 随机端口映射,容器内部端口随机映射到主机的端口 | ||||
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口 | ||||
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; | ||||
--name="nginx-lb": 为容器指定一个名称; | ||||
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; | ||||
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; | ||||
-h "mars": 指定容器的hostname; | ||||
-e username="ritchie": 设置环境变量; | ||||
--env-file=[]: 从指定文件读入环境变量; | ||||
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行; | ||||
-m :设置容器使用内存最大值; | ||||
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; | ||||
--link=[]: 添加链接到另一个容器; | ||||
--expose=[]: 开放一个端口或一组端口; | ||||
--volume , -v: 绑定一个卷 | ||||
create | docker create [OPTIONS] 容器 | 创建一个新的容器但不启动它 | 同run | |
start | docker start 容器 | 启动容器 | ||
stop | docker stop 容器 | 停止容器 | ||
restart | docker restart 容器 | 重启容器 | ||
kill | docker kill [OPTIONS] KILL 容器 | 杀掉一个运行中的容器 | -s :向容器发送一个信号 | |
rm | docker rm [OPTIONS] 容器 | 移除一个或多个容器 | -f :通过 SIGKILL 信号强制删除一个运行中的容器。 | 删除所有已经停止的容器 docker rm $(docker ps -a -q) |
-l :移除容器间的网络连接,而非容器本身。 | ||||
-v :删除与容器关联的卷。 | ||||
pause | docker pause 容器 | 暂停容器中所有的进程 | ||
unpause | docker unpause 容器 | 取消暂停容器中所有的进程 | ||
exec | docker exec [OPTIONS] | 在运行的容器中执行命令 | -d :分离模式: 在后台运行 | |
-i :即使没有附加也保持STDIN 打开 | ||||
-t :分配一个伪终端 | ||||
ps | docker ps [OPTIONS] | 查看容器列表 | -a :显示所有的容器,包括未运行的。 | CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。created(已创建)restarting(重启中)running(运行中)removing(迁移中)paused(暂停)exited(停止)dead(死亡) PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。 NAMES: 自动分配的容器名称。 |
-f :根据条件过滤显示的内容。 | ||||
--format :指定返回值的模板文件。 | ||||
-l :显示最近创建的容器。 | ||||
-n :列出最近创建的n个容器。 | ||||
--no-trunc:不截断输出。 | ||||
-q :静默模式,只显示容器编号。 | ||||
-s :显示总的文件大小。 | ||||
inspect | docker inspect [OPTIONS] 容器/镜像 | 获取容器/镜像的元数据。 | -f :指定返回值的模板文件。 | |
-s :显示总的文件大小。 | ||||
--type :为指定类型返回JSON。 | ||||
top | docker top [OPTIONS] 容器 | 查看容器中运行的进程信息 | ||
attach | docker attach [OPTIONS] 容器 | 连接到正在运行中的容器 | ||
events | docker events [OPTIONS] | 从服务器获取实时事件 | -f :根据条件过滤事件; | |
--since :从指定的时间戳后显示所有事件; | ||||
--until :流水时间显示到指定的时间为止; | ||||
logs | docker logs [OPTIONS] 容器 | 获取容器的日志 | -f : 跟踪日志输出 | |
--since :显示某个开始时间的所有日志 | ||||
-t : 显示时间戳 | ||||
--tail :仅列出最新N条容器日志 | ||||
wait | docker wait 容器 | 截取容器停止时的退出状态值 | ||
export | docker export [OPTIONS] 容器 | 将文件系统作为一个tar归档文件导出到STDOUT。 | -o :将输入内容写到文件。 | |
port | docker port 容器 | 查看映射端口对应的容器内部源端口 | ||
commit | docker commit [OPTIONS] 容器 | 从容器创建一个新的镜像 | -a :提交的镜像作者; | |
-c :使用Dockerfile指令来创建镜像; | ||||
-m :提交时的说明文字; | ||||
-p :在commit时,将容器暂停。 | ||||
cp | docker cp [OPTIONS] A B | 容器与主机之间的数据拷贝,把a复制到b中 | -L :保持源目标中的链接 | docker cp [OPTIONS] 容器:目录 本机目录 docker cp [OPTIONS] 本机目录 容器:目录 |
diff | docker diff 容器 | 检查容器里文件结构的更改。 |
Docker安装实例
nginx
docker search nginx
docker pull nginx:latest
docker images
docker run --name nginx_xxx -p 8080:80 -d nginx
docker ps
http://127.0.0.1:8080
mysql
docker search mysql
docker pull mysql:latest
docker images
docker run -itd --name mysql_xxx -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker ps
docker exec -it mysql_xxx bash
redis
docker search redis
docker pull redis:latest
docker images
docker run --name redis_xxx -p 6379:6379 redis
docker ps
docker exec -it redis_xxx /bin/bash
mongo
docker search mongo
docker pull mongo:latest
docker images
docker run --name mongo_xxx -p 27017:27017 mongo
docker ps
docker exec -it mongo_xxx mongo admin
zookeeper
docker search zookeeper
docker pull zookeeper:latest
docker images
docker run --name zookeeper_xxx --restart always -e JVMFLAGS="-Xmx1024m" -p 2181:2181 zookeeper
docker ps
docker exec -it zookeeper_xxx /bin/bash
elasticsearch
docker search elasticsearch
docker pull elasticsearch:latest
docker images
docker run --name elasticsearch_xxx -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch
docker ps
http://127.0.0.1:9200
rocketmq
#拉取镜像
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2
#创建数据挂载目录
mkdir /Users/liubo/devApps/rocketmq/server/logs
mkdir /Users/liubo/devApps/rocketmq/server/store
mkdir /Users/liubo/devApps/rocketmq/server/logs
mkdir /Users/liubo/devApps/rocketmq/broker/store
mkdir /Users/liubo/devApps/rocketmq/broker/conf
#新建并编辑配置文件
touch broker.conf
vi /Users/liubo/devApps/rocketmq/broker/conf/broker.conf
namesrvAddr=192.168.130.128:9876
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 192.168.130.128
#创建server容器
docker create -p 9876:9876 --name rockerMQserver -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" -e "JAVA_OPTS=-Duser.home=/opt" -v /Users/liubo/devApps/rocketmq/server/logs:/opt/logs -v /Users/liubo/devApps/rocketmq/server/store:/opt/store foxiswho/rocketmq:server-4.3.2
#启动容器
docker start rockerMQserver
#创建broker容器
docker run -it -d --net host --name rockerMQbroker -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" -e "JAVA_OPTS=-Duser.home=/opt" -v /Users/liubo/devApps/rocketmq/broker/conf/broker.conf:/etc/rocketmq/broker.conf -v /Users/liubo/devApps/rocketmq/broker/logs:/opt/logs -v /Users/liubo/devApps/rocketmq/broker/store:/opt/store --privileged=true foxiswho/rocketmq:broker-4.3.2
#拉取镜像-RocketMQ的UI管理工具
docker pull styletang/rocketmq-console-ng:1.0.0
#创建并启动容器-RocketMQ的UI管理工具
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.21.52.147:9876;172.21.52.147:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng:1.0.0
#浏览器访问
http://172.21.52.147:8082/
jenkins
docker search jenkins
docker pull jenkins/jenkins:latest
docker images
#创建一个jenkins目录
mkdir /Users/liubo/devApps/JenkinsHome
docker run -d --name jenkins_xxx -p 8081:8080 -v /Users/liubo/devApps/JenkinsHome/jenkins_xxx:/Users/liubo/devApps/JenkinsHome/jenkins_xxx jenkins/jenkins:latest;
docker ps
http://127.0.0.1:8081
docker exec -it jenkins_xxx bash
cat /var/jenkins_home/secrets/initialAdminPassword
#安装过程中出现一个错误:Forbidden
#可能是国外部分资源网站网速卡住,选择重试,直至安装完成。
Docker Compose
portainer
容器集群管理
Docket Swarm
docker原生自带的容器集群管理系统
Kubernetes(K8S)
文档:https://www.kubernetes.org.cn/docs
容器集群管理系统
在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。