openEuler2203 LTS环境下docker容器的配置与应用

一、说明

本文配置环境为VMware虚拟机(4核CPU,8 GB内存,40GB磁盘),OS为openEuler 22.03 LTS ,虚拟机要求能联网。

二、安装docker

1、安装docker软件包

[root@node1 ~]# dnf -y install docker

2、查看docker版本

[root@node1 ~]# docker version
Client:Version:           18.09.0EulerVersion:      18.09.0.323API version:       1.39Go version:        go1.17.3Git commit:        172f8daBuilt:             Wed Apr 19 02:01:22 2023OS/Arch:           linux/amd64Experimental:      falseServer:Engine:Version:          18.09.0EulerVersion:     18.09.0.323API version:      1.39 (minimum version 1.12)Go version:       go1.17.3Git commit:       172f8daBuilt:            Wed Apr 19 02:00:48 2023OS/Arch:          linux/amd64Experimental:     false

3、启动并设置为开机自启动

[root@node1 ~]# systemctl start docker
[root@node1 ~]# systemctl enable docker

4、验证是否安装成功

可通过运行hello-world镜像来验证是否正确安装了Docker。

[root@node1 ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Status: Downloaded newer image for hello-world:latest[root@node1 ~]# docker run hello-worldHello from Docker!
……后续输出省略……

三、docker的基本使用

在使用Docker前需要了解以下三个概念:镜像、容器和仓库。
(1)镜像:通常是只读的,一般是一个简化的Linux操作系统加上配置好环境的软件,比如一个Nginx镜像,它可能是基于Debain系统,然后安装了Nginx,从而构建成镜像。用户可以自己制作、更新镜像。
(2)容器:镜像运行的实例就是容器,每个容器都是相互隔离的。
(3)仓库:存储镜像的地方就是仓库,也就是镜像仓库,Docker官方提供的仓库为DockerHub。

1、获取镜像

以使用Ubuntu基本镜像为例介绍容器的使用。
如果本地没有Ubuntu镜像,则可以使用【docker pull 镜像名】命令来载入Ubuntu镜像,示例命令如下:

[root@node1 ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
01007420e9b0: Pull complete 
Digest: sha256:f9d633ff6640178c2d0525017174a688e2c1aef28f0a0130b26bd5554491f0da
Status: Downloaded newer image for ubuntu:latest

2、创建容器

获取镜像后,就可以使用这个镜像来创建一个容器,命令格式如下:

【docker run <参数> <镜像名> --name <容器名> <命令>】

示例:以上述ubuntu镜像创建一个容器,并使用/bin/bash与容器进行命令交互:

[root@node1 ~]# docker run -it ubuntu /bin/bash
root@fdf5ded8f4f6:/# exit
exit

参数说明:

  • -i:交互式操作。
  • -t:终端。
  • ubuntu:ubuntu 镜像名。
  • /bin/bash:镜像名后的是命令,这里我们希望有个交互式Shell。

如下图所示,命令成功执行后,会自动进入Ubuntu容器的bash中,并等待用户的指令。

若要退出容器,直接执行exit命令即可。

3、查看容器

执行以下命令可查看所有的容器:

[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fdf5ded8f4f6        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 22 seconds ago                       optimistic_dubinsky
052fe1745479        hello-world         "/hello"            10 minutes ago      Exited (0) 10 minutes ago                       nifty_payne

从输出可以看到容器的ID、所属镜像、 曾执行过的命令、创建时间、状态和容器名称等信息。

4、启动/停止/重启/删除容器

(1)启动容器

启动容器的命令格式为【docker stop <容器ID>】,示例如下(启动上面的ubuntu容器)

# 启动指定ID的容器,ID可以只写部分
[root@node1 ~]# docker start fdf5d
fdf5d#查看容器及其运行状态
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fdf5ded8f4f6        ubuntu              "/bin/bash"         7 minutes ago       Up 4 seconds                                    optimistic_dubinsky
052fe1745479        hello-world         "/hello"            16 minutes ago      Exited (0) 16 minutes ago                       nifty_payne

 注:上述命令中,也可以用容器名称来代替容器ID,下同

(2)重启容器

重启容器的命令格式为【docker restart <容器ID>】,示例如下(重启上面的ubuntu容器)

[root@node1 ~]# docker restart fdf5d
fdf5d

(3)在后台运行容器
如果希望容器在后台运行,则可以通过-d参数指定容器的运行模式,比如执行以下命令可以启动一个容器在后台运行,不会进入容器的bash终端中。

# 启动容器,并让其在后台运行
[root@node1 ~]# docker run -itd ubuntu /bin/bash
61c32a8a15354d8c54927864c0054d3f08d2f8a170d21737838493ecaae47d53#查看容器及其状态
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
61c32a8a1535        ubuntu              "/bin/bash"         32 seconds ago      Up 32 seconds                                   upbeat_galileo
fdf5ded8f4f6        ubuntu              "/bin/bash"         13 minutes ago      Up 2 minutes                                    optimistic_dubinsky
052fe1745479        hello-world         "/hello"            21 minutes ago      Exited (0) 21 minutes ago                       nifty_payne

(4)进入容器

当使用 -d 参数时,容器启动后会进入后台,用户无法与容器进行交互。若要与容器进行交互,就需要进入容器,进入容器的命令格式为:【docker exec -it <容器ID> /bin/bash】

示例,进入上述id为61c32a8a1535的容器:

# 进入指定ID的容器,可以只输入部分ID
[root@node1 ~]# docker exec -it 61c32 /bin/bash
root@61c32a8a1535:/# 
root@61c32a8a1535:/# 
root@61c32a8a1535:/# exit
exit

注:如果从后台运行的容器中退出,该容器不会停止。

(5)停止容器

停止容器的命令格式为:【docker stop <容器ID>】

示例,停止上述id为61c32a8a1535的容器

# 停止指定的容器
[root@node1 ~]# docker stop 61c32a8a1535
61c32a8a1535# 查看所有容器及其状态,已停止的容器状态为Exited
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
61c32a8a1535        ubuntu              "/bin/bash"         10 minutes ago      Exited (137) 5 seconds ago                       upbeat_galileo
fdf5ded8f4f6        ubuntu              "/bin/bash"         23 minutes ago      Up 12 minutes                                    optimistic_dubinsky
052fe1745479        hello-world         "/hello"            32 minutes ago      Exited (0) 31 minutes ago                        nifty_payne

(6)删除容器

删除容器前需要将先停止容器,删除停止状态的容器的命令格式为:【docker rm -f <容器ID>】

# 删除指定的容器
[root@node1 ~]# docker rm -f 61c32
61c32# 查看容器及其状态
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fdf5ded8f4f6        ubuntu              "/bin/bash"         26 minutes ago      Up 15 minutes                                   optimistic_dubinsky
052fe1745479        hello-world         "/hello"            34 minutes ago      Exited (0) 34 minutes ago                       nifty_payne

四、Docker镜像使用

1、查看本地镜像列表

查看本地镜像列表的命令格式为:【docker images】

示例:列出本地主机上的镜像列表

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              3db8720ecbf5        13 days ago         77.9MB
hello-world         latest              d2c94e258dcb        9 months ago        13.3kB

从输出可以看到镜像仓库、标签、镜像ID、创建时间和大小等信息。

2、查找并获取新镜像

当本地主机上需要使用一个不存在的镜像时,Docker就会自动下载这个镜像。

如果想预先下载这个镜像,可以使用【docker pull 镜像名】命令来下载它。

示例:获取MySQL的镜像命令如下

# 查找镜像
[root@node1 ~]# docker search mysql# 下载镜像
[root@node1 ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
81badc5f380f: Pull complete 
c490e5dd1a9d: Pull complete 
87aeb61f1478: Pull complete 
1cacbea6ceda: Pull complete 
1e72891ace67: Pull complete 
42b720363d36: Pull complete 
6b3b50f9990a: Pull complete 
3811d52cfa61: Pull complete 
05bc7a0277d8: Pull complete 
cc0abd25a274: Pull complete 
Digest: sha256:ff5ab9cdce0b4c59704b4e2a09deed5ab8467be795e0ea20228b8528f53fcf82
Status: Downloaded newer image for mysql:latest# 查看本地镜像
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              3db8720ecbf5        13 days ago         77.9MB
mysql               latest              a88c3e85e887        5 weeks ago         632MB
hello-world         latest              d2c94e258dcb        9 months ago        13.3kB

下载完成后,就可以直接使用这个镜像来创建容器了。

3、删除镜像

删除镜像的命令格式为:【docker rmi 镜像名或镜像ID】

但需要注意的是,如果有利用该镜像创建了容器,必须先停止并删除所有基于该镜像的容器,然后才能删除该镜像。

示例:删除上述测试镜像hello-world

# 查看所有容器
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
fdf5ded8f4f6        ubuntu              "/bin/bash"         About an hour ago   Up 45 minutes                                      optimistic_dubinsky
052fe1745479        hello-world         "/hello"            About an hour ago   Exited (0) About an hour ago                       nifty_payne# 删除容器基于hello-world镜像的容器
[root@node1 ~]# docker rm 052fe
052fe# 删除hello-world镜像
[root@node1 ~]# docker rmi d2c94e258dcb
Untagged: hello-world:latest
Untagged: hello-world@sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e

4、创建新镜像

Ubuntu基础镜像中没有安装vim编辑器,现以基础的Ubuntu镜像为基础,在容器中安装vim编辑器,然将该容器创建为一个新的镜像。

(1)创建一个新的ubuntu容器

[root@node1 ~]# docker run --name=myubuntu -it ubuntu /bin/bash
root@151dc0b9fc72:/# vim
bash: vim: command not found
root@151dc0b9fc72:/# 

在容器中执行vim命令,可见在Ubuntu基础镜像中并没有安装vim。

(2)更新Ubuntu组件

在Ubuntu容器中执行【apt-get update】命令更新Ubuntu组件,如下所示。

root@151dc0b9fc72:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
……省略后续输出……

(3)安装Vim编辑器

在Ubuntu容器中执行【apt-get -y install vim】命令安装vim编辑器

root@151dc0b9fc72:/# apt-get -y install vim
Reading package lists... Done
Building dependency tree... Done
……省略后续输出……

(4)测试Vim编辑器

在Ubuntu容器中直接执行【vim】命令测试vim编辑器是否安装成功。

若出现如下图所示的界面,则表示vim安装成功。

可输入:q并回车退出vim编辑器

(5)退出容器

执行exit命令退出容器。

(6)创建新镜像

命令新镜像的命令格式为:【docker commit <容器ID> 仓库名】

示例:将上述新容器创建为一个新的镜像

# 查看所有容器及其状态
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
151dc0b9fc72        ubuntu              "/bin/bash"         9 minutes ago       Exited (0) 48 seconds ago                       myubuntu
fdf5ded8f4f6        ubuntu              "/bin/bash"         About an hour ago   Up About an hour                                optimistic_dubinsky# 创建一个新镜像
[root@node1 ~]# docker commit 151dc newimg/ubuntu
sha256:54088b25420a809d35989ff90702cc2de6f765ec887f5ec2f59bbaae45f38a93# 查看所有本地镜像
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newimg/ubuntu       latest              54088b25420a        9 seconds ago       186MB
ubuntu              latest              3db8720ecbf5        13 days ago         77.9MB
mysql               latest              a88c3e85e887        5 weeks ago         632MB

五、Docker网络互联

1、基础知识

Docker引入了容器网络模型,主要包含以下三个构件:

  • Network:可理解为一个Driver,是一个第三方网络栈,包含多种网络模式;
  • Sandbox:定义了容器内的虚拟网卡、DNS和路由表,是Network Namespace的一种实现,是容器的内部网络栈;
  • Endpoint:端点,用于连接Sandbox和Network。

另外,Docker在创建容器时,先调用控制器创建Sandbox对象,再调用容器运行时为容器创建Network Namespace。

下面以在同一个容器网络中建立Tomcat和Nginx两个容器,并实现反向代理的例子来体验容器网络的现实应用。

2、建立容器网络

创建容器网络的命令格式为:【docker network create <网络名称>】

示例:创建一个名为test-net的容器网络

[root@node1 ~]# docker network create test-net
d164e363b4d01e88c6d831e21d3b56d7745245c6561fb23f54b4af69e57e9426

3、启动网页App容器

(1)下载tomcat镜像并创建容器

下载Tomcat镜像,然后以默认的8080端口来创建tomcat服务器容器

[root@node1 ~]# docker pull tomcat[root@node1 ~]# docker run -d -p 8080:8080 --name mywebsite --network test-net tomcat
40639df7f936f72d16d4b26c0f2fbb3fd98caeec0832d0c1eec714433f45cc89

在上面这个命令中,通过--name mywebsite 给该容器命名为mywebsite,使用--network test-net使其加入网络test-net。

(2)配置宿主机防火墙

openEuler的firewalld防火墙默认不允许访问Web服务,可以先关闭防火墙:

[root@node1 ~]# systemctl stop firewalld.service# 配置防火墙后,建议重启一下docker服务
[root@node1 ~]# systemctl restart docker.service 

(3)测试访问

启动浏览器,通过访问宿主机IP地址的8080端口,可看到网站会提示404的错误。

出现上述错误的原因是Tomcat基础镜像中的Web站点根目录下没有主页文件,通过以下方式解决

# 查看tomcat容器
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
40639df7f936        tomcat              "catalina.sh run"   8 hours ago         Exited (143) 2 seconds ago                       mywebsite# 以交互方式启动tomcat容器
[root@node1 ~]# docker exec -it 40639df /bin/bash# 查看容器当前目录下的文件
root@40639df7f936:/usr/local/tomcat# ls
bin           CONTRIBUTING.md  logs            README.md      temp          work
BUILDING.txt  lib              native-jni-lib  RELEASE-NOTES  webapps
conf          LICENSE          NOTICE          RUNNING.txt    webapps.dist# 删除空的网站目录webapps
root@40639df7f936:/usr/local/tomcat# rm -rf webapps# 将webapps.dist目录更名为网站根目录webapps
root@40639df7f936:/usr/local/tomcat# mv webapps.dist/ webapps

再次访问或刷新页面,可以看到如下所示的正常示例页面。

注:可以将配置好的tomcat容器创建成一个新的镜像,方便后面使用,命令如下:

# 查看所有容器
[root@node1 ~]# docker ps -a
7f830e625e82        mywebsite/tomcat    "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   mywebsite# 将mywebsite容器创建成一个新的镜像
[root@node1 ~]# docker commit mywebsite mywebsite/tomcat

4、创建Nginx容器

Nginx是一个高性能的HTTP和反向代理web服务器

(1)准备好nginx配置文件

在示例目录/opt/cloud下事先准备好Nginx服务器的配置文件nginx.conf文件,文件内容如下。

# 创建并进入目标目录
[root@node1 ~]# mkdir /opt/cloud && cd /opt/cloud/# 创建nginx.conf文件,并在其中添加如下内容
[root@node1 cloud]# vim nginx.conf
# 添加以下内容
user nginx;
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream tomcat_server {server mywebsite:8080;}server {listen       80;server_name  localhost;location / {proxy_pass http://tomcat_server;proxy_redirect default;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

在上述配置文件中可以看到,使用同一虚拟网络下的容器mywebsite来指代Tomcat服务器。

(2)下载nginx镜像并创建nginx容器
下载nginx镜像,并利用该镜像创建nginx容器,然后将本地的nginx.conf文件挂载到容器中:

[root@node1 ~]# docker pull nginx[root@node1 ~]# docker run -d --name mynginx --network test-net -p 80:80 -v /opt/cloud/nginx.conf:/etc/nginx/nginx.conf nginx
5772c14ddc78bb1521b3210e2a504341b1d89c44fb6112b3458b2f205076eb20

与tomcat容器一样,这里也给容器命名为mynginx,并加入到网络test-net中。

(3)测试访问

直接访问宿主机IP地址的80端口,就可以看到如下所示的网页内容。

5、利用docker-compose部署网站

很明显,上面连通两个容器的方式很不方便,每次新建或者删除容器都需要很多步骤。

下面将介绍docker-compose,并通过docker-compose更方便的部署和运行网站。

(1)安装docker-compose
首先需要安装Docker Compose

# 安装docker-compose
[root@node1 ~]# dnf -y install docker-compose# 查看docker-compose的版本
[root@node1 ~]# docker-compose --version
docker-compose version 1.22.0, build f46880f

(2)创建docker-compose配置文件

在前面创建的工作目录中创建一个名为docker-compose.yml的脚本文件,这是Docker Compose默认会读取的配置文件:

# 进入工作目录
[root@node1 ~]# cd /opt/cloud/# 创建docker-compose.yml配置文件
[root@node1 cloud]# vim docker-compose.yml
# 文件内容如下version: '3'
services:tomcat:image: mywebsite/tomcatcontainer_name: mywebsiteports:- "8080:8080"nginx:image: nginxcontainer_name: mynginxvolumes:- "/opt/cloud/nginx.conf:/etc/nginx/nginx.conf"ports:- "80:80"

这里与docker命令相似,同样指定了容器的名称(container_name),容器的镜像(image),挂载的文件或目录(volumes)以及开放的端口(ports)。

但这里没有声明网络,这是因为Docker Compose默认为每一个docker-compose指定了一个默认的网络,所以无需再次配置。

注:上述yaml文件严格要求上下对齐,比如tomcat和nginx必须左对齐,且前面不能用Tab键对齐,只能用空格,否则会提示语法错误。

(3)停止并删除容器

为排除干扰,停止并删除前面创建和启动的容器。

# 查看所有容器
[root@node1 ~]# docker ps -a# 停止正在运行的容器
[root@node1 ~]# docker stop mywebsite
[root@node1 ~]# docker stop mynginx# 删除所有基于tomcat和nginx镜像的容器
[root@node1 ~]# docker rm mywebsite
[root@node1 ~]# docker rm mynginx

(4)创建并启动容器
进入docker-compose.yml文件所在的目录,执行【docker-compose up -d】命令启动应用程序。
这里的参数-d表示后台运行

[root@node1 cloud]# docker-compose up -d
Creating network "cloud_default" with the default driver
Creating mywebsite ... done
Creating mynginx   ... done

查看容器状态,可以看到两个容器已成功运行。

[root@node1 cloud]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7f830e625e82        mywebsite/tomcat    "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   mywebsite
abe8173706a7        nginx               "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp       mynginx

(5)测试访问

打开浏览器,访问宿主机IP地址的80端口,可以看到正确的网页内容。

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

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

相关文章

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目&#xff0c;由API7.ai开发并捐赠。它是一个高性能的云原生API网关&#xff0c;具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口&#xff0c;为用户提供了丰富的功能&#xff0c;包括动态路由、动态上游、动态证书、A…

autocrlf和safecrlf

git远程拉取及提交代码&#xff0c;windows和linux平台换行符转换问题&#xff0c;用以下两行命令进行配置&#xff1a; git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平台下的换行符&#xff0c;LF是linux平台下的换行符。…

SpringBoot源码解读与原理分析(三十三)SpringBoot整合JDBC(二)声明式事务的生效原理和控制流程

文章目录 前言10.3 声明式事务的生效原理10.3.1 TransactionAutoConfiguration10.3.2 TransactionManagementConfigurationSelector10.3.3 AutoProxyRegistrar10.3.4 InfrastructureAdvisorAutoProxyCreator10.3.5 ProxyTransactionManagementConfiguration10.3.5.1 Transactio…

基于springboot+vue的抗疫物资管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

C 嵌入式系统设计模式 12:去抖动模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之五&…

(undone) 如何计算 Hessian Matrix 海森矩阵 海塞矩阵

参考视频1&#xff1a;https://www.bilibili.com/video/BV1H64y1T7zQ/?spm_id_from333.337.search-card.all.click 参考视频2&#xff08;正定矩阵&#xff09;&#xff1a;https://www.bilibili.com/video/BV1Ag411M76G/?spm_id_from333.337.search-card.all.click&vd_…

【Datawhale组队学习:Sora原理与技术实战】Sora技术原理

Sora能力边界探索 最大支持60秒高清视频生成&#xff0c;以及基于已有短视频的前后扩展&#xff0c;同时保持人物/场景的高度一致性如奶茶般丝滑过渡的视频融合能力同一场景的多角度/镜头的生成能力具有动态摄像机运动的视频。随着摄像机的移动和旋转&#xff0c;人和其 他场景…

SpaceX 首次通过星链 从太空向社交平台 X 上发帖

2 月 26 日&#xff0c;伊隆马斯克旗下太空探索技术公司 SpaceX 宣布&#xff0c;该公司已成功地通过「星链」卫星网络&#xff0c;从太空向社交平台 X 上发布了第一个帖子。 这一次的发布&#xff0c;是通过手机卫星服务——「卫星直连蜂窝网络」&#xff08;Direct to Cell&…

vscode不能远程连接ubuntu18.04.6

目录 问题解决Portable Mode 安装vscode 补充说明学习资料 问题 vscode远程ssh连接ubuntu18.04.6时&#xff0c;出现如下提示框&#xff0c;单击Learn More后&#xff0c;定位到问题。Can I run VS Code Server on older Linux distributions? 原始是&#xff1a;需要glibc …

递归和迭代【Py/Java/C++三种语言详解】LeetCode每日一题240218【树DFS】LeetCode 589、 N 叉树的前序遍历

有LeetCode算法/华为OD考试扣扣交流群可加 948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目描述解题思路代码方法一&#xff1a;递归法PythonJavaC时空复杂度 方法二&#xff1a;迭代法PythonJavaC时空复杂度 …

北邮毕业论文Latex模板使用教程(Windows)

1latex模板下载 下载地址&#xff1a; https://github.com/rioxwang/BUPTGraduateThesis2安装编译环境 TEX Live 2014 或者CTEX 2.9.2.164&#xff0c;以及更高的版本. 下载其中一个即可 &#xff08;1&#xff09;TEX Live下载地址&#xff1a; https://tug.org/texlive/acq…

JAVA学习笔记12

1.键盘输入语句 1.1 介绍 ​ *在编程中&#xff0c;需要接收用户输入的数据&#xff0c;就可以使用键盘输入语句来获取。 1.2 步骤 ​ 1.导入该类的所在包&#xff0c;java.util.* ​ 2.创建该类对象&#xff08;声明变量&#xff09; ​ 3.调用里面的功能 import java.…

Aigtek前置微小信号放大器在传感器检测中的应用有哪些

传感器是将物理量转换为电信号的装置&#xff0c;其精度和灵敏度直接影响到检测系统的性能。而传感器的输出信号通常都非常微弱&#xff0c;需要进行放大处理才能得到可靠的测量结果。前置微小信号放大器&#xff0c;作为一种重要的传感器检测元件&#xff0c;在传感器检测中发…

游戏服务器租用价格大比拼,腾讯云阿里云京东云疯狂比价!

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;游戏专业服务器公网带宽10M、12M、15M…

CentOS7 Hive2.3.8安装

CentOS7 Hive2.3.8 安装 建议从头用我的博客&#xff0c;如果用外教的文件到 一、9)步骤了&#xff0c;就用他的弄完&#xff0c;数据库不一样&#xff0c;在9步骤前还能继续看我的 一、 安装MySQL 0.0&#xff09;查询mariadb,有就去0.1&#xff09;&#xff0c;没有就不管…

x-cmd pkg | g - 功能和交互更为丰富的 `ls` 替代方案

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 g 是一项用 Go 开发的、功能和交互更为丰富的 ls 替代方案。它拥有 100 多个功能选项&#xff0c;主要是通过各式图标、各种布局选项和 git status 集成来增强视觉效果&#xff0c;并且支持多种输出格式&#xff0c;如…

Administrative-divisions-of-China:中华人民共和国行政区划数据

Administrative-divisions-of-China是中华人民共和国行政区划&#xff1a;省级&#xff08;省份&#xff09;、 地级&#xff08;城市&#xff09;、 县级&#xff08;区县&#xff09;、 乡级&#xff08;乡镇街道&#xff09;、 村级&#xff08;村委会居委会&#xff09; &a…

c++史上最全算法详解,0基础可秒懂!(爆肝4万字)

本文极长&#xff0c;建议点赞收藏后看&#xff01; 质量分95&#xff01;&#xff01; 文章目录 -1.C 标准0.语法基础1. C头文件2. C命名空间3. 主函数4. 变量类型5. ASCII码6. 注释 1.顺序结构一、代码示例二、例题1&#xff1a;求圆的面积三、例题2&#xff1a;求解一元二次…

常见集合框架底层原理

常见集合框架底层原理 常见的集合有哪些 Java集合类主要由两个接口Collection和Map派生出来的&#xff0c;Collection有三个子接口: List、 Set、Queue List代表了有序可重复集合&#xff0c;可直接根据元素的索引来访问Set代表了无序集合&#xff0c;只能根据元素本身来访问…

【Leetcode每日一题】二分查找 - 有效的完全平方数(难度⭐)(19)

1. 题目解析 Leetcode链接&#xff1a;367. 有效的完全平方数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于判断给定的整数是否可以开方成两个整数相乘&#xff0c;可以就返回false&#xff0c;反之返回true。 2. 算法…