Docker 入门笔记

课程地址

容器技术概述

docker能做什么:将应用程序代码和依赖打包为一个镜像,作为交付介质,在各种环境中部署

相比于虚拟机,docker 只虚拟出一个隔离的程序运行环境,其需要则资源大大减少

在这里插入图片描述

容器内的程序就好像直接运行在宿主机上,能够最大限度地使用宿主机的资源,但是它们相互隔离

容器对比KVM虚拟机的好处:

  • 容器能够提供宿主机的原生的性能,而 kvm 虚拟机是分配宿主机硬件资源,容器需要的资源更少
  • 启动一个 KVM 虚拟机,得有一个完整的开机流程,花费时间较长,或许得20S,而启动一个容器只需要1S
  • KVM 需要硬件 CPU 的虚拟化支持,而容器不需要

在这里插入图片描述

Docker的使用流程:

在这里插入图片描述
docker最核心的组件:

  • image镜像,构建容器(我们讲应用程序运行所需的环境,打包为镜像文件)
  • container,容器(你的应用程序,就跑在容器中)
  • 镜像仓库(dockerhub):保存镜像文件,提供上传,下载镜像)作用好比 github
  • Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是 dockerfile,且该脚本还能够构建出镜像文件

容器是镜像的一个运行实例

安装 Docker

更新本地仓库:

$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all 			#清空本地缓存
$ yum makecache				#新的缓存
$ iptables -F

关闭selinux

getenforce		# 获取selinux状态
sestatus		# 获取selinux状态
vim /etc/selinux/config		# 修改selinux状态

#output

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

关闭并停止防火墙:

systemctl disable firewalld
systemctl stop firewalld

开启linux内核的流量转发:

cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF

# 加载配置文件
modprobe br_netfilter
sysctl -p /etc/sysctl.d/docker.conf

通过yum安装docker

curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all && yum makecache
yum install docker-ce-20.10.6 -y

遇到的问题:

--> Finished Dependency Resolution
Error: Package: containerd.io-1.6.15-3.1.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
Error: Package: docker-ce-rootless-extras-20.10.22-3.el7.x86_64 (docker-ce-stable)
           Requires: fuse-overlayfs >= 0.7
Error: Package: 3:docker-ce-20.10.6-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
Error: Package: docker-ce-rootless-extras-20.10.22-3.el7.x86_64 (docker-ce-stable)
           Requires: slirp4netns >= 0.4
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

解决方法

简单来说就是去这个地方寻找最新的依赖,比如slirp4netns-0.4.3-4.el7_8.x86_64.rpm,然后通过

sudo yum install -y yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/slirp4netns-0.4.3-4.el7_8.x86_64.rpm

安装这个最新的依赖,最后重新执行docker的安装命令即可。其他的依赖也是同理

配置镜像加速:

$ vim /etc/docker/daemon.json
$ cat /etc/docker/daemon.json 
{
"registry-mirrors" : [
 	"https://8xpk5wnt.mirror.aliyuncs.com"
 ]
}

启动docker:

systemctl daemon-reload
systemctl enable docker
systemctl restart docker

使用 Docker

在这里插入图片描述

Docker 启动与停止

# 安装nginx镜像
docker pull nginx
# 查看本地安装的镜像
docker images
# 删除镜像
docker rmi 605c77e624dd
# 启动镜像
# -p, --publish list: Publish a container's port(s) to the host, host_port: container_port
# -d, --detach
docker run -d -p 880:80 nginx	# -d, --detach
# 查看正在运行的实例
docker ps
# 停止镜像
docker stop 1bf388d03f19
# 再次启动
docker start 1bf388d03f19

启动nginx后,就可以访问http://192.168.93.12:880看到nginx服务了,注意这里的880是宿主机端口,经过映射才到了容器内的nginx的80端口

Docker 生命周期

在这里插入图片描述

切换不同的 Linux 发行版

内核都公用宿主机的内核,上层的发行版可由 docker 自由替换

确认当前宿主机发行版:

$ cat /etc/redhat-release
$ cat /etc/os-release
CentOS Linux release 7.9.2009 (Core)

下载 2 个新的发行版:

$ docker pull ubuntu
$ docker pull centos:7.8.2003

$ docker images
REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
nginx        latest     605c77e624dd   12 months ago   141MB
redis        latest     7614ae9453d1   13 months ago   113MB
ubuntu       latest     ba6acccedd29   15 months ago   72.8MB
centos       7.8.2003   afb6fca791e0   2 years ago     203MB

