Docker--简介与实践

2023-10-31

一、什么是容器技术

Docker 是一个开源的应用容器引擎,要了解Docker的前提就是要了解什么是容器技术。说到容器技术,这里就要联系一下我们经常使用到的虚拟机中的虚拟化技术了,两者在功能、目的上相似,都是将一系列的程序进行打包,建立一个独立的运行环境,也就是我们所说的沙盒,但在实现的环节与特点方面,两者截然不同。

1.1 虚拟化技术

虚拟化技术是指在同一台计算机上通过hypervisor(运行在基础物理服务器和操作系统之间的中间软件层,让多个操作系统和应用共享硬件),虚拟出多个包括完整虚拟机系统镜像,每个虚拟机拥有独立的操作系统和硬件资源。

在这里插入图片描述

虽然虚拟化技术可以在按需构建操作系统实例的过程当中为系统管理员提供极大的灵活性,但hypervisor虚拟化技术存性能和资源使用效率方面的问题,从而大大增加应用开发的消耗,而容器技术的诞生就是为了解决这问题。

1.2 容器技术

容器技术直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,从而有效的将单个操作系统的资源划分到孤立的组中,以便更好的在独立的组之间平衡有冲突的资源使用需求,创建好的这个沙盒执行环境就被称作为容器。

在这里插入图片描述

1.3 容器引擎

容器引擎不是只有docker一家,除了docker还有coreos等,而在众多的容器引擎中,Docker几乎是容器引擎的代表,下面就最典型的容器技术Docker进行介绍。

二、 什么是Docker

2.1 Docker简介

Docker 是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器完全使用沙箱机制,相互之间不会有任何接口,同时容器性能开销极低。

2.2 Docker基本概念

在这里插入图片描述

镜像 (Image):

镜像简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,提供了容器运行时所需的程序、库、资源、配置等。同时镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器 (Container):

与上面的镜像相对应,容器就是类创建的实例,是以某一个镜像为模板创建出来的实体。容器的实质是进程,但与直接在系统运行的进程不同,容器进程有自己独立的命名空间。因此容器可以拥有自己的root 文件系统、网络配置、内存空间,从而创建出一个隔离的环境里,就好像是一个独立于Host系统的系统。

仓库 (Registry):

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,仓库(Docker Registry) 就是这样的服务。仓库存放了每个类别镜像不同的版本,通过仓库可以获得需要的目的镜像。

客户端/服务器:

Docker 使用客户端/服务器体系结构。Docker 客户端通过接受命令与用户进行交互, Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像,以及对应镜像容器的创建。最典型的Docker 客户端就是docker的命令行程序。

分层存储:

镜像需要包含操作系统完整的root 文件系统,而Docker将其设计为分层存储的架构,镜像构建时,会一层层构建,同时在修改、删除的时候也是在镜像最上面添加相应的操作层。该存储结构方便了镜像的复用,使得代码的构建变得简单起来,我们可以通过在原有的镜像添加、修改配置,从而实现自己的镜像。

2.3 Docker优势
  • 更高效的利用系统资源。docker 容器直接与内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化

  • 更快速的启动时间。传统的虚拟机技术启动应用服务往往需要数分钟,而Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。

  • 实现自动化测试和持续的集成、部署。使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile 来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接快速部署该镜像,同时结合持续部署系统可以集进行自动部署。

  • 兼容性。不需要再去考虑操作系统、依赖环境的影响,各种依赖环境都可以在docker中安装体现,而不是依赖于操作系统的环境。

从下面可以更加明显看出,与虚拟机相比容器的优势:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般是几十个

三、CentOS下Docker配置

Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费,支持周期 7 个月), EE 即企业版,强调安全,付费使用,支持周期 24 个月。

docker安装

在Centos安装docker需要先配置docker仓库,配置docker仓库成功后,就可以直接使用yum命令进行docker的安装了。

  • 仓库添加

    仓库添加前需要先安装需要的软件包,下面的yum-utils提供的yum-config-manager可以管理添加yum的安装仓库,而 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2的。

    $ sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    

在这里插入图片描述

