docker基础学习笔记

文章目录

  • Docker简介
  • Linux下安装Docker
  • Docker常用命令
  • Docker网络
  • Docker存储
  • docker-compose
  • dockerfile制作镜像
  • 私有仓库
  • 镜像导入导出
  • 参考

Docker简介

  1. 定义:Docker是一个开源的应用容器引擎
  2. 优势:
    • 一键部署,开箱即用:容器使用基于image镜像的部署模式,image中包含运行应用程序所需的一切:代码、运行时系统工具、系统库和配置文件
    • 一次打包,到处运行:将容器打包成镜像(image)已经成为软件交付过程中的标准化格式
    • 容器与虚拟机

Linux下安装Docker

其中涉及

  • docker-ce:服务端
  • docker-ce-cli:客户端
  • containerd.io:容器运行时
  • docker-compose-plugin: 容器编排的工具

客户端发出指令发送给服务端对容器操作,服务端并不直接操作,而是交给containerd创建容器

配置国内镜像源加速

/etc/docker/daemon.json中添加

{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}

然后重启服务和docker

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker常用命令

docker架构

在这里插入图片描述

Registry:Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)

仓库名: <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

镜像名:软件名+标签

命令解释
docker pull从镜像仓库拉取镜像到本地
docker images命令查看本地镜像
docker run [可选参数] 镜像名:版本 []拉取并运行镜像
可选参数:1. 参数将容器的端口映射到宿主机端口-p hostPort:containerPort
-p 8080-8090:8080-8090公开端口范围,前后必须对应
-p 192.168.56.106:8080:80如果宿主机有多个ip,可以指定绑定到哪个ip
2.--name 定义容器的名称
3. -e 声明环境变量
4. -d容器在后台运行
5. -it 使用交互模式,可以在控制台里输入、输出
6. --rm**在容器退出时自动删除容器。**一般在使用客户端程序时使用此参数
docker start 容器名启动容器
docker stop关闭容器
docker restart重启容器
docker rm删除容器
docker exec在运行的容器中执行命令,一般配合-it参数使用交互模式
docker ps查看正在运行的容器
docker ps -a查看所有容器,包括正在运行和停止的
docker inspect查看容器的信息
docker logs查看日志
docker cp在容器和宿主机间复制文件

Docker网络

docker自动创建的三个网络

  1. bridge桥接网络:

    如果不指定,新创建的容器默认将连接到bridge网络。容器和宿主机,容器和容器可以相互访问。

  2. host:

    容器与宿主机共享网络,不需要映射端口即可通过宿主机IP访问。(-p选项会被忽略),慎用,可能会有安全问题。

  3. none:

    禁用容器中所用网络,在启动容器时使用。

  4. 用户自定义网络(桥接网络)

    • 创建用户自定义网络

      docker network create my-net
      
    • 将已有容器连接到此网络

      docker network connect my-net db-mysql
      
    • 创建容器时指定网络。

      docker run -it --rm --network my-net mysql:5.7 mysql -h**db-mysql** -uroot -p
      

    在用户自定义网络上,容器之间可以通过容器名进行访问。

    用户自定义网络使用 Docker 的嵌入式 DNS 服务器将容器名解析成 IP

查看容器IPdocker inspect \ --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-alpine

Docker存储

为了容器的简洁,便于恢复和迁移,需要将数据存储到容器之外,这就是挂载

docker提供的三种存储选项

image.png

  1. volume卷

    存储在主机文件系统分配一块专有存储区域,由 Docker(在 Linux 上)管理,并且与主机的核心功能隔离。非 Docker 进程不能修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方式。

    创建和挂载卷

    docker volume create my-datadocker run -e MYSQL_ROOT_PASSWORD=123456 \-v /home/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro  \-v my-data:/var/lib/mysql  \-d mysql:5.7 
  2. bind mount 绑定挂载

    绑定挂载可以将主机文件系统上目录或文件装载到容器中,但是主机上的非 Docker 进程可以修改它们,同时在容器中也可以更改主机文件系统,包括创建、修改或删除文件或目录,使用不当,可能会带来安全隐患。

    -v

    绑定挂载将主机上的目录或者文件装载到容器中。绑定挂载会覆盖容器中的目录或文件。

    如果宿主机目录不存在,docker会自动创建这个目录。但是docker只自动创建文件夹,不会创建文件。

    例如,mysql的配置文件和数据存储目录使用主机的目录。可以将配置文件设置为只读(read-only)防止容器更改主机中的文件。

    docker run -e MYSQL_ROOT_PASSWORD=123456 \-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro  \-v /home/mysql/data:/var/lib/mysql  \-d mysql:5.7 
    
  3. tmpfs 临时挂载
    tmpfs挂载仅存储在主机系统的内存中,从不写入主机系统的文件系统。当容器停止时,数据将被删除。

    docker run -d -it --tmpfs /tmp nginx:1.22-alpine
    

