容器编排学习(二)镜像制作和私有仓库介绍
一 Dockerfile
1 概述
commit的局限
- 很容易制作简单的镜像,但碰到复杂的情况就十分不方便例如碰到下面的情况
- 需要设置默认的启动命令
- 需要设置环境变量
- 需要指定镜像开放某些特定的端口
Dockerfile就是解决这些问题的方法
Dockerfile是一种更强大的镜像制作方式
编写类似脚本的 Dockerfile 文件,通过该文件制作镜像
2 使用
- 创建编写 Dockerfile
- 制作镜像
docker build -t 镜像名称:标签 Dockerfile所在目录
3 指令说明
指令 | 说明 |
---|---|
FROM | 指定基础镜像(唯一) |
RUN | 在容器内执行命令,可以写多条 |
ADD | 把文件拷贝的容器内,如果文件是 tar.xx 格式,会自动解压 |
COPY | 把文件拷贝的容器内,不会自动解压 |
ENV | 设置启动容器的环境变量 |
WORKDIR | 设置启动容器的默认工作目录(唯一) |
CMD | 容器默认的启动参数(唯一) |
ENTRYPOINT | 容器默认的启动命令(唯一) |
USER | 启动容器使用的用户(唯一) |
EXPOSE | 使用镜像创建的容器默认监听使用的端口号/协议 |
4 制作
什么是上帝进程?
简单的说就是系统创建之初产生的第一个进程
特点:
- 没有父进程,PID == 1l
- 是所有程序的根进程
- 上帝进程死亡系统实例也就关闭了
容器有没有上帝进程?
- 容器的启动进程就是上帝进程
- 如果容器的启动进程关闭等同于容器关闭
容器的启动进程能否放在后台运行?
- 后台进程的本质是向系统托管进程服务
- 容器没有操作系统,所以无法实现进程托管
- 如果强行把容器的启动进程放后台,将导致容器直接关闭
- 容器的启动进程必须放在前台运行
5 语法案例
语法案例(1)
# 编写 Dockerfile
[root@docker ~]# mkdir myimg
[root@docker ~]# vim myimg/Dockerfile
FROM mylinux:latest
CMD ["/bin/ls", "-l"]
# 创建镜像
[root@docker ~]# docker build -t img1:latest myimg
......
Successfully tagged img1:latest
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
img1 latest 9278f72f8cb1 5 seconds ago 249MB
mylinux latest e3b3d26bf0da 21 hours ago 249MB
rockylinux 8.5 210996f98b85 13 months ago 205MB
# 创建容器
[root@docker ~]# docker run -it --rm img1:latest
total 48
lrwxrwxrwx 1 root root 7 Oct 11 2021 bin -> usr/bin
drwxr-xr-x 5 root root 360 Feb 5 04:21 dev
drwxr-xr-x 1 root root 4096 Feb 5 04:21 etc
drwxr-xr-x 2 root root 4096 Oct 11 2021 home
......
# 传递参数命令,覆盖 CMD 执行
[root@docker ~]# docker run -it --rm img1:latest id
uid=0(root) gid=0(root) groups=0(root)
语法案例(2)
ENTRYPOINT一定会执行,CMD 可以通过传递参数覆盖
# ENTRYPOINT 与 CMD 执行方式为 ${ENTRYPOINT} ${CMD}
[root@docker ~]# vim myimg/Dockerfile
FROM mylinux:latest
ENTRYPOINT ["echo"]
CMD ["/bin/ls", "-l"]
# 创建镜像
[root@docker ~]# docker build -t img2:latest myimg
......
Successfully tagged img2:latest# CMD 做为参数传递,在容器内执行了 echo '/bin/ls -l'
[root@docker ~]# docker run -it --rm img2:latest
/bin/ls -l# CMD 被替换,在容器内执行了 echo id
[root@docker ~]# docker run -it --rm img2:latest id
id
语法案例(3)
# 制作测试文件
[root@docker ~]# tar -cf myimg/myfile.tar -C /etc hosts issue
# 编辑Dockerfile
[root@docker ~]# vim myimg/Dockerfile
FROM mylinux:latest
COPY myfile.tar /var/tmp/
ADD myfile.tar /tmp/
RUN id && touch /tmp/file1
USER nobody
RUN id && touch /tmp/file2
ENV mymsg="Hello World"
WORKDIR /tmp
CMD ["/bin/bash"]# 创建镜像
[root@docker ~]# docker build -t img3:latest myimg
......
Successfully built eb8b669cbe7c
Successfully tagged img3:latest# 运行测试
[root@docker ~]# docker run -it --rm img3:latest
# 使用 COPY 进来的文件还是 tar 包
bash-4.4$ tree /var/tmp
/var/tmp
`-- myfile.tar
# 使用 ADD 添加的文件已经被解压了
bash-4.4$ tree /tmp
/tmp
|-- hosts
`-- issue# USER 指令设置使用 nobody 用户运行容器
bash-4.4$ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
# USER 指令前创建的文件是 root 权限,之后是 USER 用户权限
bash-4.4$ ls -l /tmp/file?
-rw-r--r-- 1 root root 0 Feb 5 05:25 /tmp/file1
-rw-r--r-- 1 nobody nobody 0 Feb 5 05:25 /tmp/file2# 环境变量可以直接调用
bash-4.4$ echo ${mymsg}
Hello World
# WORKDIR 把工作目录设置到 /tmp
bash-4.4$ pwd
/tmp
二 镜像制作实战
1 apache镜像
创建一个可以解析 php 页面的 httpd 镜像
设置默认首页为 Welcome to The Apache
添加php 测试页面info.php
设置默认的工作目录到 /var/www/html
准备配置文件
[root@docker ~]# mkdir httpd
# 设置测试页面
[root@docker ~]# echo 'Welcome to The Apache.' >httpd/index.html
[root@docker ~]# cp -a info.php httpd/
[root@docker ~]# tar czf httpd/myweb.tar.gz -C httpd index.html info.php
# 获取配置文件
[root@docker ~]# docker run -itd --name myweb mylinux:latest
[root@docker ~]# docker exec -it myweb dnf install -y httpd
[root@docker ~]# docker cp myweb:/etc/httpd/conf.modules.d/00-mpm.conf httpd/
[root@docker ~]# docker rm -f myweb
# 修改配置文件
[root@docker ~]# sed -ri -e 's,^Load.*,#&,' -e 's,^#(.*mod_mpm_prefork.so)$,\1,' httpd/00-mpm.conf
制作镜像
# 编写 dockerfile 文件
[root@docker ~]# vim httpd/Dockerfile
FROM mylinux:latest
RUN dnf install -y httpd php && dnf clean all
ADD myweb.tar.gz /var/www/html/
COPY 00-mpm.conf /etc/httpd/conf.modules.d/
ENV LANG=C
WORKDIR /var/www/html/
EXPOSE 80/tcp
CMD ["/usr/sbin/httpd", "-DFOREGROUND"][root@docker ~]# docker build -t httpd:latest httpd
......
Successfully tagged httpd:latest
验证镜像
# 查看镜像并创建容器
[root@docker ~]# docker images httpd:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest c1e854cde1f4 About a minute ago 299MB
[root@docker ~]# docker run -itd --name myweb httpd:latest
cc2b82ad0367172c344c7207def94c4c438027c60859e94883e440b53a860a93# 查看容器地址并访问验证
[root@docker ~]# docker inspect myweb |grep -i IPAddress
[root@docker ~]# curl http://172.17.0.2/info.php
<pre>
Array
([REMOTE_ADDR] => 172.17.0.1[REQUEST_METHOD] => GET[HTTP_USER_AGENT] => curl/7.61.1[REQUEST_URI] => /info.php
)
php_host: 2fbc8c132f7f
1229
[root@docker ~]# docker rm -f myweb
2 nginx镜像
在容器内编译 Nginx不方便,我们可以在真机编译 Nginx,然后把编译好的二进制打包部署在容器内
# 安装编译工具和依赖软件包
[root@docker ~]# dnf install -y openssl-devel pcre-devel gcc make
# 编译安装
[root@docker ~]# tar zxf nginx-1.22.1.tar.gz
[root@docker ~]# cd nginx-1.22.1/
[root@docker nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module
[root@docker nginx-1.22.1]# make && make install
# 设置默认首页
[root@docker nginx-1.22.1]# echo 'Nginx is running !' >/usr/local/nginx/html/index.html
制作镜像
注意:nginx 服务不能托管在后台运行
[root@docker ~]# mkdir nginx
# 将编译好的 nginx 打包,这里必须使用相对路径
[root@docker ~]# tar czf nginx/nginx.tar.gz -C /usr/local nginx
[root@docker ~]# vim nginx/Dockerfile
FROM mylinux:latest
RUN dnf install -y pcre openssl && dnf clean all
ADD nginx.tar.gz /usr/local/
ENV PATH=${PATH}:/usr/local/nginx/sbin
WORKDIR /usr/local/nginx/html
EXPOSE 80/tcp
CMD ["nginx", "-g", "daemon off;"][root@docker ~]# docker build -t nginx:latest nginx
Successfully tagged nginx:latest
验证镜像
# 查看镜像并创建容器
[root@docker ~]# docker images nginx:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 645dd2d9a8ec 3 minutes ago 274MB
[root@docker ~]# docker run -itd --name myweb nginx:latest
e440b53a860a93cc2b82ad0367172c344c7207def94c4c438027c60859e94883# 查看容器地址并访问验证
[root@docker ~]# docker inspect myweb |grep -i IPAddress
[root@docker ~]# curl http://172.17.0.2/
Nginx is running !# 查看 nginx 服务的用户
# nginx 服务为了提高安全性,在启动之后默认会使用nobody 用户对外提供服务
[root@docker ~]# docker exec -it myweb ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:48 pts/0 00:00:00 nginx: master process nginx
nobody 7 1 0 15:48 pts/0 00:00:00 nginx: worker process
root 32 0 0 15:49 pts/1 00:00:00 ps -ef[root@docker ~]# docker rm -f myweb
3 php-fpm镜像
按照下面的要求创建php-fpm镜像
- php-fpm 服务监听地址为 127.0.0.19000
- php-fpm 使用和 nginx 相同的普通用户运行完成镜像制作,并验证
准备配置文件
获取并修改php-fpm配置文件
使用nobody 用户启动运行 php-fpm 服务
# 获取配置文件
[root@docker ~]# mkdir php
[root@docker ~]# docker run -itd --name myphp mylinux:latest
[root@docker ~]# docker exec -it myphp dnf install -y php-fpm
[root@docker ~]# docker cp myphp:/etc/php-fpm.d/www.conf php/
[root@docker ~]# docker rm -f myphp
# 修改配置文件
[root@docker ~]# sed -ri 's,^(listen = ).*,\1127.0.0.1:9000,' php/www.conf
制作镜像
# 编写 dockerfile 文件
[root@docker ~]# vim php/Dockerfile
FROM mylinux:latest
RUN dnf install -y php-fpm && dnf clean all && \mkdir -p /run/php-fpm /usr/local/nginx/html && \chown -R nobody.nobody /run/php-fpm /var/log/php-fpm /usr/local/nginx/html
COPY www.conf /etc/php-fpm.d/www.conf
USER nobody
WORKDIR /usr/local/nginx/html
EXPOSE 9000/tcp
CMD ["/usr/sbin/php-fpm", "--nodaemonize"][root@docker ~]# docker build -t php-fpm:latest php
Successfully tagged php-fpm:latest
验证镜像
# 查看镜像并创建容器
[root@docker ~]# docker images php-fpm:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
php-fpm latest b2404bd119b0 48 seconds ago 275MB
[root@docker ~]# docker run -itd --name myphp php-fpm:latest
6eeff6af4a6469c298944b2bdd2ba69f32ebcbc6cb683a0a05af4eefbf90e8c1# 验证服务
[root@docker ~]# docker exec -it myphp /bin/bash
# 验证用户
bash-4.4$ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
# 我们无法直接调用 php 服务,可以通过查看进程验证服务
bash-4.4$ ps -ef
UID PID PPID C STIME TTY TIME CMD
nobody 1 0 0 16:13 pts/0 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
nobody 7 1 0 16:13 pts/0 00:00:00 php-fpm: pool www
nobody 8 1 0 16:13 pts/0 00:00:00 php-fpm: pool www
nobody 9 1 0 16:13 pts/0 00:00:00 php-fpm: pool www
nobody 10 1 0 16:13 pts/0 00:00:00 php-fpm: pool www
nobody 11 1 0 16:13 pts/0 00:00:00 php-fpm: pool www
nobody 12 0 0 16:13 pts/1 00:00:00 /bin/bash
nobody 19 12 0 16:13 pts/1 00:00:00 ps -ef
bash-4.4$ exit[root@docker ~]# docker rm -f myphp
三 docker私有仓库
1 概述
私有仓库是存储 docker image 的仓库
管理了一个 docker 集群,在所有节点维护镜像的一致性是一个非常麻烦繁琐的任务,使用公共仓库,我们又无法控制仓库中的镜像、版本等数据,私有仓库就是解决这些问题的最佳方法。
用户只需要维护私有仓库里面的镜像即可,docker 客户端可以通过私有仓库创建容器服务。
主流仓库有 docker Registry 和 vmware HarborRegistry 提供了仓库的核心功能,包括分层传输机制、WEB接口等功能
Habor 是在 Registry 上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:提供 WEB界面,优化用户体验,支持登陆、搜索功能,区分公有、私有镜像,以及基于角色的访问控制,集成日志审计、支持水平扩展等功能
2 原理
3 安装部署
主机清单
主机名 | ip地址 | 最低配置 |
---|---|---|
registry | 192.168.1.35 | 2CPU,4G内存 |
registry安装部署
# 在 registry 上安装私有仓库
[root@registry ~]# dnf install -y docker-distribution
# 启动私有仓库,并设置开机自启动
[root@registry ~]# systemctl enable --now docker-distribution
4 管理
<1> 概述
仓库配置文件及数据存储路径
- /etc/docker-distribution/registry/config.yml
- /var/lib/registry
- 默认端口号5000
查看私有镜像仓库中的镜像名称或标签
- 名称: curl http://仓库IP:端口/v2/ catalog
- 标签: curl http://仓库IP:端口/v2/镜像路径/tags/list
如何让Docker知道私有仓库的地址?
配置文件 /etc/docker/daemon.json
核心参数
镜像仓库地址 [ "registry-mirrors":["http://registry:5000" ]
私有仓库地址 [ "insecure-registries":["registry:5000" ]
<2> 案列
配置私有仓库上传镜像 nginx到仓库 img 目录下 myimg:web
上传镜像php-fpm到仓库img目录下myimg:php-fpm
上传镜像 httpd 到仓库 library 目录下httpd:latest
上传镜像mylinux到仓库library 目录下mylinux:latest
运行容器删除所有容器和镜像分别使用 img/myimg:web 和 library/httpd:latest 创建容器
访问验证
客户端配置
所有node节点都需要配置
[root@docker ~]# vim /etc/hosts
192.168.1.35 registry
# 修改配置文件
[root@docker ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["http://registry:5000"],"insecure-registries":["registry:5000"]
}
# 重启服务生效
[root@docker ~]# systemctl restart docker
上传镜像
- 使用 docker tag 通过标签设置上传地址和路径
- 使用 docker push 上传镜像
# 给 nginx 镜像设置标签
[root@docker ~]# docker tag nginx:latest registry:5000/img/myimg:web
# 上传 nginx 镜像
[root@docker ~]# docker push registry:5000/img/myimg:web
The push refers to repository [registry:5000/img/myimg]
c9d01852a13b: Pushed
......
web: digest: sha256:3e1fc9ad1ee46ee4619c95dc9d71034d919e53abfc size: 952# 上传 php-fpm 镜像
[root@docker ~]# docker tag php-fpm:latest registry:5000/img/myimg:php-fpm
[root@docker ~]# docker push registry:5000/img/myimg:php-fpm
The push refers to repository [registry:5000/img/myimg]
619c95dc93e1: Pushed
......
php-fpm: digest: sha256:619c95dc93e1fc9ad1ee46ee4d71034d919e53abfc size: 875# 上传 httpd 镜像
[root@docker ~]# docker tag httpd:latest registry:5000/library/httpd:latest
[root@docker ~]# docker push registry:5000/library/httpd:latest
The push refers to repository [registry:5000/library/httpd]
95dc9d71034d: Pushed
......
latest: digest: sha256:95dc9d71034d919e53abfc3e1fc9ad1ee46ee4619c size: 968
验证测试
查看镜像名称: curl http://仓库IP:5000/v2/_catalog
查看镜像标签: curl http://仓库IP:5000/v2/镜像路径/tags/list
使用易读格式: python3 -m json.tool
# 查看仓库中所有镜像的名称
[root@docker ~]# curl http://registry:5000/v2/_catalog
{"repositories":["img/myimg", "library/httpd"]}# 查看某一镜像的所有标签
[root@docker ~]# curl http://registry:5000/v2/img/myimg/tags/list
{"name":"img/myimg","tags":["web", "php-fpm"]}# 易读格式查看镜像名称
[root@docker ~]# curl -s http://registry:5000/v2/_catalog |python3 -m json.tool
{"repositories": ["img/myimg","library/httpd"]
}# 易读格式查看镜像标签
[root@docker ~]# curl -s http://registry:5000/v2/img/myimg/tags/list |python3 -m json.tool
{"name": "img/myimg","tags": ["php-fpm","web"]
}
创建容器
# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
......# 删除所有镜像
[root@docker ~]# docker rmi $(docker images -q)
......# 使用仓库中的镜像运行容器
[root@docker ~]# docker run -itd --rm registry:5000/img/myimg:web
2b7cd6d88a7665dbea0a4b3d99478e9f302c0a5661d7676d6d3bd3cb6d181# library 是默认路径,可以省略路径地址
[root@docker ~]# docker run -itd --rm httpd:latest
634766f788d665dbea0a4b39709e0a2cc8624fd99478e9f302c0a5661d767
相关文章:

容器编排学习(二)镜像制作和私有仓库介绍
一 Dockerfile 1 概述 commit的局限 很容易制作简单的镜像,但碰到复杂的情况就十分不方便例如碰到下面的情况需要设置默认的启动命令需要设置环境变量需要指定镜像开放某些特定的端口 Dockerfile就是解决这些问题的方法 Dockerfile是一种更强大的镜像制作方式…...
tcp记录
网络传输:大小端 Qt网络编程实现TCP通信 TCP/IP通讯与socket编程 Qt一步步搭建TcpServer1——封装QTcpServer,QTcpSocket qtcpserver官方文档 Python address already in use 服务器端的端口号和客户端的端口号没有关系 一般服务器是需要BIND指定端口号…...
IDEA中使用Java连接MySQL数据库的配置和使用方法
文章目录 IDE和必要配置数据库连接代码 IDE和必要配置 IDE:IntelliJ IDEA 2023.1 必要配置: 1、安装好JDK,并且配置环境变量 2、导入MYSQL数据库所需的驱动 如果没有导入,可以参考这篇文章IDEA中的MySQL数据库所需驱动包的下载和…...
android——服务JobService
JobService是Android L时候官方新增的组件,适用于需要特定条件才执行后台任务的场景。由系统统一管理和调度,在特定场景下使用JobService更加灵活和省心,相当于是Service的加强或者优化。 JobService是JobScheduler的回调,是安排的…...

一文讲清楚redis的线程池jedis
背景 在shigen实习的时候,遇到了日志系统的性能优化问题,当时的优化点就是:使用redis的线程池,实现并发状态下的性能优化。但是找了很多的技术方案,发现redis的线程池配置起来比较麻烦。正巧,这个周末shig…...
备战面试每日一题
1.如何理解this? this表示的是函数运行时自动生成的一个内部对象,只能在函数内部使用,总是指向调用它的对象。 this是在运行时进行绑定的,并不是在编写的时候绑定,它的上下文取决于函数调用时的各种条件。this的绑定…...
【嵌入式数据库之sqlite3】
目录 一.数据库基本概念(理解) 1.数据 2.数据库 二.常用的数据的数据库(了解) 1.大型数据库 2.中型数据库 3.小型数据库 三.基于嵌入式的数据库(了解) 四.SQLite基础(了解)…...
Android 9.0 pms中关于启动app时获取app的ActivityInfo信息相关源码分析
1.前言 在android9.0的系统rom定制化开发中,在对于app启动时,在进行系统中,通过Launcher调用pms来查询app的相关ActivityInfo的相关信息,然后调用 ams来启动activity,这篇来分析pms中获取app的ActivityInfo的相关信息的相关源码分析 2.pms中关于启动app时获取app的Activ…...

华为数通方向HCIP-DataCom H12-821题库(单选题:321-340)
第321题 BGP的Open报文是用于建立对等体连接的,以下哪一项不属于Open报文中携带的参数信息? A、发送者的Router ID B、AS号 C、BGP版本号 D、TCP端口号 答案:D 解析:以下是BGP的Open报文: 第322题 在建立BGP对等体的过程中,OpenSent状态表明BGP等待的Open报文 并对收…...

《TCP/IP网络编程》阅读笔记--基于TCP的服务器端/客户端
目录 1--TCP/IP协议栈 2--TCP服务器端默认函数调用顺序 3--TCP客户端的默认函数调用顺序 4--Linux实现迭代回声服务器端/客户端 5--Windows实现迭代回声服务器端/客户端 6--TCP原理 7--Windows实现计算器服务器端/客户端 1--TCP/IP协议栈 TCP/IP协议栈共分 4 层…...
【每日一题】43. 字符串相乘
43. 字符串相乘 - 力扣(LeetCode) 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例…...

机器学习——K最近邻算法(KNN)
机器学习——K最近邻算法(KNN) 文章目录 前言一、原理二、距离度量方法2.1. 欧氏距离2.2. 曼哈顿距离2.3. 闵可夫斯基距离2.4. 余弦相似度2.5. 切比雪夫距离2.6. 马哈拉诺比斯距离2.7. 汉明距离 三、在MD编辑器中输入数学公式(额外࿰…...

同步FIFO的verilog实现(1)——计数法
一、FIFO概述 1、FIFO的定义 FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成&…...
python正则表达式笔记1
最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。 一、 正则表达式语法介绍 正则表达式(或 RE)指定了一组与之匹配的字符串;模块内的函…...

YOLO目标检测——口罩规范佩戴数据集+已标注xml和txt格式标签下载分享
实际项目应用:目标检测口罩佩戴检测数据集的应用场景涵盖了公共场所监控、疫情防控管理、安全管理与控制以及人员统计和分析等领域。这些应用场景可以帮助相关部门和机构更好地管理口罩佩戴情况,提高公共卫生和安全水平,保障人们的健康和安全…...

Android 13 - Media框架(9)- NuPlayer::Decoder
这一节我们将了解 NuPlayer::Decoder,学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容,如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单,越读越发现自己的无知,Android 源码真…...
23.09.5 《CLR via C#》 笔记5
第六章 类型和成员基础 类型可以定义0或多个以下成员:常量、字段、实例构造器、类型构造器、方法、操作符重载、转换操作符、属性、事件、类型类型的可见性分为public和internal(默认)C#中,成员的可访问性分为private、protected、internal、protected …...

laravel部署api项目遇到问题总结
laravel线上部署问题 一、Ubuntu远程Mysql 61“Connection refused”二、Ubuntu更新php8三、线上部署Permission denied3.1、部署完之后访问域名出现报错:3.2、The /bootstrap/cache directory must be present and writable. 四、图片访问404五、git部署线上文件 一…...
lintcode 1646 · 合法组合【字符串DFS, vip 中等 好题】
题目 https://www.lintcode.com/problem/1646 给一个单词s,和一个字符串集合str。这个单词每次去掉一个字母,直到剩下最后一个字母。求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中。例如单词是’abc’,字符串集合是{‘a’,’…...

【多线程】线程安全 问题
线程安全 问题 一. 线程不安全的典型例子二. 线程安全的概念三. 线程不安全的原因1. 线程调度的抢占式执行2. 修改共享数据3. 原子性4. 内存可见性5. 指令重排序 一. 线程不安全的典型例子 class ThreadDemo {static class Counter {public int count 0;void increase() {cou…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...