安装好需要的软件包后,就可以使用yum-config-manager命令设置docker安装的仓库了。

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

  • docker engine-community安装

    添加完docker的仓库,就可以直接使用yum install 命令安装docker

    $ sudo yum install docker-ce docker-ce-cli containerd.io
    

在这里插入图片描述

  • 安装测试

    安装成功后,可以使用以下的命令检测docker的安装是否成功,如果没有错误输出,则安装成功。

    docker version
    

在这里插入图片描述

Docker 启动
  • 虽然Docker安装成功了,但是其服务端的进程还没有启动,所以这里需要通过命令行使docker服务端在后台启动。

    sudo systemctl start docker
    

在这里插入图片描述

  • 输入完命令后,可以再使用version命令测试Docker服务端的守护进程是否成功启动,启动成功后,version命令除了Client项外,还会多出一个Server项,表明Docker服务端的守护进程已经在后台运行了。

    docker version
    

在这里插入图片描述

Docker镜像测试
  • 在安装并启动好docker后,可以获取并运行一个最简单的镜像hello-world,这个事docker社区中自带的一个镜像,可以直接输入run进行运行。当docker发现本地没有该镜像时,会直接去docker社区进行下载,然后再运行该镜像。下面可以看到docker下载镜像的过程,已经镜像运行的过程,同时该镜像在运行后就会自动退出。

    sudo docker run libray/hello-world
    

    另外也可以通过pull命令先拉取镜像,然后在运行。 library/hello-world 是 image 文件在仓库里面的位置,其中 library 是镜像文件所在的组, hello-world是镜像文件的名字,因为library是docker默认的组,所以可以省略不写。

    sudo docker pull libray/hello-world
    

在这里插入图片描述

  • 镜像获取后,可以通过以下的命令查看本地存在的镜像。

    sudo docker images
    

在这里插入图片描述

配置国内镜像

因为Docker的镜像仓库在国外,下载的速度都比较慢,所以这里可以配置国内的加速镜像仓库。

  • 使用vim访问daemon.json文件,可能不存在,vim会自动创建一个新的。

    vim /etc/docker/daemon.json
    

在这里插入图片描述

  • 在该文件中找到registry-mirrors项,没有就自己添加一个,在列表中添加我们要加的国内加速镜像仓库。这里提供一个网易的加速镜像仓库。

    "registry-mirrors":["http://hub-mirror.c.163.com"]
    
    

在这里插入图片描述

  • 命令行重启docker,可以使用info命令查看在下面的registry mirror项看镜像仓库是否添加成功,下面是加速镜像添加成功后的结果。

    sudo systemctl restart docker
    sudo docker info
    
    

在这里插入图片描述

四、Docker 容器使用

Mysql容器使用
  • 首先拉去mysql镜像,在设置好国内镜像后速度会快一点。这里的冒号后面表示的是镜像的标签,也就是版本号,输入命令后可以看到Docker在拉去mysql相关的镜像依赖,镜像前面的十进制数是镜像的ID,同时这里省略了library。

    docker pull mysql:5.7
    

在这里插入图片描述

  • 启动Mysql服务器容器,启动后会返回运行容器的ID。命令中,

    sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
    

在这里插入图片描述

参数说明:

-p 3306:3306 :表示将容器服务的 3306 端口映射到到宿主机的 3306 端口,这样就可以直接通过宿主机的3306端口访问到容器的Mysql的服务器了。

-e MYSQL_ROOT_PASSWORD=root: -e表示后面设置环境变量,后面表示的是mysql的root账号密码。

--name mysql2:创建容器的名字,不能重复。

-d:表示容器创建运行后不进入容器。

  • 启动成功后,可以使用ps命令查看已经成功启动的容器,这里可以添加-a包含上已经中止了的容器。

    docker ps
    

在这里插入图片描述

  • 然后使用以下命令进入容器的终端,在容器终端可以运行mysql的客户端,这里可以使用exit命令退出容器终端。

    docker run -it --net host mysql:5.7 "sh"docker exec -it mysql2 bash
    mysql -h127.0.0.1 -P3306 -uroot -proot
    

在这里插入图片描述

参数说明:

-it:表示主机的输入输出流与容器终端的连接。

"sh":表示启动容器的终端。

  • 在退出终端后,可以通过prune命令删除停止运行的容器以及未挂载的卷,-f表示强制删除。

    docker container prune -f
    docker volume prune –f
    

在这里插入图片描述

五、镜像创建

1. Dockerfile

镜像的构建需要使用到dockerfile,Dockerfile是用来构建镜像的文本文件,文本由多条的命令组成。

常用命令

FROM

镜像的创建一般都是在其他镜像的基础上创建的,FROM命令一般用于dockerfile的开头,用于指定基础的镜像,多次使用可以指定多个基础镜像。

FROM <image>
或者
FORM <image>:<tag>

RUN

用于在构建镜像(docker build)过程过程中执行后面给出的命令,有两种不同的使用方法格式。

shell 格式:

RUN <命令>

Exec 格式:

RUN ["可执行文件", "参数1", "参数2"]

COPY

复制指令,从源路径复制文件到目标路径,这可以设置多个源路径。

shell 格式:

COPY <源路径1>...  <目标路径>

Exec 格式:

COPY ["源路径1",...  "<目标路径>"]

同时可以使用通配符进行作为源路径

COPY hom* /mydir/
COPY hom?.txt /mydir/

ENV

用于设置、定义环境变量

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷,避免重要的数据,因容器重启而丢失。

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

CMD

启动的容器指定默认要运行的命令,与RUN命令不同,命令在镜像运行时(docker run)进行,同时如果Dockerfile 中存在多个 CMD 指令,仅最后一个生效。

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]			//提供ENTRYPOINT时才能使用

同时CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖,如上面运行镜像的终端:

docker run -it --net host mysql:5.7 "sh"

其中"sh"就是替代的命令。

ENTRYPOINT

类似于 CMD 指令,但不会被 docker run 的命令行参数指定的指令所覆盖。同时如果Dockerfile 中存在多个 ENTRYPOINT指令,仅最后一个生效。

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

EXPOSE

声明端口,给用户说明使用的端口,以方便配置映射。

EXPOSE <端口1> [<端口2>...]

2. 创建简单镜像
  • 创建一个新文件夹,在文件夹中创建好名为dockerfile的文件。

在这里插入图片描述

  • 使用vi编辑dockerfile,并输入以下的命令,这里的top是显示运行中进程的命令。

    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
    
    

在这里插入图片描述

  • 输入好后保存回到文件夹中,使用build命令进行镜像构建,其中./参数表示镜像根目录在当前目录,-t hello表示镜像的名字。

    docker build ./ -t hello
    
    

在这里插入图片描述

  • 创建成功后,可以直接使用docker run 运行刚刚创建好的镜像,可以看到运行成功后可以看到控制台上有top命令进程运行。

    docker run -it --rm hello -H
    
    

在这里插入图片描述

六、阿里云镜像服务实践

上面介绍了如何在本地构建镜像,但单单在本地构建的对象是不够的,我们往往还需要一个平台来发布并且管理自己构建的镜像,这时就可以使用阿里云提供的镜像服务。

1.建立仓库
  • 首先访问阿里云官方网站https://cr.console.aliyun.com,选择登录,没有账号就注册一个账号。

在这里插入图片描述

  • 注册完成后,如果想要上传镜像,还要为自己的阿里云账号这里需要选择好镜像服务器的地域,以及命名空间

    仓库和命名空间组合起来就形成了上面所说的镜像的组,这里自己根据情况输入就好了。

在这里插入图片描述

  • 仓库信息填写完后,系统还要求选择代码源,因为接下来是直接在CentOs中上传镜像的,所以这里选择的代码源是本地仓库。

在这里插入图片描述

  • 创建成功后回到仓库列表,就可以看到刚刚创建好的仓库的状态与信息。

在这里插入图片描述

2. 上传镜像
  • 仓库创建完成后回到CentOs终端,使用docker的login命令进行登录该命令中username 为创建好的阿里云用户名,命令的参数为阿里云的镜像地址,这里根据上面创建好仓库的地域选择,其中shenzhen 代表的是镜像服务器在深圳的地址,另外还有许多的镜像地址,自己看情况选择一个,不过接下来要用相同的地址进行操作。同时,login命令输入后会要求用户输入密码,输入成功后会有登录成功的提示。

    docker login --username=ouzj5 registry.cn-shenzhen.aliyuncs.com
    
    