docker-compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

  1. 常用命令

    命令解释
    docker compose up 一键部署启动
    主要参数:
    1. -f参数手动指定文件
    2. -p指定前缀
    docker compose start/stop启动/停止服务
    docker compose down停止并删除容器,不会删除存储卷volume
    1. -p指定前缀
    docker compose logs -f查看日志
  2. yaml语法

    • 缩进代表上下级关系
    • 缩进时不允许使用Tab键,只允许使用空格
    • : 键值对,后面必须有空格
    • -列表,后面必须有空格
    • [ ]数组
    • #注释
    • {key:value,k1:v1}map
    • | 多行文本块

    如果一个文件中包含多个文档

    • ---表示一个文档的开始

    • &来建立锚点,<<合并到当前数据,用*引用锚点

      version: '3.7'# Settings and configurations that are common for all containers
      x-minio-common: &minio-commonimage: quay.io/minio/minio:RELEASE.2022-08-13T21-54-44Zcommand: server --console-address ":9001" http://minio{1...2}/data{1...2}expose:- "9000"- "9001"services:minio1:<<: *minio-commonvolumes:- data1-1:/data1- data1-2:/data2minio2:<<: *minio-commonvolumes:- data2-1:/data1- data2-2:/data2volumes:data1-1:data1-2:data2-1:data2-2:
      
  3. compose文件结构

    docker-compose.yml通常需要包含以下几个顶级元素:

    version 已弃用,早期版本需要此元素。

    services必要元素,定义一个或多个容器的运行参数

    services中可以通过以下元素定义容器的运行参数

    image 容器 镜像

    ports端口映射

    environment环境变量

    networks容器使用的网络

    volumes容器挂载的存储卷

    command容器启动时执行的命令

    depends_on定义启动顺序

    ​ 复数形式(例如ports,networks,volumes,depends_on)参数需要传入列表

    networks创建自定义网络

    volumes 创建存储卷

    command支持以下写法:

    #推荐使用数组或列表的方式
    #数组
    command:["java","-jar","/usr/local/src/ruoyi-admin.jar"]
    #列表
    command: - java- -jar- /usr/local/src/ruoyi-admin.jar# shell命令模式
    command: java -jar /usr/local/src/ruoyi-admin.jar
    

    environment支持如下两种写法

    # 使用map
    environment:MYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassMYSQL_RANDOM_ROOT_PASSWORD: '1'#使用列表
    environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ry- LANG=C.UTF-8
    
    1. depends_on、condition和healthcheck

      depends_on只能保证容器的启动和销毁顺序,不能确保依赖的容器是否ready。

      condition有三种状态:

      • service_started容器已启动

      • service_healthy容器处于健康状态

      • service_completed_successfully容器执行完成且成功退出(退出状态码为0)

      通过healthcheck加脚本来检查

       healthcheck:test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD']interval: 10stimeout: 5sretries: 5start_period: 10s
      
    services: ruoyi-app:#  docker run --name ruoyi-app      \#             -p 8080:8080        \#             --network ruoyi-net      \#             -v /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jar   \#             -d openjdk:8u342-jre    \#             java -jar /usr/local/src/ruoyi-admin.jarimage: openjdk:8u342-jrerestart: alwaysports:- 8080:8080networks:- ruoyi-netvolumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: [ "java", "-jar", "/usr/local/src/ruoyi-admin.jar" ]healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080"]interval: 10stimeout: 5sretries: 5start_period: 10sdepends_on:ruoyi-db:condition: service_healthyruoyi-db:#  docker run --name ruoyi-db -p 3303:3306 \#             --network ruoyi-net        \#             -v ruoyi-data:/var/lib/mysql  \#             -v /home/app/sql:/docker-entrypoint-initdb.d   \#             -e MYSQL_DATABASE=ry         \#             -e MYSQL_ROOT_PASSWORD=123456    \#             -d mysql:5.7      \#             --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --skip-character-set-client-handshakeimage: mysql:5.7environment:- MYSQL_DATABASE=ry- MYSQL_ROOT_PASSWORD=123456volumes:- ruoyi-data:/var/lib/mysql- /home/app/sql:/docker-entrypoint-initdb.dnetworks:- ruoyi-netcommand:["--character-set-server=utf8mb4","--collation-server=utf8mb4_unicode_ci","--skip-character-set-client-handshake"]healthcheck:test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD']interval: 10stimeout: 5sretries: 5start_period: 10svolumes:ruoyi-data:networks:ruoyi-net:

dockerfile制作镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。

  1. 常用命令和指令

    命令

    命令解释
    docker build [选项] <上下文路径/URL/->构建镜像,将客户端的路径指定为上下文路径
    选项-t指定镜像名
    docker tag <id> <镜像名>修改镜像名
    docker image history <镜像名>查看镜像构建过程

    指令

    命令解释
    FROM打包使用的基础镜像
    WORKDIR相当于cd命令,进入容器工作目录
    COPY将宿主机的文件复制到容器内
    RUN打包时执行的命令,相当于打包过程中在容器中执行shell脚本,通常用来安装应用程序所需要的依赖、设置权限、初始化配置文件等
    CMD指定容器启动程序及参数,会被运行容器时的其他指令替代
    EXPOSE指定容器在运行时监听的网络端口,它并不会公开端口,仅起到声明的作用,公开端口需要容器运行时使用-p参数指定。
    ENTRYPOINT指定容器启动程序及参数,一般运行容器时不会被替换或覆盖,而会追加。
    如果镜像中ENTRYPOINTCMD都存在,则CMD将作为ENTRYPOINT的参数使用。
  2. 制作自己的镜像

    根据以下配置,制作dockerfile

      ruoyi-java:image: openjdk:8u342-jreports:- 8080:8080volumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: [ "java", "-jar", "/usr/local/src/ruoyi-admin.jar" ]networks:- ruoyi-netdepends_on:- ruoyi-db
    

    编写dockerfile文件

    FROM openjdk:8u342-jre
    WORKDIR /app
    COPY ./ruoyi-admin.jar .
    CMD ["java", "-jar", "ruoyi-admin.jar"]
    EXPOSE 8080
    
  3. image镜像与layer层

    image文件由一系列层构建而成,dockerfile每一个命令都会生成一个层。每一层都是只读的。

    创建容器时,会创建一个新的可写层,通常称为“容器层”。对正在运行的容器所做的所有更改(如写入新文件、修改现有文件和删除文件)都将写入容器层,而不会修改镜像。

    img

  4. 多阶段构建

    在构建基于 Java 的应用程序时,需要一个 JDK 将源代码编译为 Java 字节码。但是,在生产中不需要该 JDK。

    多阶段构建可以将生成时依赖与运行时依赖分开,减小整个image文件大小

    还是上面的例子

    FROM maven AS build
    WORKDIR /source
    COPY . .
    RUN mvn packageFROM  openjdk:8u342-jre
    WORKDIR /app
    COPY --from=build /source/ruoyi-admin/target/ruoyi-admin.jar .
    EXPOSE 80
    ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]
    
    docker build -t ruoyi-jar:4.7.4 .
    
    # project name
    name: "app"services:ruoyi-java:image: ruoyi-jar:4.7.4command: ["--server.port=8080","--ruoyi.profile=/home/ruoyi/uploadPath","--spring.datasource.druid.master.url=jdbc:mysql://ruoyi-db:3306/ry?useUnicode=true&characterEncoding=utf8","--spring.datasource.druid.master.username=root","--spring.datasource.druid.master.password=123456"]ports:- 8080:8080networks:- ruoyi-nethealthcheck:test: [ "CMD", "curl", "-f", "http://localhost:8080" ]interval: 10stimeout: 5sretries: 5start_period: 10sdepends_on:ruoyi-db:condition: service_healthyruoyi-db:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=rycommand: ["--character-set-server=utf8mb4","--collation-server=utf8mb4_general_ci","--skip-character-set-client-handshake"]volumes:- /home/app/sql:/docker-entrypoint-initdb.d- ruoyi-data:/var/lib/mysqlnetworks:- ruoyi-nethealthcheck:test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]interval: 10stimeout: 5sretries: 5start_period: 10svolumes:ruoyi-data:networks:ruoyi-net:
    

