当前位置: 首页 > news >正文

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

  • 一、docker容器数据卷
    • 1.1、使用docker容器数据卷
    • 1.2、具名挂载、匿名挂载
    • 1.3、如何确定是具名挂载还是匿名挂载
  • 二、使用dockerfile
    • 2.1 初识Dockerfile
    • 2.2 Dockerfile构建过程
    • 2.3 Dockerfile指令
    • 2.4 实战---构建自己的一个centos
    • 2.5 实战---构建自己的一个tomcat
  • 三、发布镜像至阿里云
    • 3.1、登录阿里云Docker Registry
    • 3.2、使用" docker push" 命令将centos镜像提交至阿里云
    • 3.3、阿里云镜像仓库查看
  • 四、总结—温故知新(图片来源于网络)


💖The Begin💖点点关注,收藏不迷路💖

在这里插入图片描述

一、docker容器数据卷

1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。
2、重要数据back_up

特点:

实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止。

1.1、使用docker容器数据卷

使用命令挂载
docker run -it  -v /宿主机绝对路径:/容器内目录 镜像名

案例:
1、容器/home目录挂载至宿主机/home/ceshi目录

docker run -it  -v /宿主机绝对路径:/容器内目录 镜像名[root@zyl-server ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@83e82e6509e6 /]# 

测试——宿主机:

[root@zyl-server /]# cd /home/ceshi/
[root@zyl-server ceshi]# ll
total 0
[root@zyl-server ceshi]# 
[root@zyl-server ceshi]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED         STATUS          PORTS                                       NAMES
83e82e6509e6   centos                "/bin/bash"    5 minutes ago   Up 5 minutes                                                priceless_volhard
99974acec585   portainer/portainer   "/portainer"   11 days ago     Up 11 minutes   0.0.0.0:8088->9000/tcp, :::8088->9000/tcp   blissful_mclaren
[root@zyl-server ceshi]# 

查看数据卷是否挂载成功

docker inspect 容器id
[root@zyl-server ceshi]# docker inspect 83e82e6509e6

在这里插入图片描述
测试:

宿主机:
[root@zyl-server ceshi]# ll
total 0
[root@zyl-server ceshi]# touch test.java
[root@zyl-server ceshi]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 28 21:52 test.java
[root@zyl-server ceshi]# 容器内查看test.java文件是否同步:
[root@83e82e6509e6 /]# cd /home/
[root@83e82e6509e6 home]# ls
test.java
[root@83e82e6509e6 home]# 

在这里插入图片描述

停止容器,在宿主机修改挂载目录文件,依旧可以实现数据同步(修改文件只需在宿主机修改即可,容器内会自动同步)。

1.2、具名挂载、匿名挂载

1、匿名挂载
## -v 容器内路径
docker run -d -P --name=nginx01 -v /etc/nginx nginx[root@zyl-server ~]# docker run -d -P --name=nginx01 -v /etc/nginx nginx
a562312cab24a00dae2e9c01b02113e92372d71a0025c46aa5d2cf32b99ebdd4## 查看容器内所有volume 的情况
[root@zyl-server ~]# docker volume ls
DRIVER    VOLUME NAME
local     192e75fc04cf12757b855fa03c4f14c69bcb3e81034670f43cde7086920760c4
local     00601bab7587cbdd2c5985707b1b5f7e7e570d19d7f5941980677cf8f3ca509a
local     4583527b6a150e898423c0533ae82ca5022cef13769f9b5cb66b2253d3a734fb
local     4985806fac61d833ac29f155155817156262b7c93ce3264450ab1b1e06f23f5a
[root@zyl-server ~]# 
[root@zyl-server ~]# 这就是匿名挂载,在-v 只写了容器内的路径,没有写容器外(宿主机)的地址
2、具名挂载
通过 -v  卷名:容器内路径 
docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx nginx[root@zyl-server ~]# docker run -d -P --name=nginx02 -v juming-nginx:/etc/nginx nginx
f0e149830cef370054f35a4ccd3e281d31231604c763ce7713c199a850978172
[root@zyl-server ~]# 查看这个具名挂载的juming-nginx
[root@zyl-server ~]# docker volume inspect juming-nginx
[{"CreatedAt": "2023-08-28T22:20:54+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data","Name": "juming-nginx","Options": null,"Scope": "local"}
]
[root@zyl-server ~]# 

docker 在没有指定目录的情况下,容器内的卷都在’/var/lib/docker/volumes/卷名/_data’

在这里插入图片描述

我们通过具名挂载可以方便的找到卷,大多数情况使用的都是具名挂载。