开启一个新的终端:

$ docker run -it afb6fca791e0 bash	# --interactive --tty

查看容器内的发行版本:

[root@132e45321e68 /]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

Docker 镜像管理

在这里插入图片描述

在这里插入图片描述

进入到正在运行的容器内exec

$ docker exec -it 1bf388d03f19 bash

root@1bf388d03f19:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@1bf388d03f19:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

分层镜像的好处:共享资源,例如有多个镜像都来自于同一个 base 镜像,那么在 docker host 只需要存储一份base镜像。内存里也只需要加载一份host,即可为多个容器服务
即使多个容器共享一个 base 镜像,某个容器修改了 base 镜像的内容,例如修改/etc/下配置文件,其他容器的/etc/下内容是不会被修改的,修改动作只限制在单个容器内,这就是容器的写入时复制特性 (Copy-on-write)

当容器启动后,一个新的可写层被加载到容器顶部,这一层通常被称为容器层,容器层之下都被称为镜像层

在这里插入图片描述
只有容器层可写的,下面的镜像层都是只读

在这里插入图片描述

获取镜像

docker images	# 查看本地镜像
docker search image_name[:version]
docker pull image_name[:version]

获取docker信息:docker info

$ docker info | grep Root
Docker Root Dir: /var/lib/docker

# 该目录下的每一个文件都是一个json文件,记录了镜像和容器的关系
$ pwd
/var/lib/docker/image/overlay2/imagedb/content/sha256

#--rm: Automatically remove the container when it exits
$ docker run -it --rm 5d0da3dc9764 bash

[root@f8c3d3b2783d /]# cat /etc/redhat-release 
CentOS Linux release 8.4.2105

查看镜像

docker images
docker images centos
docker images centos:7.8.2003
docker images -q		#只获取IDs:--quiet, Only show image IDs

格式化显示镜像:

$ docker images --format "{{.ID}}:{{.Repository}}"
605c77e624dd:nginx
7614ae9453d1:redis
ba6acccedd29:ubuntu
5d0da3dc9764:centos
afb6fca791e0:centos

$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID       REPOSITORY   TAG
605c77e624dd   nginx        latest
7614ae9453d1   redis        latest
ba6acccedd29   ubuntu       latest
5d0da3dc9764   centos       latest
afb6fca791e0   centos       7.8.2003

删除镜像

hello-world镜像:

docker pull hello-world
docker run hello-world

查看所有运行(过)的容器记录:

docker ps -a 	#--all, Show all containers (default shows just running)

先删除容器记录:

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                      PORTS                               NAMES
4fca3667e308   hello-world    "/hello"                 3 minutes ago   Exited (0) 3 minutes ago                                        nifty_babbage
7e90b6e223d6   nginx          "/docker-entrypoint.…"   3 hours ago     Up 3 hours                  0.0.0.0:80->80/tcp, :::80->80/tcp   stoic_mccarthy
6bce09c83930   ba6acccedd29   "bash"                   19 hours ago    Exited (127) 18 hours ago                                       infallible_gates
132e45321e68   afb6fca791e0   "bash"                   19 hours ago    Exited (0) 19 hours ago                                         objective_mclaren
803ecacc6b7d   afb6fca791e0   "absh"                   19 hours ago    Created                                                         epic_booth
7b05004a50eb   afb6fca791e0   "/bin/bash"              19 hours ago    Exited (0) 19 hours ago                                         inspiring_borg
1bf388d03f19   nginx          "/docker-entrypoint.…"   24 hours ago    Exited (0) 12 hours ago                                         awesome_mayer

$ docker rm 4fca3667e308
4fca3667e308

再删除容器:

# 或者:docker rmi hello-world
$ docker rmi feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

批量删除:

# 批量删除所有镜像
docker rmi `docker images -aq`	# -a: all, -q: quit
# 批量删除所有容器
docker rm `docker images -aq`

导出镜像

将修改过的镜像打包导出,比如安装了各种实用工具的os镜像

docker image save centos:7.8.2003 > ./centos7.8.2003.tgz

导入镜像

docker image load -i ./centos7.8.2003.tgz 	# 导入镜像
$ docker rm `docker ps -aq`		# 删除镜像
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ docker images
REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
nginx        latest     605c77e624dd   12 months ago   141MB
redis        latest     7614ae9453d1   13 months ago   113MB
ubuntu       latest     ba6acccedd29   15 months ago   72.8MB
centos       latest     5d0da3dc9764   16 months ago   231MB
centos       7.8.2003   afb6fca791e0   2 years ago     203MB