私有仓库

在实际工作中,很多公司的代码不能上传到公开的仓库中,因此我们可以创建自己的镜像仓库。

docker run -d -p 5000:5000 --restart always --name registry registry:2 # 爬取并运行registry,并把端口映射为5000
docker image tag ruoyi-java:4.7.4 localhost:5000/ruoyi-java:4.7.4 #修改tag添加registry地址
docker push localhost:5000/ruoyi-java:4.7.4 # 推送镜像
docker pull localhost:5000/ruoyi-java:4.7.4 # 拉取镜像

修改/etc/docker/daemon.json,将私有仓库设置为http也可以访问,添加一行。

"insecure-registries": ["192.168.56.108:5000"] #这里地址是本机地址

镜像导入导出

命令解释
docker save将一个或多个image打包保存的工具
选项-o指定保存文件名
docker load 将保存的镜像文件载入成镜像
-i指定载入的文件名
docker export将container的文件系统进行打包保存
-o指定保存文件名
docker importcontainer保存文件导入后会成为一个image

不要跟export和import命令混淆

docker save/load IMAGE save和load操作的是镜像

docker export/import CONTAINERexport和import操作对象是容器

image包含多个层,每一层都不可变,save保存的信息包含每个层和所有标签 + 版本信息。

容器运行的时候会创建一个可写入的容器层,所有的更改都写入容器层,export导出的只有容器层,不包含父层和标签信息。

  1. docker save保存的是镜像(image),docker export保存的是容器(container);

  2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

  3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

  4. 若是只想备份image,使用save和load。

  5. 若是在启动容器后,容器内容有变化,需要备份,则使用export和import。

扩展

postgres-save.tar:docker save导出的文件

postgres-export.tardocker export导出的文件

img

分层的文件系统。Docker镜像实际上就是由这样的一层层文件进行叠加起来的,上层的文件会覆盖下层的同名文件。如果将postgres-save.tar中的各层文件合并到一起,基本就是postgres-export.tar的内容。由于postgres-save.tar里面的各层文件会存在很多重复的文件,这也解释了为什么postgres-save.tar会比postgres-export.tar大100多M。

docker load必须要载入的是一个分层文件系统,而postgres-export.tar并不具有这样的结构,因此无法载入。

docker import仅仅是将tar包里面的文件复制进来,所以不管tar包里面的文件结构是怎样的,都可以载入进来,所以能够载入postgres-save.tar。但postgres-save.tar并不是一个有效的操作系统镜像,因此当我试图以改镜像启动容器时,容器并不能启动

参考

  1. docker一小时入门教程 (yuque.com)
  2. https://yeasy.gitbook.io/docker_practice/
  3. https://jingsam.github.io/2017/08/26/docker-save-and-docker-export.html

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

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

相关文章

Qt5.15.2静态编译 VS2017 with static OpenSSL

几年前编译过一次Qt静态库:VS2015编译Qt5.7.0生成支持XP的静态库,再次编译,毫无压力。 一.环境 系统:Windows 10 专业版 64位 编译器:visual studio 2017 第三方工具:perl,ruby和python python用最新的3.x.x版本也是可以的 这三个工具都需要添加到环境变量,安装时勾选…

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

人工智能时代的内容写作

内容不再只是王道&#xff0c;正如俗话所说&#xff1a;它是一种流动的货币&#xff0c;推动了巨大的在线信息和影响力经济。 每个品牌都是一个故事&#xff0c;通过其服务和商品讲述自己。尽管如此&#xff0c;大多数客户还是会通过您的在线内容最了解您。 但随着我们进入人…

每日一题:LeetCode-LCR 143.子结构判断

每日一题系列&#xff08;day 05&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

汇编:关于栈的知识

1.入栈和出栈指令 2. SS与SP 3. 入栈与出栈 3.1 执行push ax ↑↑ 3.2 执行pop ax ↓↓ 3.3 栈顶超界的问题 4. 寄存器赋值 基于8086CPU编程时&#xff0c;可以将一段内存当作栈来使用。一个栈段最大可以设为64KB&#xff08;0-FFFFH&#xff09;。 1.入栈和出栈指令…

C语言——函数

导读 &#xff1a; 这篇文章主要讲解一下C语言函数的一些基本知识。 前言&#xff1a;函数的概念 C语言中的函数又常常被称为子程序&#xff0c;是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术&#xff0c;类比模块化建房子的过程&#xff1a;整个程序…

