云原生 -- Docker进阶(Docker-compose,Docker网络简单介绍)

news2024/10/3 4:36:16

Dockerfile的构建过程

  • 每条保留字段必须为大写字母。
  • Dockerfile每行只支持一条指令,但是每条指令可以带多个参数,并且每条保留字指令后面至少要带有一个参数。
  • 从上到下依次执行。
  • 每条指令都会创建一个新的镜像层,并提交新的镜像。

大致流程:

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行提交操作,提交一个新的镜像层
  4. 执行dockerfile的下一条指令

Dockerfile的保留字指令

在这里插入图片描述

在这里插入图片描述

Docker Compose

我们使用一个超长的命令来去看一下MySQL能不能部署成功:

docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

部署成功了,但是这个命令太过于长了,而且一次只能部署一个容器,所以我们提出了docker-compose。

我们写一个docker-compose文件然后运行docker-compose up,结果报错了。

这个报错非常的坑:

ERROR: yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
  in "./docker-compose.yaml", line 4, column 1

意思就是yaml必须打2个空格,不能打\t。然后最终看起来是一样的,但是会无法识别。

  1 version: '3.1'
  2 
  3 services:
  4 
  5   db:
  6     image: mysql # 镜像的名称
  7     command: # 对应我上面那个巨长的命令的--
  8       --character-set-server=utf8mb4
  9       --collation-server=utf8mb4_unicode_ci
 10     restart: always # 如果宕机了,重启的策略
 11     environment: # 对应上面的-e配置环境
 12       MYSQL_ROOT_PASSWORD: 123456
 13     volumes: 对应上面的 -v 挂载数据
 14       - /my/own/datadir:/var/lib/mysql
 15     ports: 对应上面的 -p 端口映射
 16       - 3306:3306
 17 
 18   adminer:
 19     image: adminer
 20     restart: always
 21     ports:
 22       - 8080:8080           

然后

docker-compose up -d

在后台启动我的docker容器。

这个admin是一个MySQL的管理系统。

在这里插入图片描述

停止容器的运行

条件:在docker-compose的目录下

docker-compose stop/start #只是停止/运行这个容器
docker-compose down #直接把这个容器删了

但是如果我的这个yml文件不叫docker-compose文件呢?

docker-compose -f mysql.yaml up -d

-f强行指定姓名就可以了。

看日志

docker-compose logs

这样的话就是名字叫做docker-compose.yaml的日志。

docker-compose -f mysql.yaml logs

这样就是查看名字叫做mysql.yaml的日志。

docker-compose -f mysql.yaml logs -f

这样就是查看名字叫做mysql.yaml的日志,并且滚动更新日志。

Docker容器网络基础

Bridge网络

我们先使用一个命令查看Docker的一些网络信息:

[root@k8smaster mysql]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0192785adb20        bridge              bridge              local
6265d41f9cbc        host                host                local
1076f6955d43        mysql_default       bridge              local
7bd9dd6a93a5        none                null                local

可以看到又一个bridge,网桥网络。

在这里插入图片描述

在网络方面,桥接网络是在网段之间转发流量的链路层设备。桥可以是在主机内核中运行的硬件设备或者软件设备。

docker0(默认bridge)

docker run -d --name tomcat1 tomcat

我们先来启动两个tomcat容器。

docker inspect tomcat1

查看tomcat1容器的相关信息。

我们来看一下结果:

[
    {
        "Id": "89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6",
        "Created": "2023-02-15T10:41:23.32460978Z",
        "Path": "catalina.sh",
        "Args": [
            "run"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 52447,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-02-15T10:41:23.665177066Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:fb5657adc892ed15910445588404c798b57f741e9921ff3c1f1abe01dbb56906",
        "ResolvConfPath": "/var/lib/docker/containers/89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6/hostname",
        "HostsPath": "/var/lib/docker/containers/89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6/hosts",
        "LogPath": "/var/lib/docker/containers/89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6/89435df83bcb0f8c5d685f4ad7a0d06b01a14b182c3f2eedd48aace0fc8539b6-json.log",
        "Name": "/tomcat1",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-size": "100m"
                }
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/7eadc53b492791389b9375565b5e9d8f521b247aaec55e14c5694fde8cb262ed-init/diff:/var/lib/docker/overlay2/5d15c4c9c3c9d33bce87d6c6d4fe6cd9a1659fae0f1606fb538066e645ed91c7/diff:/var/lib/docker/overlay2/0a467022e79f75c4fc6bbc155b4deb858bf3e17c41a00144c3fd63fdf94ec0bc/diff:/var/lib/docker/overlay2/4871abe01045d7cd11c8bcda554285ed9881067ed31bad1ef9e13d6f43bdc0cd/diff:/var/lib/docker/overlay2/8645d7f0b517edd1e5ad42be66d166d643756ed3dd26c72a6e69ac2ede924f76/diff:/var/lib/docker/overlay2/eb8d5dd01d3f3bb1b83e73d8276505fcb6b799c70820e792c6b0c2e17e3f38fd/diff:/var/lib/docker/overlay2/2714615f68373bde97f4eed08063f25d441d70a09f2cbab8223305fd099cab27/diff:/var/lib/docker/overlay2/65f27c74105575dcf023693c9f437f2e10165b6a85d9f76a76520d7bf0353483/diff:/var/lib/docker/overlay2/a52375516fb2e071a95f2c633bc23bc5d774311287a88f1e534a61bfd76a164a/diff:/var/lib/docker/overlay2/03545b9f89cf397d82c6effb7d924f1a901a5e02f023eec1509b11f4a5bb5adc/diff:/var/lib/docker/overlay2/8a92f9978f8dc817792c00c70433e91809d369cd7dabfbd40e75d583f46dffb9/diff",
                "MergedDir": "/var/lib/docker/overlay2/7eadc53b492791389b9375565b5e9d8f521b247aaec55e14c5694fde8cb262ed/merged",
                "UpperDir": "/var/lib/docker/overlay2/7eadc53b492791389b9375565b5e9d8f521b247aaec55e14c5694fde8cb262ed/diff",
                "WorkDir": "/var/lib/docker/overlay2/7eadc53b492791389b9375565b5e9d8f521b247aaec55e14c5694fde8cb262ed/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "89435df83bcb",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/tomcat/bin:/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "JAVA_HOME=/usr/local/openjdk-11",
                "LANG=C.UTF-8",
                "JAVA_VERSION=11.0.13",
                "CATALINA_HOME=/usr/local/tomcat",
                "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
                "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
                "GPG_KEYS=A9C5DF4D22E99998D9875A5110C01C5A2F6059E7",
                "TOMCAT_MAJOR=10",
                "TOMCAT_VERSION=10.0.14",
                "TOMCAT_SHA512=c2d2ad5ed17f7284e3aac5415774a8ef35434f14dbd9a87bc7230d8bfdbe9aa1258b97a59fa5c4030e4c973e4d93d29d20e40b6254347dbb66fae269ff4a61a5"
            ],
            "Cmd": [
                "catalina.sh",
                "run"
            ],
            "Image": "tomcat",
            "Volumes": null,
            "WorkingDir": "/usr/local/tomcat",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "22a9286beec475133639bbde1edc2d07c1b1e0d95fcd4eec6a4e7beba42d34c4",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/22a9286beec4",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "dea491b6061874ceefd394d819009d84a564ad08c4782f0279706660caf246af",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "0192785adb20f46e2f13c2fcfe6131d43b7b965eb03b39f55fe292c6196ae2ea",
                    "EndpointID": "dea491b6061874ceefd394d819009d84a564ad08c4782f0279706660caf246af",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

可以看到network那个地方是桥接。

Bridge网络模型图

在这里插入图片描述

设备上网是需要一张网卡的。

veth相当于是一个虚拟网卡。

在这里插入图片描述

我们手动创建两个网桥:

docker network create br0

br0和br1。然后我们来看一下:

[root@VM-24-15-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e3e87ce572f5   br0       bridge    local
4cf4d0ebbd73   br1       bridge    local
7891479a5509   bridge    bridge    local
dd1c10816481   etcdnet   bridge    local
c1c1565931b6   host      host      local
cadd4c7e1fe9   none      null      local

可以发现确实是成功的。

docker network connect br0 tomcat1

观察一下tomcat1的状态:

            "Networks": {
                "br0": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "7c7fbf222981"
                    ],
                    "NetworkID": "e3e87ce572f5870e73ad1f37f700f597cd7748b1a40fc46e260ee14f99be4468",
                    "EndpointID": "29a5954e817f89ecf33c00520e84fe41e91875203ac96ca0f71fab26e470373c",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:13:00:02",
                    "DriverOpts": {}
                },
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "7891479a5509f9cfb69ac4db4452a4a3b9d8fd28b175cf750f53a79ded798671",
                    "EndpointID": "bf73381f0a91920258c6780aa75b8d11846838547dff83e9af8ca260257794ef",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }

可以看到确实连接成功了,但是旧的bridge没有被删除。

就像是一个机器可以连接多个网卡一样。

我们把bridge去掉。

docker network disconnect bridge tomcat1

然后就可以看到网桥网络确实被删除掉了!!!

有些例如数据库这样的东西,我们可以把数据库放在一个网桥上。然后不对外暴露端口。

Host网络

Host模式并没有为容器创建一个隔离的网络环境。而之所以被称之为host模型,是因为该模式下的Docker容器会和host宿主机共享同一个网络namespace,故Docker Container的IP地址即为宿主机eth0的IP地址。其特点包括:

  1. 这种模式下的容器没有隔离的network namespace
  2. 容器的IP地址同Docker host的IP地址。
  3. host模式可以与其他模式共存
  4. 容器中的服务的端口号不能与Docker host上已经使用的端口号冲突。

在这里插入图片描述

考虑到安全问题,Host网络用的比较少

None网络

网络模式为none,即不为Docker容器构造任何网络环境。一旦Docker容器采用了none网络模式,那么容器内部就只能使用loopback(lo)网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本地网络。

Container模式

Container网络模式是Docker中一种比较特殊的网络模式。处于这个模式下的Docker容器共享其他容器的网络环境,因此至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外的其他的容器存在网络隔离。

在这里插入图片描述

我们先启动一个my-nginx2的容器,网络在默认的bridge网桥上。

然后启动一个tomcat3容器,并且使用Container网络与my-nginx2共享网络。

docker run -d --name tomcat3 --network container:my-nginx2 tomcat

我们inspect一下tomcat3,发现压根没有网络设置。

我们在inspect返回的结果里面查看一下网络设置:

"NetworkMode": "container:33d777b8b7c5158174ba5d10ffbbca289a45e416e152c1b933e5acfbc65bab4a",

可以看到是Container模式,并且连接到33d777b8b7c5158174ba5d10ffbbca289a45e416e152c1b933e5acfbc65bab4a这个容器。

我们要注意一点,我们两个容器暴露的端口肯定不能一样。

我们现在有tomcat1已经启动了,然后我们再次创建一个tomcat4,并且使用Container模式于tomcat1。

然后就报错了:

	java.net.BindException: Address already in use (Bind failed)

端口已经绑定了,这很正常,原因前面已经讲解过了。绑定的端口冲突了,因为我们运行的都是tomcat容器,所以绑定的端口是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRM系统五大技巧集成Excel为销售流程赋能

销售过程中有很多情况会降低团队的效率。通过正确的实施CRM客户管理系统,可以帮助您的企业自动执行手动任务、减少错误并专注于完成交易。这里有5个技巧,可以帮助您的销售人员通过CRM集成Excel为销售流程赋能并提高他们的整体效率。 技巧1:将…

技术源自洛克希德·马丁,光场XR眼镜FYR解析

专注于医疗场景的一家XR眼镜厂商FYR(全称:FYR Medical)近期亮相,并宣布完成了260万美元A轮融资,本轮融资由NuVasive领投,资金将用于开发世界上第一个XR光场“放大镜”类产品。据青亭网了解,NuVa…

1、HAL库UART 中断|DMA 自动回显接收数据

1、实现代码: stm32f4xx_hal_conf.h文件开启UART宏定义 #define HAL_UART_MODULE_ENABLED添加stm32f4xx_hal_uart.c和stm32f4xx_hal_dma.c到自己工程; 编写好的代码:usart_Driver.c /***************************************************…

K8s管理应用生命周期-Deployment篇

在k8s中部署应用程序流程 1、使用Deployment部署Java应用 kubectl create deployment web --imageXXX/java-demokubectl get deployment,pods 2、使用Service发布Pod kubectl expose deployment web --port80 --typeNodePort --target-port8080 --namewebkubectl get servic…

深入【虚拟列表】动态高度、缓冲、异步加载... Vue实现

前言🎀 在前文中我们了解到: 1.在某种特殊场景下,我们需要将 大量数据 使用不分页的方式渲染到列表上,这种列表叫做长列表。 2.因为事件循环的机制,一次性大量的渲染耗时较长,并且渲染期间会阻塞页面交互…

Centos安装OpenResty

文章目录一. OpenResty是什么二. OpenResty的安装1. 安装开发库2. 安装OpenResty仓库3. 安装OpenResty4. 安装opm工具5. 目录结构6. 配置nginx的环境变量7. 启动和运行8. 配置文件修改三. 小案例1. 案例说明2. OpenResty监听请求3. 编写业务代码4. 获取请求参数一. OpenResty是…