在这里插入图片描述

  • 在上传镜像前,还需要根据刚刚创建好的仓库名字对将要上传的镜像进行标记,标记的作用是将其归入某一仓库。这里的镜像名字前依次是响应仓库的地址、命名空间以及仓库的名字,同时还可以在镜像名字后面添加:tag作为标签,这里使用hello-wrold作为标签,默认的则为latest

    docker tag registry.cn-shenzhen.aliyuncs.com/ouzj5/repo:hello-world
    
    

在这里插入图片描述

  • 标记成功后,就可以直接使用push命令上传建好的镜像了,上传成功后结果如下。

    docker push registry.cn-shenzhen.aliyuncs.com/ouzj5/repo:hello-world
    
    

在这里插入图片描述

  • 上传成功后可以点进刚刚创建好的仓库,选择镜像版本,在仓库中可以看到对应标签的镜像已经成创建好了,同时有该标签镜像的各种信息。

在这里插入图片描述

3.获取仓库中的镜像
  • 上传成功后,可以尝试获取自己创建好的镜像,首先获取前先删除原来的镜像,这里使用docker的rmi命令,这里看到似乎并没有真正的删除,只是把标签去掉,要真正删除需要添加-f参数。

    docker rmi registry.cn-shenzhen.aliyuncs.com/ouzj5/repo:hello-world
    
    

在这里插入图片描述

  • 然后使用pull命令进行拉取,命令的参数就是上面push的参数,命令行会显示从阿里云中下载新的镜像。

    docker pull registry.cn-shenzhen.aliyuncs.com/ouzj5/repo:hello-world
    
    

在这里插入图片描述

  • 拉去成功后,可以使用images命令查看镜像是否拉去成功,下面可以看到对应的仓库标签的镜像。

    docker images
    
    

在这里插入图片描述

  • 最后还有一个docker命令是logout操作,其会将对应的登录状态从本地中清除。

    docker log out registry.cn-shenzhen.aliyuncs.com
    
    

在这里插入图片描述

七、docker hub自动构建实践

上面介绍了如何去上传自己构建好的镜像了,但是每一个版本的更新还要进行登录上传,就会感觉十分的麻烦,所以下面实践的是如何利用github 以及 docker hub实现应用的自动构建化,通俗来讲就是每当docker hub检测到github有更新(push),其会自动调用github上的dockerfile进行镜像构建,并且上传到仓库中。

1. 创建账号并且链接github账号
  • 这里使用到的平台是外国的docker hub平台,提供与阿里云类似的镜像管理服务,在使用前同样需要先注册一个用户账号,其网站为https://hub.docker.com/,注册成功后进入以下页面。

在这里插入图片描述

  • 因为这里实现的是对github上面仓库的自动构建,所以需要将docker hub的账号和github 的账号链接起来,选择右上角菜单的Account Setting选项,进入用户设置页面,然后选择Linked Accounts选项。

在这里插入图片描述

  • 进入到Linked Accounts页面后,可以看到有GitHub链接的选项,可以看到新的账号没有链接,这里选择github上的Connect选项,接下来页面就会要求输入github的账号密码。

在这里插入图片描述

  • 登录成功后,就可以看到Linked Account中的GitHub项变成了对应的账号了。

在这里插入图片描述

2.创建自动化构建镜像仓库
  • 在设置自动化构建前,需要在github仓库中给出对应的dockerfile

在这里插入图片描述

  • 选择菜单上的Repositories选项,进入仓库管理页面,该页面的右上方有一个Create仓库按钮,点下开始创建仓库。

在这里插入图片描述

  • 进入镜像仓库页面,填写好仓库的基本信息,点击创建仓库后进入仓库页面。

在这里插入图片描述

  • 在仓库页面中,选择仓库的builds选项

在这里插入图片描述

  • 进入builds页面后会要求选择构建的仓库的源,这里选择刚刚登录上的额github账号。