高校大学校园后勤移动报修系统 微信小程序uniapp+vue

本文主要是针对线下校园后勤移动报修传统管理方式中管理不便与效率低的缺点&#xff0c;将电子商务和计算机技术结合起来&#xff0c;开发出管理便捷&#xff0c;效率高的基于app的大学校园后勤移动报修app。该系统、操作简单、界面友好、易于管理和维护&#xff1b;而且对后勤…

Python中类的定义和使用细讲

文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言 在 Python 中&#xff0c;类表示具有相同属性和方法的对象的集合。在使用类时&#xff0c;需要先定义类&#xff0…

Android安卓设置跳转默认应用商店为Google Play 链接跳转到谷歌商店临时解决方法

手机链接默认不跳转 Google Play 因为大部分安卓厂商系统都根据了自己的需求进行了修改,就成为了系统级导流,想要彻底解除可刷写国际版等原生系统即可恢复 解决方法 使用冻结软件(例如 爱玩机手机助手(root)等应用)对 应用商城 进行临时冻结,如需保证正常使用解除冻结状态即可…

清分系统对账

流程1的问题&#xff1a; 1、通道一天的数据会有多少&#xff0c;有二三十万条交易数据吗&#xff1f; 2、如果数据过大都存到一个Map里面去&#xff0c;机器不得挂了 步骤1总结&#xff1a; 1、通过channelNo获取通道T的数据&#xff0c;因为通道是一天一个文件给过来。在转…

首届教师案例教学竞赛一等奖作品上线至和鲸社区,快来学习!

细心的朋友可能已经发现&#xff0c;近期和鲸社区的频道页上线了一个新专区——“优秀参赛作品专区”。 图.和鲸社区频道页 迄今为止&#xff0c;和鲸参与/支持了 500 多场专业数据科学竞赛&#xff0c;包括面向气象、金融、医学、海洋等不同领域的&#xff0c;面向从业者、科学…

.net 8 发布了,试下微软最近强推的MAUI

先看下实现的效果&#xff1a; 下面发下XAML文件&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/…

案例027:基于微信小程序的校园二手平台的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

基于springboot实现智慧党建系统项目【项目源码】

基于springboot实现智慧党建系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff0c;所以…

C++ libcxxabi中dynamic_cast 实现

摘要&#xff1a;最近在看一个崩溃的过程中详细看了一遍cxxabi的定义&#xff0c;就想着看一些llvm中cxxabi的一些实现。本文描述了cxxabi中dynamic_cast的实现以及原理。   关键字&#xff1a;cxxabi,dynamic_cast 1 简介 C中&#xff0c;dynamic_cast用于有虚函数的继承链…

【go入门】表单

4.1 处理表单的输入 先来看一个表单递交的例子&#xff0c;我们有如下的表单内容&#xff0c;命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action"/login" meth…

【Java】循环语句练习

文章目录 1. 计算5的阶乘2. 计算 1! 2! 3! 4! 5!3. 数字9 出现的次数4. 判定素数5. 求1-100之间的素数6. 求2个整数的最大公约数7. 计算分数的值8. 模拟登陆9. 输出乘法口诀表10. 求出0&#xff5e;999之间的所有“水仙花数”并输出11. 猜数字游戏&#x1f648; 1. 计算5的…

Linux系统编程 day05 进程控制

Linux系统编程 day05 进程控制 1. 进程相关概念2. 创建进程3. exec函数族4. 进程回收 1. 进程相关概念 程序就是编译好的二进制文件&#xff0c;在磁盘上&#xff0c;占用磁盘空间。程序是一个静态的概念。进程即使启动了的程序&#xff0c;进程会占用系统资源&#xff0c;如内…

FO-like Transformation

参考文献&#xff1a; [RS91] Rackoff C, Simon D R. Non-interactive zero-knowledge proof of knowledge and chosen ciphertext attack[C]//Annual international cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 1991: 433-444.[BR93] Bellare M…

软件介绍01- koodo Reader支持所有电脑平台!

1 软件简介 Koodo Reader软件是一款阅读器&#xff0c;可以阅读各种格式的文档。用来代替kindle。界面简洁&#xff0c;好看&#xff0c;阅读功能强大&#xff0c;而且可以多设备同步。 因为开源&#xff0c;所以免费。而且支持所有电脑平台&#xff01; 支持格式&#xff1a…