1.3、如何确定是具名挂载还是匿名挂载

-v 容器内路径      ##匿名挂载
-v 卷名:容器内路径    ###具名挂载
-v /宿主机路径:容器内路径    ##指定路径挂载

拓展:读写规则映射添加

docker run -it --privileged=true  -v /宿主机绝对路径:/容器内目录:ro(只读,默认可读可写) 镜像名ro  ##只读,如果有ro则说明只能通过宿主机来操作,容器内无法操作
rw  ##可读可写

二、使用dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

2.1 初识Dockerfile

通过docker 构建一个简单镜像。

[root@zyl-server ~]# mkdir docker-test-volume
[root@zyl-server ~]# cd docker-test-volume/###创建一个dockfile文件 
[root@zyl-server docker-test-volume]# vi dockerfile01
[root@zyl-server docker-test-volume]# 

dockerfile01 文件内容,每个命令就是镜像的一层:

FROM centosVOLUME ["volume01","volume02"]CMD echo "----end----"CMD /bin/bash

build镜像:


###zyl 为镜像名,最后的. 表示生成在当前目录下
[root@zyl-server docker-test-volume]# docker build -f /root/docker-test-volume/dockerfile01  -t zyl/centos:1.0 .

在这里插入图片描述
报错:
构建Dockerfile中FROM私库镜像报错构建失败。

问题解决:
Docker在v23.0版本及以后,使用了build-kit代替了旧的实现,目前build-kit对insecure-registries配置可能没做兼容,构建Dockerfile FROM镜像时未判断是私库,导致报错。

[root@zyl-server docker-test-volume]# docker -v
Docker version 24.0.5, build ced0996
[root@zyl-server docker-test-volume]# 

在 ~/.bashrc 或 /etc/profile 添加一行 export DOCKER_BUILDKIT=0,然后 source 修改的配置文件。

命令示例:

echo "export DOCKER_BUILDKIT=0" >> ~/.bashrc
source ~/.bashrc

在这里插入图片描述
在这里插入图片描述

启动刚构建的容器:

## docker run -it  镜像id
[root@zyl-server docker-test-volume]# docker run -it 1179bafa65b3 /bin/bash
[root@a47d66371273 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@a47d66371273 /]# 

在这里插入图片描述

在这里插入图片描述
在刚构建的容器数据卷中volume0、volume02中
创建文件测试:

容器内:
[root@zyl-server docker-test-volume]# docker run -it 1179bafa65b3 /bin/bash
[root@bd3c420a9d03 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
[root@bd3c420a9d03 /]# cd volume0
bash: cd: volume0: No such file or directory
[root@bd3c420a9d03 /]# cd volume01
[root@bd3c420a9d03 volume01]# ls
[root@bd3c420a9d03 volume01]# touch test.java
[root@bd3c420a9d03 volume01]# ls
test.java
[root@bd3c420a9d03 volume01]# 宿主机:
[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED             STATUS             PORTS                                       NAMES
bd3c420a9d03   1179bafa65b3          "/bin/bash"              2 minutes ago       Up 2 minutes                                                   funny_mccarthy
f0e149830cef   nginx                 "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:32769->80/tcp, :::32769->80/tcp     nginx02
a562312cab24   nginx                 "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:32768->80/tcp, :::32768->80/tcp     nginx01
99974acec585   portainer/portainer   "/portainer"             11 days ago         Up 2 hours         0.0.0.0:8088->9000/tcp, :::8088->9000/tcp   blissful_mclaren###查看卷挂载目录:
[root@zyl-server ~]# docker inspect bd3c420a9d03

在这里插入图片描述

##卷挂载成功
[root@zyl-server _data]# cd /var/lib/docker/volumes/0b1be7a1e5b351e70dcf5b172e6a6b834f6b8f0f9fd72cb718793fc1ddab6b8d/_data
[root@zyl-server _data]# ls
test.java
[root@zyl-server _data]# ==在刚构建的容器内创建文件,容器外也有。==

这种方式未来使用较多,因为我们需要构建自己的镜像,假如构建镜像时没有挂载卷,则需要手动挂载,使用 -v 卷名:容器内路径方式。

2.2 Dockerfile构建过程

Dockerfile 是面向开发的,,需要发布项目、制作镜像,就需要编写Dockerfile文件,这个文件十分简单!!!!

Docker镜像逐渐成为企业交付的标准,必须要掌握!!!

构建三步骤(开发、部署、运维)
· 编写Dockerfile文件,定义了一切步骤,源代码
· docker build命令构建镜像,最终发布和运行产品
· docker run依镜像运行容器实例

Dockerfile内容基础知识
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层并对镜像进行提交

Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
在这里插入图片描述

2.3 Dockerfile指令

在这里插入图片描述

1、FROM  指定一个已存在的基础镜像当做模板,镜像本身就是分层的,这里的From就是指定基础层。此指令必需放在有效指令的第一行。怎么选择合适的镜像呢?
对于不同的软件官方都提供了相关的docker镜像,比如:nginx、redis、mysql、httpd、tomcat等服务类的镜像,也有操作系统类,如:centos、ubuntu、debian等。建议使用官方镜像,比较安全。e.g.FROM ubuntu
FROM nginx
如上示例,可以指定Ubuntu这种操作系统镜像作为基础镜像,也可以指定类似nginx这种已经二次应用镜像当做基础镜像。2、LABEL  指定镜像元数据,如:镜像作者等LABEL <key>=<value> <key>=<value> <key>=<value> ...e.g.LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."3、MAINTAINER  指定镜像作者信息
MAINTAINER <name>
此指令已过时,用LABEL代替e.g.MAINTAINER zyl <zyl@163.com>
#用LABEL代替
LABEL maintainer="zyl <zyl@163.com>"4、RUN 镜像构建时需要执行的shell命令注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。最佳实践:可以的话,尽量将多个run合并,减少容器层数文件层数。e.g.#shell 格式: 
RUN <命令> #exec 格式: 
RUN ["可执行文件", "参数1", "参数2"]5、ADD 复制和解包文件,指定本地目录中的文件到容器中,可认为是增强版的COPY,不仅支持COPY,还支持解缩。
说明:如果src是目录,只复制目录中的内容,而非目录本身
如果src是本地打包或压缩文件,如gzip, bzip2 ,xz ,将解包
如果src是一个 URL ,下载后的文件权限自动设置为 6006、WORKDIR  镜像的工作目录7、VOLUME 挂载的目录8、EXPOSE 暴露端口告诉 Docker 服务端容器暴露的端口号,供互联系统使用。EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射因此,在启动容器时需要通过 -P 或-p ,Docker 主机会分配一个端口转发到指定暴露的端口,才可以使用9、COPY  复制文本
复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。e.g.
COPY hom* /mydir/    COPY hom?.txt /mydir/10、CMD   容器启动命令指定启动容器时默认执行的命令,即:如果docker run没有指定任何的执行命令或者dockerfile里面也没有ENTRYPOINT,那么就会使用执行CMD指定的默认的命令每个 Dockerfile 只能有一条 CMD 命令。如指定了多条,只有最后一条被执行如果用户启动容器时指定了运行的命令,如:docker run xxx /bin/bash,则/bin/bash 会覆盖 CMD 指定的命令11、ENTRYPOINT  入口点功能类似于CMD,配置容器启动后执行的命令及参数,并且不可被 docker run 提供的参数覆盖,而是追加如果docker run命令有参数,那么参数全部都会作为ENTRYPOINT的参数。如果docker run后面没有额外参数,但是dockerfile中的CMD里有(即上面CMD的第三种用法),那么CMD的全部内容会作为ENTRYPOINT的参数可以通过docker run –entrypoint 参数在运行时替换使用CMD要在运行时重新写命令才能追加运行参数,ENTRYPOINT则可以运行时接受新参数每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效12、ONBUILD  子镜像引用父镜像的指令可以用来配置当创建当前镜像的子镜像时,会自动触发执行的指令。13、ENV  设置环境变量指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持

Dockerfile文件指令总结:
在这里插入图片描述

2.4 实战—构建自己的一个centos

1、创建有关dockerfile目录

[root@zyl-server ~]# mkdir dockerfile
[root@zyl-server ~]# ll
total 4
-rw-------. 1 root root 1419 Aug 12 20:31 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Aug 29 23:30 dockerfile
drwxr-xr-x. 2 root root   51 Aug 28 22:50 docker-test-volume
[root@zyl-server ~]# cd dockerfile/
[root@zyl-server dockerfile]# ll
total 0
[root@zyl-server dockerfile]# vi mydockerfile
[root@zyl-server dockerfile]# 

2、编写构建文件

FROM centos MAINTAINER zyl<zyl@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "-----end-----"CMD /bin/bash

在这里插入图片描述

3、通过dockerfile文件构建镜像

[root@zyl-server dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .

报错:通过dockerfile yum -y install vim 安装 vim 时 ,从仓库 ‘appstream’ 下载元数据失败:由于镜像列表中没有 URL,不能准备内部镜像列表。

CentOS Linux 8 - AppStream                       75  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1

解决办法:

这是因为Centos8于2021年年底停止了服务,使用yum源安装时候,就会报错:Failed to download metadata for repo ‘AppStream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist”,这时我们需要在dockerfile文件指定centos版本小于8版本:

FROM centos:centos7MAINTAINER zyl<zyl@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "-----end-----"CMD /bin/bash

再次构建镜像:

[root@zyl-server dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .
..............................
..............................
Successfully built a3e6ef33a458
Successfully tagged mycentos:1.0###docker images  检查
[root@zyl-server dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     1.0       a3e6ef33a458   33 seconds ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago    204MB
[root@zyl-server dockerfile]# 

在这里插入图片描述

测试运行(自己构建的镜像与官方的centos原生镜像):
在这里插入图片描述

在这里插入图片描述

2.5 实战—构建自己的一个tomcat

创建工作目录


[root@zyl-server ~]# mkdir zyl-bulid
[root@zyl-server ~]# cd zyl-bulid/
[root@zyl-server zyl-bulid]# mkdir tomcat
[root@zyl-server zyl-bulid]# cd tomcat
[root@zyl-server tomcat]# ll
total 0
[root@zyl-server tomcat]#

1、准备jdk、tomcat压缩包
在这里插入图片描述

2、编写Dockerfile文件(官方命名:Dockerfile,build 时会自动寻找这个文件,就不再需要使用 -f 指定了)


FROM centos:centos7MAINTAINER zyl<zyl@163.com>COPY readme.txt /usr/local/readme.txtADD jdk-8u381-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.73.tar.gz /usr/local/RUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_381
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.73ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.73ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.73/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.73/bin/logs/catalina.out

在这里插入图片描述

3、构建镜像

docker build -t mytomcat .
..............
..............
Successfully built 7b01ac741538
Successfully tagged mytomcat:latest

在这里插入图片描述
4、docker images 检查

[root@zyl-server tomcat]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mytomcat     latest    7b01ac741538   51 seconds ago   838MB
mycentos     1.0       a3e6ef33a458   46 minutes ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago    204MB
centos       latest    5d0da3dc9764   23 months ago    231MB
[root@zyl-server tomcat]#

5、运行镜像

1、运行
[root@zyl-server tomcat]# docker run -d -p 9090:8080 --name zyl-tomcat -v /home/zyl/projects/test:/usr/local/apache-tomcat-9.0.73/webapps/test -v /home/zyl/projects/tomcatlogs/:/usr/local/apache-tomcat-9.0.73/logs mytomcat
1706ccdbea21e820785d4edef01774263553578e664edf3ceafab2104f85e794
[root@zyl-server tomcat]#2、进入容器
[root@zyl-server tomcat]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
1706ccdbea21   mytomcat   "/bin/sh -c '/usr/lo…"   2 minutes ago   Up 2 minutes   0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   zyl-tomcat
[root@zyl-server tomcat]# docker exec -it 1706ccdbea21 /bin/bash
[root@1706ccdbea21 local]#3、测试访问[root@zyl-server tomcat]# curl localhost:9090

在这里插入图片描述

浏览器访问:http://192.168.234.10:9090/

在这里插入图片描述

6、发布项目

由于做了卷挂载,在本地就可直接编写项目发布
1、进入挂载目录:/home/zyl/projects/test
2、新建index.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body><h1>醉颜凉的第一个web项目。</h1>
<p>Hello Apache Tomcat/10.0.14</p></body>
</html>

7、访问项目(注意test为卷挂载目录)

http://192.168.234.10:9090/test/

在这里插入图片描述
8、日志查看

[root@zyl-server tomcatlogs]# pwd
/home/zyl/projects/tomcatlogs
[root@zyl-server tomcatlogs]#[root@zyl-server tomcatlogs]# ll
total 24
-rw-r-----. 1 root root 6283 Aug 30 10:45 catalina.2023-08-30.log
-rw-r-----. 1 root root 6283 Aug 30 10:45 catalina.out
-rw-r-----. 1 root root    0 Aug 30 10:45 host-manager.2023-08-30.log
-rw-r-----. 1 root root  408 Aug 30 10:45 localhost.2023-08-30.log
-rw-r-----. 1 root root 1832 Aug 30 11:03 localhost_access_log.2023-08-30.txt
-rw-r-----. 1 root root    0 Aug 30 10:45 manager.2023-08-30.log
[root@zyl-server tomcatlogs]#

在这里插入图片描述

我们之后的一切,都是使用Dockerfile镜像来发布运行!!!!!!

三、发布镜像至阿里云

Docker基础入门:镜像、容器导入导出与私有仓库搭建

3.1、登录阿里云Docker Registry

[root@zyl-server tomcatlogs]# docker login --username=zhb1999 registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
[root@zyl-server tomcatlogs]#

3.2、使用" docker push" 命令将centos镜像提交至阿里云

####将mytomcat 镜像IMAGE ID (7b01ac741538)提交至阿里云
[root@zyl-server tomcatlogs]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
mytomcat     latest    7b01ac741538   34 minutes ago      838MB
mycentos     1.0       a3e6ef33a458   About an hour ago   698MB
centos       centos7   eeb6ee3f44bd   23 months ago       204MB
centos       latest    5d0da3dc9764   23 months ago       231MB
[root@zyl-server tomcatlogs]####  推送
[root@zyl-server tomcatlogs]# docker tag 7b01ac741538 registry.cn-hangzhou.aliyuncs.com/zhaohaibao/mytomcat:9.0
[root@zyl-server tomcatlogs]# docker push  registry.cn-hangzhou.aliyuncs.com/zhaohaibao/mytomcat:9.0

在这里插入图片描述

提交发布的时候也是按层级进行提交的,发布时带上版本号!!!!

3.3、阿里云镜像仓库查看

在这里插入图片描述

四、总结—温故知新(图片来源于网络)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关文章:

Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

Docker基础入门&#xff1a;容器数据卷与Dockerfile构建镜像&#xff08;发布&#xff09; 一、docker容器数据卷1.1、使用docker容器数据卷1.2、具名挂载、匿名挂载1.3、如何确定是具名挂载还是匿名挂载 二、使用dockerfile2.1 初识Dockerfile2.2 Dockerfile构建过程2.3 Docke…...

部署问题集合(二十一)从零开始搭建一台NAS服务器(Linux虚拟机)

前言 因工作需要&#xff0c;需要从零通过虚拟机搭建一台NAS服务器&#xff0c;以此记录下来 步骤 1、创建虚拟机 通过VMWare创建一台新虚拟机&#xff0c;虚拟机内存和磁盘自定义&#xff0c;不过建议尽量大一点 2、服务器端配置 查看是否安装有NFS服务&#xff1a;rpm …...

Git小白入门——了解分布式版本管理和安装

Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09; 什么是版本控制系统&#xff1f; 程序员开发过程中&#xff0c;对于每次开发对各种文件的修改、增加、删除&#xff0c;达到预期阶段的一个快照就叫做一个版本。 如果有一…...

芯科科技宣布推出下一代暨第三代无线开发平台,打造更智能、更高效的物联网

第三代平台中的人工智能/机器学习引擎可将性能提升100倍以上 Simplicity Studio 6软件开发工具包通过新的开发环境将开发人员带向第三代平台 中国&#xff0c;北京 - 2023年8月22日 – 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&…...

无涯教程-Android - Intents/Filters

Android Intent 是要执行的操作的抽象描述。它可以与 startActivity 一起启动Activity&#xff0c;将 broadcastIntent 发送给任何BroadcastReceiver组件&#xff0c;并与 startService(Intent)或 bindService(Intent&#xff0c;ServiceConnection&#xff0c;int)与后台服务进…...

NFTScan 正式上线 Base NFTScan 浏览器和 NFT API 数据服务

2023 年 8 月 24 号&#xff0c;NFTScan 团队正式对外发布了 Base NFTScan 基础设施&#xff0c;将为 Base 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商&#xff0c;Base 是继 Bitcoin、Ethereum、BNBChain、…...

【Git】测试持续集成——Git+Gitee+PyCharm

文章目录 概述一、使用Gitee1. 注册账号2. 绑定邮箱3. 新建仓库4. 查看项目地址 二、安装配置Git1. 下载安装包2. 校验是否安装成功。3. 配置Git4. Git命令5. Git实操 三、PyCharmGit1. 配置Git2. Clone项目3. 提交文件到服务器4. 从服务器拉取文件 概述 持续集成&#xff08;…...

《HelloGitHub》第 89 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …...

多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比

多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比 模型…...

c语言每日一练(12)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…...

用AI + Milvus Cloud搭建着装搭配推荐系统

在上一篇文章中,我们学习了如何利用人工智能技术(例如开源 AI 向量数据库 Milvus Cloud 和 Hugging Face 模型)寻找与自己穿搭风格相似的明星。在这篇文章中,我们将进一步介绍如何通过对上篇文章中的项目代码稍作修改,获得更详细和准确的结果,文末附赠彩蛋。 注:试用此…...

41、springboot 整合 FreeMarker 模版技术

springboot 整合 FreeMarker 模版技术 ★ 整合FreeMarker的自动配置&#xff1a; FreeMarkerAutoConfiguration&#xff1a;负责整合Spring容器和获取FreeMarkerProperties加载的配置信息。FreeMarkerServletWebConfiguration/FreeMarkerReactiveWebConfiguration&#xff1a…...

每天 26,315 美元罚款?交通安全局要求特斯拉提供 Autopilot数据

根据美国国家公路交通安全管理局&#xff08;NHTSA&#xff09;最近的特别命令&#xff0c;特斯拉公司被要求提供关于其自动驾驶功能Autopilot的相关信息。这一命令是继NHTSA于2021年8月启动初步评估后&#xff0c;在2022年6月升级为正式调查的一部分&#xff0c;NHTSA近期对特…...

3d激光slam建图与定位(2)_aloam代码阅读

1.常用的几种loam算法 aloam 纯激光 lego_loam 纯激光 去除了地面 lio_sam imu激光紧耦合 lvi_sam 激光视觉 2.代码思路 2.1.特征点提取scanRegistration.cpp&#xff0c;这个文件的目的是为了根据曲率提取4种特征点和对当前点云进行预处理 输入是雷达点云话题 输出是 4种特征点…...

Java 8 新特性——Lambda 表达式(2)

一、Java Stream API Java Stream函数式编程接口最初在Java 8中引入&#xff0c;并且与 lambda 一起成为Java开发里程碑式的功能特性&#xff0c;它极大的方便了开放人员处理集合类数据的效率。 Java Stream就是一个数据流经的管道&#xff0c;并且在管道中对数据进行操作&…...

MES管理系统中常用的数据模型有哪些

在MES管理系统项目中&#xff0c;数据建模对于生产过程的监控、分析和管理具有至关重要的作用。本文将介绍一些常见的MES管理系统数据建模方面&#xff0c;并阐述它们在生产过程中的重要性和应用。 1、产品数据模型是MES系统中的基础模块之一。它涵盖了产品的基本信息、规格和属…...

ARM DIY(三)板载串口和 LCD 调试

前言 今天焊接两大关键输入输出设备&#xff1a;串口和屏幕。 串口 串口部分使用 CP2102N 芯片&#xff08;USB 转 TTL&#xff09;&#xff0c;这样用一根数据线连接板子和 PC 就可以直接调试了。 焊接 CP2102 和 Type C 上电调试&#xff0c;串口可以正常输入输出。 看来…...

计算机网络-笔记-第一章-计算机网络概述

目录 一、第一章——计算机网络概述 1、因特网概述 &#xff08;1&#xff09;网络、互联网、因特网 &#xff08;2&#xff09;因特网发展的三个阶段 &#xff08;3&#xff09;因特网服务的提供者&#xff08;ISP&#xff09; &#xff08;4&#xff09;因特网标准化工…...

Oracle-day4:分组查询(带条件)、DDL建表、约束、主从表

一、内容回顾 /*------------------内容回顾------------------------上周内容回顾--1、单表的基础查询--A、select * from emp;--B、列的运算 --数字类型运算 - * /--函数运算 mod ceil floor round upper lower--C、取别名--列、表达书取别名--*表示所有的列和列同时存在时…...

(详解)数据结构-----------栈与队列 c语言实现

本章将会详细讲解以下知识点&#xff1a; 目录 一&#xff1a;栈 1&#xff1a;栈的定义&#xff0c;栈的特点 2&#xff1a;用什么结构来实现栈与原因的分析? 3: (超详解)栈的常用接口并且附上测试用例 二:队列 1:队列的定义&#xff0c;队列的特点 2&#xff1a;用什么结…...

前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)

前言&#xff1a;基于天翼云的面相对象存储(Object-Oriented Storage&#xff0c;OOS),实现小文件的直接上传&#xff0c;大文件的分片上传。 开发文档地址&#xff1a;网址 上传之前的相关操作&#xff1a;注册账户&#xff0c;创建 AccessKeyId 和 AccessSecretKey之后&…...

java自动登录 selenium 自动登录并获取cookie

选择操作网页 我用的edge&#xff0c;谷歌我的版本太高没有对应的驱动… 下载Edge的驱动程序&#xff0c;直接解压就好里面只有一个.exe文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 复制即用&#xff0c;看注释 import com.alibaba.fastjs…...

vue中 computed()方法详解

在Vue中&#xff0c;computed是一种计算属性&#xff0c;它用于定义一个属性&#xff0c;该属性的值是根据其他属性的值计算而来的。computed属性的值会被缓存&#xff0c;只有当依赖的属性发生变化时&#xff0c;才会重新计算。 computed属性可以在Vue实例的computed选项中定…...

在服务器上搭建Jenkins

目录 1.服务器要求 2.官方文档 3.在服务器上下载Jenkins 3.1 下载war包 3.2 将war包上传到服务器的一个目录下 3.3 启动jenkins 3.3.1 jdk版本升级 1&#xff09;下载jdk17 2&#xff09;解压到当前文件夹 3&#xff09;配置路径 4.jenkins配置 4.1 填写初始密码&a…...

全面解析MES系统中的报工操作

一、报工操作的定义&#xff1a; 报工操作是指在生产过程中&#xff0c;操作员通过MES系统记录和提交生产工序的相关信息&#xff0c;如工时、产量、质量等。报工操作将生产过程中的实际情况反馈给MES系统&#xff0c;实现生产数据的实时采集和记录。 二、报工操作的流程&…...

Harbor 私有仓库迁移

文章目录 一.私有仓库迁移的介绍1.为何要对Harbor 私有仓库的迁移2.Harbor 私有仓库的迁移特点3. Harbor 私有仓库的迁移注意要点 二.私有仓库迁移配置1.源Harbor配置&#xff08;192.168.198.11&#xff09;&#xff08;1&#xff09;接着以下操作查看容器状况及是否可以登录 …...

制造业物联网革命:智慧工厂数据采集与远程监控管理

智慧工厂是指运用现代信息技术和物联网技术&#xff0c;实现制造业生产过程的智能数字化。智慧工厂的工业设备不仅能够自动化运行&#xff0c;还可以通过网络技术帮助企业实现数据采集、远程监控与管理。4G工业网关便成为了智慧工厂通讯的重要组成部分&#xff0c;起到了连接工…...

软考A计划-网络工程师-复习背熟-网络管理和计算机基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…...

springBoot打印精美logo

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;文本logo &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以提供springBoot打印精美logo &#x1f380;文本logo ??…...

kali开启SSH服务(简单无比)

我会一直陪着你 1.切换到管理员用户&#xff1a;2.启动SSH服务3.要在Kali Linux上启用SSH服务并修改配置文件&#xff0c;你可以按照以下步骤进行操作&#xff1a;4.查看SSH服务状态是否正常运行&#xff0c;命令为&#xff1a;注意&#xff1a;配置文件有些地方不同&#xff0…...

Ubuntu20.04如何更换国内源-阿里云源

1.备份源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.打开源文件&#xff0c;注释默认的源 vim /etc/apt/sources.list ## 注释原本内容 # deb http://mirrors.ivolces.com/ubuntu/ focal main restricted universe multiverse # deb-src http://mirrors.ivolc…...

goland设置

1、go file设置 file->setting->Editor->File and Code Templates->Go File package ${GO_PACKAGE_NAME} /** * description: * author:${USER} * date:${YEAR}/${MONTH}/${DAY} ${HOUR}:${MINUTE} * Versio…...

2023年Java核心技术第十篇(篇篇万字精讲)

目录 十九 . 一个线程两次调用start&#xff08;&#xff09;方法会出现什么情况&#xff1f;线程的生命周期和状态转移。 19.1 典型回答 19.1.1 线程生命周期&#xff1a; 19.1.2 计时等待详细解释&#xff1a; 19.2 深入扩展考察 19.2.1 线程是什么&#xff1f; 19.2.2 Green…...

分享一篇关于如何使用BootstrapVue的入门指南

你想轻松地创建令人惊叹且响应式的在线应用程序吗&#xff1f;使用BootstrapVue&#xff0c;您可以快速创建美观且用户友好的界面。这个开源工具包是基于Vue.js和Bootstrap构建的&#xff0c;非常适合开发现代Web应用程序。本文将介绍其基础知识&#xff0c;让您可以开始使用这…...

【1day】复现Cellular Router命令执行漏洞

目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 移动路由器(Cellular Router)是一种利用移动网络提供无线互联网连接的设备。它们类似于传统路由器,但不同于使用有线连接(如以太网或DSL)...

【Torch API】pytorch 中repeat_interleave函数详解

torch.repeat_interleave(input, repeats, dimNone) → Tensor Repeat elements of a tensor. Parameters input (Tensor) – the input tensor. repeats (Tensor or int) – The number of repetitions for each element. repeats is broadcasted to fit the shape of the …...

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…...

springgateway网关修改响应后,部分中文乱码问题

原因 是因为响应体过大&#xff0c;开启了压缩&#xff0c;数据分段进行响应得&#xff0c;导致处理返回体得时候乱码 解决方式 Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getR…...

微信开发之一键发布群公告的技术实现

简要描述&#xff1a; 设置群公告 请求URL&#xff1a; http://域名地址/setChatRoomAnnouncement 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…...

R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列...

全文下载链接&#xff1a;http://tecdat.cn/?p25880 本文描述了一个模型&#xff0c;该模型解释了交易的聚集到达&#xff0c;并展示了如何将其应用于比特币交易数据。这是很有趣的&#xff0c;原因很多。例如&#xff0c;对于交易来说&#xff0c;能够预测在短期内是否有更多…...

自动化运维:Ansible脚本之playbook剧本

目录 一、理论 1.playbooks 2.YAML 3.使用ansible批量安装apache服务 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 8.Templates 模块 9.tags 模块 10.Roles 模块 二、实验 1.使用ansible批量安装apache服务 2.定义、引用变量…...

基于角色访问控制-RBAC(Role-Based Access Control)

1.RBAC简介 RBAC&#xff08;Role-Based Access Control&#xff09;是一种基于角色的访问控制模型&#xff0c;它是一种安全策略&#xff0c;用于限制系统中用户对资源的访问权限。RBAC模型的核心概念是用户角色和资源访问权限。 在角色访问控制中&#xff0c;首先需要定义系…...

springboot项目实现断点续传

java代码 package com.ruoyi.web.upload.controller; import com.ruoyi.web.upload.dto.FileChunkDTO; import com.ruoyi.web.upload.dto.FileChunkResultDTO; import com.ruoyi.web.upload.result.Result; import com.ruoyi.web.upload.service.IUploadService; import org.s…...

解析经典面试题:for 循环中的 let var

更多文章可以看看我的博客&#xff1a;https://icheng.github.io/ 题目 for循环中&#xff0c;使用 var 或 let 声明 i 变量&#xff0c;会得到不同的结果 var arr []; for (var i 0; i < 2; i) {arr[i] function () {console.log(i);} } arr[0](); arr[1]();输出&…...

CSS按钮-跑马灯边框

思路很简单&#xff0c;实现方法有很多很多。但是大体思路与实现方法都类似&#xff1a;渐变色 动画&#xff0c;主要区别在动画的具体实现 0、HTML 结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…...

【PCIE系统学习】Gen1/2Gen3/4 symobl与OrderSet概念对比

这个专栏要干的事:学习PCIE理论知识,学会PCIE IP/VIP的使用。可以达到上手做项目,而不是空有理论 适合谁看:正在学习PCIE 设计验证,但学的过于零散。想有对比的系统的学习。 低价收费的目的:抵制胡乱传播转载现象。 版本控制:便于增加内容以及勘误 版本说明v20230829 …...

C++ Qt 中QMimeDatabase类详细介绍以及应用场景

C Qt 中QMimeDatabase类详细介绍以及应用场景 文章目录 C Qt 中QMimeDatabase类详细介绍以及应用场景一、QMimeDatabase类是什么&#xff1f;二、QMimeDatabase类中的关键功能和特点三、QMimeDatabase的用法四、QMimeDatabase的应用场景 一、QMimeDatabase类是什么&#xff1f;…...

深度学习7:生成对抗网络 – Generative Adversarial Networks | GAN

生成对抗网络 – GAN 是最近2年很热门的一种无监督算法&#xff0c;他能生成出非常逼真的照片&#xff0c;图像甚至视频。我们手机里的照片处理软件中就会使用到它。 目录 生成对抗网络 GAN 的基本原理 大白话版本 非大白话版本 第一阶段&#xff1a;固定「判别器D」&#x…...

R语言空气污染数据的地理空间可视化和分析:颗粒物2.5(PM2.5)和空气质量指数(AQI)...

原文链接&#xff1a;http://tecdat.cn/?p23800 由于空气污染对公众健康的不利影响&#xff0c;人们一直非常关注。世界各国的环境部门都通过各种方法&#xff08;例如地面观测网络&#xff09;来监测和评估空气污染问题&#xff08;点击文末“阅读原文”获取完整代码数据&…...

实现excel导出最简单方式

今天来记录一下导出excel的实现方式&#xff0c;导出的格式是xlsx的文件。 这里用到的是hutool的工具包&#xff0c;依赖如下&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5&…...