在这里插入图片描述

  • 选择github后,会要求填写github中需要自动构建的源码仓库,填写好其他基本信息点击save and build保存并构建。

在这里插入图片描述

在这里插入图片描述

  • 设置保存后,仓库的build页面就变成了以下的状态,证明开始构建了。

在这里插入图片描述

  • 设置好后,可以尝试随便push更新github上的代码,可以看到push后build会再次运行,自动构建就弄好了。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker--简介与实践 的相关文章

  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 如何禁用docker容器的root访问权限?

    我们有离岸开发人员 他们希望在本地运行我们的服务器 但出于安全原因 我们不想向他们提供服务器代码 所以一个解决方案是他们运行一个 Docker 容器 这是我们服务器的独立版本 所以他们这边没有复杂的设置 问题在于 始终可以以 root 身份
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 部署在github中的Jekyll显示index.html文件的原始文本

    我正在尝试使用来自的分叉存储库来部署 Jekyll 网站https github com cotes2020 jekyll theme chirpy https github com cotes2020 jekyll theme chirp
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • 无法使用 Docker 运行 Strapi

    我正在尝试 Docker 化我的Strapi应用程序 所以首先在项目的根目录中我创建了一个 env文件包含以下内容 HOST 0 0 0 0 PORT 3002 然后 里面backend config server js I have mo
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 获取 GitHub 问题的管道价值?

    我使用 ZenHub 来管理 GitHub 上的问题 当我查看问题的详细信息时 我可以在 GitHub 中看到属性 pipeline 这正是保存问题的列 Now I want to get the pipeline information
  • Docker EXPOSE 使用运行时环境变量

    我的 Dockerfile 设置了一些环境变量的默认值 然后公开了两个应该是提供的环境变量的端口 FROM python 3 6 5 stretch ENV MY SERVICE PORT 8080 ENV MY SERVICE PORT
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是什么?

    我有一个从官方 mysql 构建的数据库容器docker pull mysql 我有一个前端应用程序app用蛋糕建造 我有一个后端应用程序cms使用 Symfony 构建 我为两者都设置了容器链接app and cms自动启动并连接到db
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e