$ docker rmi afb6fca791e0
Untagged: centos:7.8.2003
Untagged: centos@sha256:8540a199ad51c6b7b51492fa9fee27549fd11b3bb913e888ab2ccf77cbb72cc1
Deleted: sha256:afb6fca791e071c66276202f8efca5ce3d3dc4fb218bcddff1bc565d981ddd1e
Deleted: sha256:fb82b029bea0a2a3b6a62a9c1e47e57fae2a82f629b2d1a346da4fc8fb53a0b6
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   12 months ago   141MB
redis        latest    7614ae9453d1   13 months ago   113MB
ubuntu       latest    ba6acccedd29   15 months ago   72.8MB
centos       latest    5d0da3dc9764   16 months ago   231MB

$ docker image load -i ./centos7.8.2003.tgz 	# 导入镜像
fb82b029bea0: Loading layer [==================================================>]  211.1MB/211.1MB
Loaded image: centos:7.8.2003
$ docker images
REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
nginx        latest     605c77e624dd   12 months ago   141MB
redis        latest     7614ae9453d1   13 months ago   113MB
ubuntu       latest     ba6acccedd29   15 months ago   72.8MB
centos       latest     5d0da3dc9764   16 months ago   231MB
centos       7.8.2003   afb6fca791e0   2 years ago     203MB

查看镜像详细信息:

docker image inspect afb6fca791e0

Docker容器管理

docker run image_name等于创建+启动,如果镜像不存在本地,则会在线下载该镜像

注意,容器内的进程必须处于前台运行状态,否则容器就会直接退出

如果我们运行centos基础镜像,没有运行任何程序,容器会直接挂掉:

$ docker run centos:7.8.2003
$ docker run centos:7.8.2003
$ docker ps		# 运行失败
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ docker ps -a
CONTAINER ID   IMAGE             COMMAND       CREATED          STATUS                      PORTS     NAMES
377a4ced80e0   centos:7.8.2003   "/bin/bash"   7 seconds ago    Exited (0) 7 seconds ago              kind_merkle
62c14dd9fa98   centos:7.8.2003   "/bin/bash"   11 seconds ago   Exited (0) 10 seconds ago             naughty_volhard

# 运行bash,sh和ping
$ docker run -it centos:7.8.2003 bash
[root@520e67be661c /]# exit
exit
$ docker run -it centos:7.8.2003 sh
sh-4.2# exit
exit

$ docker run -it centos:7.8.2003 ping baidu.com

$ docker ps -a
CONTAINER ID   IMAGE             COMMAND            CREATED          STATUS                      PORTS     NAMES
bce9360b1728   centos:7.8.2003   "ping baidu.com"   2 minutes ago    Exited (0) 2 minutes ago              sweet_euclid
45a3d0c7fa81   centos:7.8.2003   "sh"               2 minutes ago    Exited (0) 2 minutes ago              kind_euclid
520e67be661c   centos:7.8.2003   "bash"             2 minutes ago    Exited (0) 2 minutes ago              practical_pare
377a4ced80e0   centos:7.8.2003   "/bin/bash"        4 minutes ago    Exited (0) 4 minutes ago              kind_merkle
62c14dd9fa98   centos:7.8.2003   "/bin/bash"        4 minutes ago    Exited (0) 4 minutes ago              naughty_volhard

# -d后台运行
$ docker run -d centos:7.8.2003 ping baidu.com
2abff83b33b8989e9d0dc23c1e63ff7752186f06875c5aa7cff6792182c0441e
$ docker ps
CONTAINER ID   IMAGE             COMMAND            CREATED         STATUS         PORTS     NAMES
2abff83b33b8   centos:7.8.2003   "ping baidu.com"   5 seconds ago   Up 4 seconds             laughing_panini

其他运行参数:

# rm:运行后自动删除;name:命名
$ docker run -d --rm --name ping_baidu centos:7.8.2003 ping baidu.com
029d84623de7238bf14416969fd1e85a11b101cf13753cae484f8b45056ed269
$ docker ps
CONTAINER ID   IMAGE             COMMAND            CREATED          STATUS          PORTS     NAMES
029d84623de7   centos:7.8.2003   "ping baidu.com"   11 seconds ago   Up 10 seconds             baidu
$ docker stop 029d84623de7
029d84623de7

查看日志:

docker logs 2abff83b33b8 | tail -5

进入到正在运行的容器内:

docker exec -it d502f362eac9 bash

查看容器的详细信息:

docker container inspect d502f362eac9

后台运行nginx:

docker run -d --name docker_demo -p 80:80 nginx

查看容器内的端口转发情况:

$ docker port 87460199b5c5
80/tcp -> 0.0.0.0:85
80/tcp -> :::85

随机端口映射:

docker run -d --name docker_demo_P -P nginx

容器的提交:

# 首先启动一个初始容器
$ docker run -it centos7.8.2003 bash
# 在容器内安装vim
$ yum install vim -y
# 提交
$ docker commit 49ab6f9cfa5b syc198/centos-vim-7.8.2003
# 再次加载带有vim的centos
$ docker run -it syc198/centos-vim-7.8.2003 bash

Dockerfile

镜像是多层存储,每一层在前一层的基础上进行修改

容器也是多层存储,以镜像为基础层,在其基础层上加一层作为容器运行时的存储层

创建镜像有 2 个方法:

  • 手动修改容器内容,docker commit
  • 使用 dockerfile 定制

dockerfile 用于自定义镜像,主要有三大组成部分:

  • 基础镜像信息:FROM centos:6.8
  • 制作镜像操作指令:RUN yum install openssh-server -y
  • 容器启动时执行指令:CMD ["/bin/bash"]
指令含义
FROM父镜像
MAINTAINER维护者
RUN运行shell命令
ADD添加宿主机的文件到容器内,会自动解压
COPY同ADD指令,不会自动解压
WORKDIR设置当前工作目录,作用同cd
VOLUME设置挂载卷,将容器内的目录挂载到主机上
EXPOSE指定对外开放的端口
CMD指定启动容器后要干的事

RUN

需求:写一个 dockerfile 构建一个 nginx 镜像,可以运行 nginx 服务

编写 Dockerfile:

FROM nginx
RUN echo "<h1>hello, Dockerfile<h1>" > /usr/share/nginx/html/index.html

构建:

$ docker build .
$ docker tag c5a08f633c37 my_nginx		# 为生成的镜像命名

运行:

$ docker run -d -p 80:80 my_nginx

COPY与CMD

# copy指令能够保留源文件的元数据,如权限,访问时间等
COPY chaoge.py /home/
COPY chaoge* /tmp/cc?.txt. /home/

CMD ["/bin/bash"]
CMD ["cat", "/etc/os-release"]		# docker run -it centos cat /etc/os-release
CMD ["nginx", "-g", "deamon off"]	# docker中必须要在`前台`运行程序

ENTRYPOINT

ENTRYPOINT 和 CMD:

entrypoint 和 cmd 的作用一样,都是在指定容器启动程序以及参数。但是在指定 entrypoint 后,cmd 指令的语义就有了变化:cmd 中的内容被当作参数传递给 entrypoint 指令

编写Dockerfile:

FROM centos:7.8.2003
RUN rpm --rebuilddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
CMD ["curl", "-s", "http://ipinfo.io/ip"]

构建:

docker build .
docker tag e247b94ec812 centos_curl

运行镜像,生成容器:

$ docker run centos_curl
110.243.77.78		# CMD的执行结果
$ docker run centos_curl pwd
/

如果想对命令curl -s http://ipinfo.io/ip增加-I选项如何呢?

当然可以执行完整的curl命令:

$ docker run centos_curl curl -s http://ipinfo.io/ip -I
HTTP/1.1 200 OK
access-control-allow-origin: *
content-type: text/html; charset=utf-8
content-length: 13
date: Thu, 19 Jan 2023 13:14:25 GMT
x-envoy-upstream-service-time: 1
strict-transport-security: max-age=2592000; includeSubDomains
Via: 1.1 google

这很繁琐,下面修改Dockerfile:

FROM centos:7.8.2003
RUN rpm --rebuilddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
ENTRYPOINT ["curl", "-s", "http://ipinfo.io/ip"]

这时可以简单地增加-I选项:

docker run centos_curl_new -I
# curl -s http://ipinfo.io/ip -I

ARG与ENV

都是给容器设置环境变量

区别在于 ENV 设置的环境变量,无论是在容器构建时还是在容器运行时,该变量都有效;而ARG设置的变量只存在于容器构建时

ENV NAME="daniel"
ENV AGE="18"
ENV MYSQL_VERSION=5.6

RUN yum install mysql-$MYSQL_VERSION

VOLUME