深度解析React性能优化API

性能优化一直是前端领域讨论的一个热门问题,但在平时沟通及code review过程中发现很多人对于React中性能优化理解很模糊,讲不清楚组件什么时候更新,为什么会更新,关于React性能优化的文章虽然比较多,但大多数都是在罗列…

【C/C++】内存管理详解

目录内存布局思维导图1.C/C内存分布数据段:栈:代码段:堆:2.C语言中动态内存管理方式3.C内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型4.operator new 与 operator delete函数5.new和delete的实现原理5.1内置类型5.2自定…

ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(二)

文章目录ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(二)Image-to-Text 模型FlamingoVisualGPTText-to-Video 模型PhenakiSoundifyText-to-Audio 模型AudioLMJukeboxWhisperChatGPT is n…

protoc-gen-go的使用和问题

最近 在网上查看关于proto文件编译为golang代码的文章,发现遇到的问题好多都是文件目录不对,参数不对的情况,这里主要解决,使用 不同版本的proto-gen-go 参数不一样和找不到文件问题 安装protoc-gen-go google.golang.org仓库版本…

互联网新时代要来了(二)什么是AIGC?

什么是AIGC? 最近,又火了一个词“**AIGC”**2022年被称为是AIGC元年。那么我们敬请期待,AIGC为我们迎接人工智能的下一个时代。 TIPS:内容来自百度百科、知乎、腾讯、《AIGC白皮书》等网页 什么是AIGC?1.什么是AIGC?…

Vue3篇.01-简介及基本使用,项目创建方式, 模板语法, 事件监听, 修饰符

一.简介1.概念Vue 是一款用于构建用户界面的 JS框架, 基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型, 高效地开发用户界面。渐进式框架, 适应不同需求进行开发。两个核心功能:声明式…

在云原生的趋势下,不掌握Go语言可能不太行

云原生技术已经是不可逆的趋势 云原生技术使组织能够在公共云、私有云和混合云等现代动态环境中构建和运行可扩展的应用程序,其中容器、服务网格、微服务、不可变基础设施和声明式 API 等都是云原生的重要技术内容。 这些新技术的出现使松散耦合的系统具有弹性、可管理和可观…

FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持

目录1、前言2、任意分辨率视频输出理论基础3、VDMA实现数据缓存4、工程1:Kintex7使用VDMA5、工程2:Zynq7100使用VDMA6、上板调试验证并演示7、福利:工程代码的获取1、前言 之前写过一篇FPGA纯verilog实现任意分辨率视频输出显示,…

hume项目k8s的改造

hume项目k8s的改造 一、修改构建目录结构 1、在根目录下添加build-work文件夹 目录结构如下 [rootk8s-worker-01 build-work]# tree . . ├── Dockerfile ├── hume │ └── start.sh └── Jenkinsfile2、每个文件内容如下 Dockerfile FROM ccr.ccs.tencentyun…

数据结构与算法基础(王卓)(10):案例分析与实现(多项式;稀疏多项式;图书管理系统(略);)

题干: 用线性表和链表的方式,分别实现(稀疏)多项式的 定义(构造框架)创建加减乘(多项式)线性表的创建: (略,相较于其他操作难度不,以…

亚马逊真人测评好还是自养号测评好 深度剖析讲解

关于真人测评和自养号哪个好,一直都是老生常谈的问题了。实际操作下来到底哪一个更好呢?今天陈哥给大家详细分析一下。 先说自养号。所谓的自养号,说白了就是通过搭建国外的真实买家环境,然后购买资料自己注册的账号。 很多工作…

Java300集,学完即可就业

学习java首先我们要明白Java是什么?Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&a…

K8s 架构简介(一)

一、前言 在开始学习K8s之前,让我们对容器有一个基本的了解 1.1 什么是容器 一个容器镜像是一个可运行的软件包,其中包含了一个完整的可执行程序,包括代码和运行时需要应用、系统库和全部重要设置的默认值。 通过将应用程序本身&#xff…

虹科新闻|虹科与Telco Systems正式建立合作伙伴关系

近日,虹科与美国Telco Systems达成战略合作,虹科正式成为Telco Systems在中国区域的认证授权代理商。未来,虹科将携手Telco Systems,共同为新一代边缘计算和企业网络提供创新通信软件产品。虹科及Telco Systems双方都对彼此的合作…