随机推荐

  • 关于python3在Windows10环境下构建发布模块

    在 Head First Python 中的描述太过简略 况且还是mac系统 然后我又百度了很多博客 都没能解决 找不到路径 这个问题 直到今天 才弄出来 首先自己写一个模块 因为我是新手所以就按first python描述的那个输出函数作
  • Multisim基础 变压器 简单示例

    Multisim NI Multisim 14 0 Student Edition OS Windows 10 x64typesetting Markdown blog my oschina net zhichengjiu gitee gi
  • 计网第五章(运输层)(六)(TCP可靠传输的实现)

    目录 一 基本概述 二 具体实现 1 前后沿 2 利用指针描述发送窗口的状态 3 有差错情况 之前在数据链路层时已经讨论过可靠传输 计网第三章 数据链路层 二 可靠传输 也在其中提到过可靠传输并不局限于数据链路层 一 基本概述 TCP通过以
  • Batch Normalization详解(原理+实验分析)

    Batch Normalization详解 原理 实验分析 1 计算过程 2 前向传播过程 3 反向传播过程 4 实验分析 4 1 实验一 验证有没有BatchNorm下准确率的区别 4 2 实验二 验证有没有BatchNorm noisy
  • VSCode+Python, conda激活环境错误的解决方案: CommandNotFoundError

    之前VSCode运行Python总是会在终端报错 CommandNotFoundError Your shell has not been properly configured to use conda activate 原因在于每次都会
  • 幼儿园观察记录的目的和目标_幼儿园观察记录:如何让幼儿在区角活动中真正动起来...

    区角活动是幼儿园教育教学活动中的重要组成部分 它贯穿于幼儿园一日生活的各个环节当中 它是幼儿园教育中促进幼儿个性化发展的有效形式 区角活动的内容与主题结合提升目的性 区角活动的材料与本土资源结合 凸显本土性 季节性 可变性 富有特色 教师在
  • mysql 2分钟_java程序mysql数据库每隔2分钟左右就会中断,必须重启tomcat

    原标题 java程序mysql数据库每隔2分钟左右就会中断 必须重启tomcat 解决方案一 推荐 1 问题解决方案及说明 https blog csdn net liuyangvoid article details 25975157 出
  • AIGC从入门到精通

    目录 1 概述 2 一键起飞 3 保持ID生成 4 教程 原理 训练阶段 采样阶段 5 大模型微调 6 训练 7 商业价值 Fooocus sd webui 界面 新手建议使用 ComfyUI 简体中文版 1 概述 Stable Diffu
  • [1065]impala查询内存限制Memory limit exceeded

    错误信息 ERROR Memory limit exceeded Query did not have enough memory to get the minimum required buffers in the block manag
  • Python3发送邮件

    coding utf 8 author ChenBaijing date 2022 4 7 14 33 Python对SMTP支持有smtplib和email两个模块 smtplib负责 登录邮件服务器 认证 和 发送邮件 对smtp协议进
  • vmware虚拟机开机黑屏的解决方法

    今天有一个项目需要用到OSX坯境 打开vmware 启动原来安装的 OSX10 11 结果启动后 无轮怎么操作就是黑屏 然后就百度了一下vmware黑屏的解决办法 尝试了一下问题解决 同时也把解决过程记录一下 1 挂起的时候我们是能够见到显
  • IPSec/GRE与PPTP的比较

    PPTP PPTP Point to Point Tunneling Protocol 是点对点的协议 基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法 或者使用Microsoft的点对点加密算法MPPE 而L2TP Layer
  • Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候 我们需要用到动态数据源的情况 比如多租户的场景 系统登录时需要根据用户信息切换到用户对应的数据库 又比如业务A要访问A数据库 业务B要访问B数据库等 都可以使用动态数据源方案进行解决 接下来 我们就来讲
  • Ultra Libraian介绍

    Ultra Libraian介绍 我从Ultra Libraian官网上查找一些信息 在下面统一介绍一下它 方便大家使用 Ultra Libraian简介 Ultra Libraian是一个零件库服务商 提供方便电子工程师和PCB Layo
  • 边界值法中的上点、内点和离点分析

    1 边界值法概念 边界值法设计测试用例 是对输入或输出的边界值 有效等价类和无效等价类的界限 进行测试的一种黑盒测试方法 2 边界值法存在的意义 测试经验表明错误往往会发生在输入或输出范围的边界上 所以边界值法是对这些边界进行测试 是对划分
  • 多系统U盘启动盘的制作,成功启动win8PE,ubuntu,deepin2013,deepin2014,以及通过U盘启动电脑已装系统。

    以前的用U盘装系统都是用ultraISO 直接制作启动盘 有的时候一连着好几天都得捣鼓着装系统 今天是windows 明天是ubuntu 后天就可能是其它linux发行版了 很不方便 所以就想利用一个U盘做一个多系统的启动盘 经过N天不断的
  • Linux安装完mysql远程连接Authentication plugin

    root iZ2ze8bpfv23icsz3g2hp2Z log mysql u root p Enter password Welcome to the MySQL monitor Commands end with or g Your
  • MATLAB 学习笔记(6)MATLAB 的 upsample 函数和 downsample 函数

    目录 upsample 和 downsample 程序验证 上采样 upsample 下采样 downsample 其他参数设定 总结 upsample 和 downsample upsample 和 downsample 顾名思义就是上采
  • Concis组件库封装——Loading加载中

    您好 如果喜欢我的文章 可以关注我的公众号 量子前端 将不定期关注推送前端好文 组件介绍 Loading组件是日常开发用的很多的组件 这次封装主要包含两种状态的Loading 旋转 省略号 话不多说先看一下组件的文档页面吧 Loading
  • Docker--简介与实践

    一 什么是容器技术 Docker 是一个开源的应用容器引擎 要了解Docker的前提就是要了解什么是容器技术 说到容器技术 这里就要联系一下我们经常使用到的虚拟机中的虚拟化技术了 两者在功能 目的上相似 都是将一系列的程序进行打包 建立一个