容器运行时,应保证存储层不写入任何数据;运行在容器内产生的数据,推荐挂在到宿主机上,写入宿主机

VOLUME /data,将容器内的/data文件夹在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证的容器存储层无状态理念

FROM centos:7.8.2003
MAINTAINER syc198@qq.com
VOLUME ["/data1", "/data2"]

构建&运行:

docker build .
docker run 35a8a728f7a5

查看详细信息:

docker inspect CONTAINER_ID

得到的目录相关信息:

        "Mounts": [
            {
                "Type": "volume",
                "Name": "ff150caa553c68a29141986f2f0c3a90db0e8391ce849d38a7988d58be3afa94",
                "Source": "/var/lib/docker/volumes/ff150caa553c68a29141986f2f0c3a90db0e8391ce849d38a7988d58be3afa94/_data",
                "Destination": "/data1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "fbb7728b3ddabe83e725310622bb12dc32846f043a53d6600e462566f6dd3b46",
                "Source": "/var/lib/docker/volumes/fbb7728b3ddabe83e725310622bb12dc32846f043a53d6600e462566f6dd3b46/_data",
                "Destination": "/data2",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        
        "Volumes": {
                "/data1": {},
                "/data2": {}
        },

EXPOSE

指定容器运行时对外提供的端口服务

跟端口相关的命令:

docker port 30220bb56389
docker run -p 80:80		# 宿主机端口:容器端口
docker run -P		# 随机端口映射

WORKDIR

在dockerfile中切换工作目录

WORKDIR /opt

USER

在dockerfile中切换用户

USER daniel
USER root

使用Docker部署一个python后端

后端逻辑:

#coding:utf8
from flask import Flask

app=Flask(__name__)
@app.route('/hello')
def hello():
	return "hello form docker, i am daniel"

if __name__ == "__main__":
	app.run(host="0.0.0.0", port=8080)

Dockerfile:

FROM centos:7.8.2003
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo;
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo;
RUN yum makecache fast;
RUN yum install python3-devel python3-pip -y
RUN pip3 install -i https://pypi.douban.com/simple flask
COPY app.py /opt
WORKDIR /opt
EXPOSE 8080
CMD ["python3", "app.py"]

构建和运行:

$ docker build --no-cache -t "my_flask" .
$ docker run -d --name my_flask_1 -p 80:8080 my_flask

如何修改该网站的内容:进入容器,修改代码,重启容器

$ docker exec -it my_flask_1 bash
$ docker restart db09dc0a257d

回顾

docker 利用容器运行应用程序
容器是镜像的运行实例,可以被run、start、stop、rm
每个容器都是相互隔离,保证平台安全
容器可以看作是一个简易版Linux环境(有root权限,进程,用户空间,网络)
镜像是只读的,容器在启动的时候创建一层可写层

在这里插入图片描述

$ docker run --name my_nginx -d --restart=always ubuntu bash
$ docker run --name my_nginx -d -p 80:80 --rm nginx
$ docker run -P -rm nginx
$ docker logs -f

查看容器内进程信息:

$ docker top 458c807fc5aa

查看容器内的资源信息:

$ docker stats 458c807fc5aa

查看容器的详细信息:

$ docker inspect 458c807fc5aa

获取容器IP:

$ docker inspect --format "{{.NetworkSettings.IPAddress}}" 458c807fc5aa

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch 图像数据集管理

目录 1.数据集的管理说明 2.数据集Dataset类说明 3.图像分类常用的类 ImageFolder 1.数据集的管理说明 pytorch使用Dataset来管理训练和测试数据集&#xff0c;前文说过 torchvision.datasets.MNIST 这些 torchvision.datasets里面的数据集都是继承Dataset而来&#xff0c…

QT Mingw编译ffmpeg源码以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频流时…

Linux下快速创建大文件的4种方法总结

1、使用 dd 命令创建大文件 dd 命令用于复制和转换文件&#xff0c;它最常见的用途是创建实时 Linux USB。dd 命令是实际写入硬盘&#xff0c;文件产生的速度取决于硬盘的读写速度&#xff0c;根据文件的大小&#xff0c;该命令将需要一些时间才能完成。 假设我们要创建一个名…

Vuepress的使用

介绍 将markdown静态资源转换成html。 动态资源的转换还有很多&#xff0c;为什么要使用Vuepress&#xff1f; 目录分析 项目配置 详情 具体配置请看文档 插件配置 vuepress-theme-vdoing 主题插件 npm install vuepress-theme-vdoing -D先安装依赖配置主题 使用vuep…

外包干了6个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了重庆一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

GEE入门篇|遥感专业术语(实践操作4):光谱分辨率(Spectral Resolution)

目录 光谱分辨率&#xff08;Spectral Resolution&#xff09; 1.MODIS 2.EO-1 光谱分辨率&#xff08;Spectral Resolution&#xff09; 光谱分辨率是指传感器进行测量的光谱带的数量和宽度。 您可以将光谱带的宽度视为每个波段的波长间隔&#xff0c;在多个波段测量辐射亮…

android开发与实战,那些年Android面试官常问的知识点

前言 在做android项目开发时&#xff0c;大家都知道如果程序出错了&#xff0c;会弹出来一个强制退出的弹 出框&#xff0c;这个本身没什么问题&#xff0c;但是这个UI实在是太丑了&#xff0c;别说用户接受不了&#xff0c;就连 我们自己本身可能都接受不了。虽然我们在发布程…

Vue:【亲测可用】父组件数组包对象,传给子组件对象,子组件修改属性(字段)后,父组件没有更新

场景&#xff1a;vue中父组件数组包对象&#xff0c;传给子组件对象&#xff0c;子组件修改属性&#xff08;字段&#xff09;后&#xff0c;父组件没有更新 代码&#xff1a; # 父组件 <div v-for"(object, name, index) in arr" :key"index"><…

【MySQL】数据管理——DML操作数据

目录 DML&#xff08;数据操作语言&#xff09;添加数据插入单行语法插入多行语法SQL示例将查询结果插入到新表中语法1&#xff1a;语法2&#xff1a; 修改数据语法示例关于SQL的运算符算术运算符比较运算符逻辑运算符 案例 删除数据DELETE命令语法 TRUNCATE TABLE 命令语法代码…

宝塔FTP服务设置并结合cpolar内网穿透实现远程传输文件

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能&#xff0c;用于设置和管理FTP服务。通过宝塔FTP&#xff0c;用户可以创建FTP账号&#xff0c;配置FTP用户权限…

数据结构——lesson4带头双向循环链表实现

前言✨✨ &#x1f4a5;个人主页&#xff1a;大耳朵土土垚-CSDN博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记​​​​​​ &#x1f4a5;双链表与单链表的区分&#xff1a;单链表介绍与实现 &#x1f4a5;对于malloc函数有疑问的:动态内存函数介绍 感谢大家的观看…

为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactive 局限性问题&#xff1a; reactive本身存在一些局限性&#xff0c;可能会在开发过程中引发一些问题。这需要额外的注意力和处理&#xff0c;否则可能对开发造成麻烦。数据类型限制&#xff1a; reactive声明的数据类型仅限于对象&#xff0c;而…

RK3568 android11 调试陀螺仪模块 MPU6500

一&#xff0c;MPU6500功能介绍 1.简介 MPU6500是一款由TDK生产的运动/惯性传感器&#xff0c;属于惯性测量设备&#xff08;IMU&#xff09;的一种。MPU6500集成了3轴加速度计、3轴陀螺仪和一个板载数字运动处理器&#xff08;DMP&#xff09;&#xff0c;能够提供6轴的运动…

【毛毛讲书】【端粒:年轻、健康、长寿的新科学】是什么决定了我们的寿命?

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容&#xff…

es获取某个索引下字段的分词结果

//查看某个索引下字段的分词结果 GET /haha/_analyze { "field": "title", "text":"哈哈。" }

云尚办公-0.1.0

二、用户管理接口 1. 建表 角色与用户是多对多的关系&#xff0c;所以除了角色表和用户表外&#xff0c;还需要第三张表表示这两者间的对应关系。关系表中的用户id和角色id分别以对应表中的id作为外键。 CREATE TABLE sys_user (id BIGINT(20) NOT NULL AUTO_INCREMENT COM…

Vue3切换路由白屏刷新后才显示页面内容

1.首先检查页面路由以及页面路径配置是否配置错误。 在router-view 中给路由添加key标识。 &#xff01;&#xff01;注意&#xff1a;有使用layout封装布局的&#xff0c;是在layout下的主页面中的 router-view 添加标识&#xff0c;不是在src根目录下main.vue中修改&#xf…

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…

【rust】11、所有权

文章目录 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三、所有权原则3.1 变量作用域3.2 String 类型示例 四、变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)…

linux系统Jenkins的安装

Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码&#xff0c;更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…