barriers / 阅读 / 详情

Fedora14 安装gmp时出错 configure: error: could not find a working compiler

2023-08-04 11:40:14
共1条回复
cloud123
似乎gcc并未安装,错误提示并未找到一个可工作的编译器
安装gcc

相关推荐

维护者的英文,维护者的翻译,怎么用英语翻译维护者

你好!维护者maintainer 英[men"teu026anu0259] 美[men"teu026anu0259] n. 维修者,维护物; <律,史>包揽诉讼罪者; [例句]We are a maintainer and builder of the international system.我们是国际社会秩序的维护者和建设者。
2023-08-04 04:22:511

修理工的英文怎么写

问题一:维修工英语怎么写 maintenance man maintainer maintenance worker 谢谢,希望帮到你 问题二:汽车修理工用英文怎么说 汽车修理工 [词典] automobile mechanic; garageman; [例句]这个汽车修理工把那辆旧汽车修好了,并把它卖掉,赚了一些钱。 The garage man fixed up the old car and sold it at a profit. 问题三:修理员怎么用英语说 修理员_百度翻译修理员 [网络] repairman; [例句]质量管理小组的成员应包括:负责相应部件修理的技术员,检验/放行人员,及质量保证经理。 The group should include: technicians, QC/ release personnel, and quality assurance manager. 进行更多翻译 问题四:修理的英文怎么写 to fix repair perfo揣m maintenance to overall 问题五:汽车修理工四级用英语翻译,怎么翻译 这样翻译Automobile mechanic level 4.
2023-08-04 04:22:581

如何用Dockerfile创建镜像

继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境,跑一个spring boot小项目。Dockerfile:Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。Dockerfile指令:1、FROM格式:FROM <image>或 FROM <image>:<tag>第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)2、MAINTAINET格式:MAINTAINET <name>指定维护者的信息3、RUN格式:RUN <command> 或 RUN ["", "", ""]每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“”换行)4、CMD格式:CMD ["","",""]指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行。(会被启动时指定的命令覆盖)5、EXPOSE格式:EXPOSE <port> [ <port> ...]告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射
2023-08-04 04:23:082

帮忙翻译一下: "我主要负责什么什么工作",这句话用英语口语怎么说

what exact works am i supposed 2 do ?like to attend Eng lectures
2023-08-04 04:23:1910

Dockerfile中ENTRYPOINT 和 CMD的区别

Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718# This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] ..# Base image to use, this must be set as the first lineFROM ubuntu# Maintainer: docker_user (@docker_user)MAINTAINER docker_user docker_user@email.com# Commands to update the imageRUN echo "deb raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf# Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM 或FROM :,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER RUN:格式为 RUN 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE [...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD 。该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY 。复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1CMD echo hello或1ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234[...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345FROM image-A#Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031# this is a test ubuntu 12.04 image dockerfile# Author:fengzheng# Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7MAINTAINER fengzheng# Commands to update the imageRUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install#如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf# Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。
2023-08-04 04:23:461

如何用Dockerfile创建镜像

Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。
2023-08-04 04:23:531

Ubuntu安装出现问题!

你命令些错了吧
2023-08-04 04:24:225

求英语大神帮忙,根据一下内容,写一篇英语对话,内容最好长一点,谢谢

其实我也不会的,不会的,不会的,你问别人吧,宝宝才五年级哦(>ω<)
2023-08-04 04:24:404

Express和koa各有啥优缺点_express和koa2的区别

Koa虽然同它哥Express说的一样,是WebFramework。不过从架构功能设计和架构设计上看,它更像它舅舅(原谅我亲戚关系懵了)——Connect。更多是一个中间件框架,其提供的是一个架子,而几乎所有的功能都需要由第三方中间件完成。Express更为贴近WebFramework这一概念,比如自带Router、路由规则等(在没有剥离bodyParser之前更为贴切);相比之下Koa则更为宽松,光是Router就有20个,也对自由选择的嘛(Home·koajs/koaWiki·GitHub),更为灵活。(Koa的maintainer之一)也发布了一个推荐的常用中间件合集包koa-middlewares(npmjs.org/package/koa-middlewares)。Express和Koa最明显的差别就是Handler的处理方法,一个是普通的回调函数,一个是利用生成器函数(GeneratorFunction)来作为响应器。往里头儿说就是Express是在同一线程上完成当前进程的所有HTTP请求,而Koa利用co作为底层运行框架,利用Generator的特性,实现“协程响应”(并不能将Generator等价于协程,在V8的邮件列表中对Generator的定义基本是`coroutine-like`),然而co这个库对Generator的使用方法并非当初Generator的设计初衷。还是要感谢TJ创造了co这个大杀器吧,让我们基本完全忘记了什么是回调函数或者callbackshell。虽然实现方法略微取巧,但是就大大加速了开发速度这一点而言,已经足以让我们跪舔了。Express:优点:历史更久,文档更完整,资料更多,深入人心缺点:不能忍的callback,Koa:优点:NoCallback!NoCallback!NoCallback!重要的事情说三遍,缺点:Connect/Express的中间件基本不能重用,基本要重写;依然需要更多人的支持和学习。
2023-08-04 04:24:481

docker tomcat镜像 应该拿什么镜像为基础镜像

创建一个安全的Docker基镜像的方法** 构建一个Java环境基镜像 **正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash每个Dockerfile第一个指令都是指定它的父级容器,通常是用于继承,在我们的例子中是alpine:latest:shFROM alpine:latestMAINTAINER cSphere 我们同时声明了谁为这个镜像负责,这个信息对上传到Docker Hub的镜像是必要的。就这样,你就有了往下操作的基础,接下来安装我们选好的shell,把下边的命令加上:shRUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]最终的Dockerfile是这样:```shFROM alpine:latestMAINTAINER cSphere docker@csphere.cn >RUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]```好了,现在我们构建容器:sh$ docker build -t my-java-base-image .Sending build context to Docker daemon 2.048 kBStep 1 : FROM alpine:latest---> 2314ad3eeb90Step 2 : MAINTAINER cSphere ---> Running in 63433312d77e---> bfe94713797aRemoving intermediate container 63433312d77e... 省略若干行Step 4 : CMD /bin/bash---> Running in d2291684b797---> ecc443d68f27Removing intermediate container d2291684b797Successfully built ecc443d68f27并且运行它:sh$ docker run --rm -ti my-java-base-imagebash-4.3#成功了!我们有了一个运行着bash的Alpine Linux。,
2023-08-04 04:24:581

这些术语是什么意思啊?

自花授粉:一朵花的花粉给同一朵花或给同一植株上另一朵花的雌蕊授粉,称为自花授粉,花生、豌豆、小麦、水稻等属于此类。自花授粉作物一般雌雄蕊同花,花瓣没有鲜艳的颜色和香味,雌雄蕊同时成熟,有的在花开放之前已完成授粉(闭花授粉)。异花授粉:一朵花的花粉给另一植株的雌蕊援粉就称做异花授粉,玉米、大麻等属于此类。兼行自花和异花援 粉者,象棉花、高粱等称做常异花授粉作物。异花授粉情况要复杂些。农作物的异花授粉主要 借助干风力和昆虫。雄性不育系:植株的雄蕊发育不正常,不能产生可育的花粉,但是雌蕊正常发育,可以接受其他植株的花粉而产生种子,这种现象在遗传学上就被称为雄性不育。同种植物中具有可遗传的雄性不育性状的植株群体叫做雄性不育系。保持系:保持系(maintainerline) 当作为父本与不育系杂交时,能使F1保持雄性不育性的植物品系。保持系的遗传组成为N(rfrf),不育系的遗传组成为S(rfrf),它们杂交后所产生的F1仍然是不育的即:S(rfrf)(♀)×N(rfrf)()→S(rfrf)(F1)(不育)。为此,保持系的细胞核必须具有与不育系一样的纯合不育基因,即rfrf,而细胞质则具有能育基因N。这样,保持系的雄性器官仍能正常发育并自交结实,又能作为父本与不育系杂交,使不育系的雄性不育性不断遗传下去,所以保持系是不育系赖以传代的必不可少的父本品系。农业上利用的保持系一般都与不育系属于同一品种(见不育系)。恢复系:恢复系恢复系(restoring line) 当作为父本与不育系杂交时,能使F1恢复为雄性可育且能正常结实的植物品系。恢复系的遗传组成为S(RfRf)或N(RfRf)。由于核遗传起主导作用,故不论胞质基因是不育(S)还是能育(N),它们均表现为雄性可育。用它们与不育系杂交,F1都是杂合可育的,即:S(rfrf)(♀)×S(RfRf)()→S(Rfrf)(F1)(可育),或S(rfrf)(♀)×N(RfRf)()→S(Rfrf)(F1)可育。就是说,恢复系不仅本身是雄性可育的,而且能使不育系产生的F1恢复为雄性可育。通常有众多的品系可使同一个不育系恢复为雄性可育,农业生产上应选择恢复性能强、杂种具有较高的自交结实率、有较好的杂种优势、增产幅度较大的品系作为恢复系。为此,常从与不育系地理距离远、生态型不同、性状差别大的品种或品系中经过测交选出具有生产价值的作为恢复系(见不育系)。
2023-08-04 04:25:061

如何使用docker来制作我现在正在使用的系统的镜像

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中
2023-08-04 04:25:281

如何用Dockerfile创建镜像

创建镜像的目的首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有最小版本,也有一些安装了mysql、nginx、apache等等第三方软件的版本可以直接拿来使用。虽然已经足够多了,但是有些情况下并不能满足我们的需求,例如需要安装一些比较少用到的第三方软件,这个时候只能先用公共仓库中的镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像。这些操作在之前的文章中介绍了。这样操作完成之后,可以用如下两种方式实现定制镜像的目的:1.用save和export的方式将镜像保存为tar包,然后在需要的时候导入tar镜像包2.将已经配置好的镜像push到我们的私有仓库(docker创建私有仓库)或者已注册过的共有仓库中,需要的时候直接pull下来使用这两种方式都可以,但是自动化程度低、自由度不够、定制起来比较麻烦。既然如此,那就来说一下更加自动化的创建方式。Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。
2023-08-04 04:25:361

终端中Make命令提示未找到命令

需要额外安装一个xcode包才能使用make命令,如果没有安装的话,好像就不能使用这个命令。
2023-08-04 04:25:592

php怎么多线程

PHP默认并不支持多线程,要使用多线程需要安装pthread扩展,而要安装pthread扩展,必须使用--enable-maintainer-zts参数重新编译PHP,这个参数是指定编译PHP时使用线程安全方式。多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安全问题:线程安全:线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。(推荐学习:PHP视频教程)在传统多线程中,由于多个线程共享变量,所以可能会导致出现如下问题:存在一个全局数组$arr = array("a");;A 线程获取数组长度为1;B 线程获取数组长度为1;A 线程 pop 出数组元素 $a = array_pop($arr); $a = "a";;B 线程也 pop 数组元素 $b = array_pop($arr); $a = null;;此时 B 线程内就出现了灵异事件,明明数组长度大于0,或没有 pop 出东西;PHP 实现PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离,将全局变量和静态变量 给每个线程都复制了一份,各线程使用的都是主线程的一个备份,从而避免了变量冲突,也就不会出现线程安全问题。PHP 对多线程的封装保证了线程安全,程序员不用考虑对全局变量加各种锁来避免读写冲突了,同时也减少了出错的机会,写出的代码更加安全。但由此导致的是,子线程一旦开始运行,主线程便无法再对子线程运行细节进行调整了,线程一定程度上失去了线程之间通过全局变量进行消息传递的能力。同时 PHP 开启线程安全选项后,使用 TSRM 机制分配和使用变量时也会有额外的损耗,所以在不需要多线程的 PHP 环境中,使用 PHP 的 ZTS (非线程安全) 版本就好。
2023-08-04 04:26:061

开源是什么意思啊?随便说两句就行求大神帮助

简介 开放源代码的定义由Bruce Perens(曾是Debian的创始人之一)定义如下: 自由再散布(Free Distribution):允许获得源代码的人可自由再将此源代码散布.源代码(Source Code):程式的可执行档在散布时,必需以随附完整源代码或是可让人方便的事后取得源代码.衍生著作(Derived Works):让人可依此源代码修改后,在依照同一授权条款的情形下再散布.原创作者程式源代码的完整性(Integrity of The Author"s Source Code):意即修改后的版本,需以不同的版本号码以与原始的程式码做分别,保障原始的程式码完整性.不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设定限制,但若是因为法律规定的情形则为例外(如:美国政府限制高加密软件的出口).对程式在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用.散布授权条款(Distribution of License):若软件再散布,必需以同一条款散布之.授权条款不得专属于特定产品(License Must Not Be Specific to a Product):若多个程式组合成一套软件,则当某一开放源代码的程式单独散布时,也必需要符合开放源代码的条件.授权条款不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光碟片),不得限制其他软件的授权条件也要遵照开放源代码的授权.授权条款必须技术中立(License Must Be Technology-Neutral):意即授权条款不得限制为电子格式才有效,若是纸本的授权条款也应视为有效. 开放源代码与自由软件 许多人将开放源代码与自由软件(freeSoftware)视为相同,但若以定义条件而言,自由软件仅是开放源代码的一种,也就是自由软件的定义较开放源代码更为严格,并非开放源代码的软件就可称为自由软件,要视该软件的授权条件是否合乎自由软件基金会对自由软件所下的定义. 开源软件定义Version 1.9 开源不仅仅表示开放程序源代码.从发行角度定义的开源软件必须符合如下条件: 1、自由再发行 许可证不能限制任何团体销售或赠送软件,软件可以是几个不同来源的程序集成后的软件发行版中的其中一个原件.许可证不能要求对这样的销售收取许可证费或其他费用. 2、程序源代码 程序必须包含源代码.必须允许发行版在包含编译形式的同时也包含程序源代码.当产品以某种形式发行时没有包含源代码,必须非常醒目的告知用户,如何通过 Internet免费的下载源代码.源代码必须是以当程序员修改程序时优先选用的形式提供.故意地扰乱源代码是不允许的.以预处理程序或翻译器这样的中间 形式作为源代码也是不允许的. 3、派生程序 许可证必须允许更改或派生程序.必须允许这些程序按与初始软件相同的许可证发行. 4、作者源代码的完整性 只有当许可证允许在程序开发阶段,为了调整程序的目的将"修补文件"的发行版与源代码一起发行时,许可证才能限制源代码以更改后的形式发行.许可证必须明确地允许按更改后的源代码所建立的程序发行.许可证可以要求派生的程序使用与初始软件不同的名称或版本号. 5、无个人或团体歧视 许可证不能都有针对任何个人或团体制在专门奋斗领域内的任何人使用该程序.例如不能限制程序应用于商业领域,或者应用于遗传研究. 7、许可证发行 伴随程序所具有权力必须适用于所有的程序分销商,而不需要这些团体之间再附加许可证签字盖章. 8、许可证不能特制某个产品 如果程序是某个特殊的软件发行版中的一部分,伴随该程序所具有的权力不能只以来于这一发行版.如果程序是从那一发行版中摘录出来的,使用或发行时用的都是那个程序的许可证,分销程序的所有团体都应拥有与初始软件版所允许的所有权力. 9、许可证不能排斥其他软件 许可证不能限制随该许可证软件一起发行的其他软件.例如,许可证不能要求所有与之一起发行的其他软件都是开源软件. 10、许可证实例 GNU GPL、BSD、X Consortiun和Artistic许可证都是我们认为符合开源软件定义的许可证.MPL也是一样. 1.9版的英文原文: The Open Source DefinitionVersion 1.9 The indented, italicized sections below appear as annotations to the Open Source Definition (OSD) and are not a part of the OSD. Introduction Open source doesn"t just mean access to the source code. The distribution terms of open-source software must comply with the following criteria: The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale. 1. Free Redistribution Rationale: By constraining the license to require free redistribution, we eliminate the temptation to throw away many long-term gains in order to make a few short-term sales dollars. If we didn"t do this, there would be lots of pressure for cooperators to defect. 2. Source Code The program must include source code, and must allow distribution in source code as well as compiled form. Where some form of a product is not distributed with source code, there must be a well-publicized means of obtaining the source code for no more than a reasonable reproduction cost–preferably, downloading via the Internet without charge. The source code must be the preferred form in which a programmer would modify the program. Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed. Rationale: We require access to un-obfuscated source code because you can"t evolve programs without modifying them. Since our purpose is to make evolution easy, we require that modification be made easy. 3. Derived Works The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software. Rationale: The mere ability to read source isn"t enough to support independent peer review and rapid evolutionary selection. For rapid evolution to happen, people need to be able to experiment with and redistribute modifications. 4. Integrity of The Author"s Source Code The license may restrict source-code from being distributed in modified form only if the license allows the distribution of "patch files" with the source code for the purpose of modifying the program at build time. The license must explicitly permit distribution of software built from modified source code. The license may require derived works to carry a different name or version number from the original software. Rationale: Encouraging lots of improvement is a good thing, but users have a right to know who is responsible for the software they are using. Authors and maintainers have reciprocal right to know what they"re being asked to support and protect their reputations. Accordingly, an open-source license must guarantee that source be readily available, but may require that it be distributed as pristine base sources plus patches. In this way, "unofficial" changes can be made available but readily distinguished from the base source. 5. No Discrimination Against Persons or GroupsThe license must not discriminate against any person or group of persons. Rationale: In order to get the maximum benefit from the process, the maximum diversity of persons and groups should be equally eligible to contribute to open sources. Therefore we forbid any open-source license from locking anybody out of the process. Some countries, including the United States, have export restrictions for certain types of software. An OSD-conformant license may warn licensees of applicable restrictions and remind them that they are obliged to obey the law; however, it may not incorporate such restrictions itself. 6. No Discrimination Against Fields of EndeavorThe license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research. Rationale: The major intention of this clause is to prohibit license traps that prevent open source from being used commercially. We want commercial users to join our community, not feel excluded from it. 7. Distribution of License The rights attached to the program must apply to all to whom the program is redistributed without the need for execution of an additional license by those parties. Rationale: This clause is intended to forbid closing up software by indirect means such as requiring a non-disclosure agreement. 8. License Must Not Be Specific to a ProductThe rights attached to the program must not depend on the program"s being part of a particular software distribution. If the program is extracted from that distribution and used or distributed within the terms of the program"s license, all parties to whom the program is redistributed should have the same rights as those that are granted in conjunction with the original software distribution. Rationale: This clause forecloses yet another class of license traps. 9. License Must Not Restrict Other SoftwareThe license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open-source software. Rationale: Distributors of open-source software have the right to make their own choices about their own software. Yes, the GPL is conformant with this requirement. Software linked with GPLed libraries only inherits the GPL if it forms a single work, not any software with which they are merely distributed. 10. License Must Be Technology-NeutralNo provision of the license may be predicated on any individual technology or style of interface. Rationale: This provision is aimed specifically aimed at licenses which require an explicit gesture of assent in order to establish a contract between licensor and licensee. Provisions mandating so-called "click-wrap" may conflict with important methods of software distribution such as FTP download, CD-ROM anthologies, and web mirroring; such provisions may also hinder code re-use. Conformant licenses must allow for the possibility that (a) redistribution of the software will take place over non-Web channels that do not support click-wrapping of the download, and that (b) the covered code (or re-used portions of covered code) may run in a non-GUI environment that cannot support popup dialogues. 关于开放源代码的定义(1.7版) 开放源代码并不仅仅意味着对源代码的访问权.开放源代码软件的发布条款必须满足以下条件: 1. 自由地再发布 如果被发布的软件是由不同来源的程序组成的,许可证不得限制任何当事人或组织(party)销售或赠送作为被发布软件成分之一的开放源码软件. 许可证不得从此项
2023-08-04 04:26:131

jquery解析json数据的问题

var john = eval("("+yourJsonData+")");for(key in john){ if(key==yourthing) { .... }}
2023-08-04 04:26:241

如何快速为RedHat加入NTFS支持

安装NTFS-3g软件
2023-08-04 04:26:343

在linux下安装ipmsg(2ipmsg-0.9.1.tar.gz), make时,提示没有Makefile,寻求解决办法?

确认一下有没有正确解压,然后看看Makefile是不是确实没有The simplest way to compile this package is: 1. `cd" to the directory containing the package"s source code and type `./configure" to configure the package for your system. If you"re using `csh" on an old version of System V, you might need to type `sh ./configure" instead to prevent `csh" from trying to execute `configure" itself. Running `configure" takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make" to compile the package. 3. Optionally, type `make check" to run any self-tests that come with the package. 4. Type `make install" to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean". To also remove the files that `configure" created (so you can compile the package for a different kind of computer), type `make distclean". There is also a `make maintainer-clean" target, but that is intended mainly for the package"s developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution.看那里面的INSTALL文件
2023-08-04 04:26:422

如何使用Dockerfile构建镜像

你好,使用方法如下:Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。
2023-08-04 04:27:031

如何成为一个Linux内核开发者

如何参与Linux内核开发---------------------这是一篇将如何参与Linux内核开发的相关问题一网打尽的终极秘笈。它将指导你成为一名Linux内核开发者,并且学会如何同Linux内核开发社区合作。它尽可能不包括任何关于内核编程的技术细节,但会给你指引一条获得这些知识的正确途径。如果这篇文章中的任何内容不再适用,请给文末列出的文件维护者发送补丁。入门----你想了解如何成为一名Linux内核开发者?或者老板吩咐你“给这个设备写个Linux驱动程序”?这篇文章的目的就是教会你达成这些目标的全部诀窍,它将描述你需要经过的流程以及给出如何同内核社区合作的一些提示。它还将试图解释内核社区为何这样运作。Linux内核大部分是由C语言写成的,一些体系结构相关的代码用到了汇编语言。要参与内核开发,你必须精通C语言。除非你想为某个架构开发底层代码,否则你并不需要了解(任何体系结构的)汇编语言。下面列举的书籍虽然不能替代扎实的C语言教育和多年的开发经验,但如果需要的话,做为参考还是不错的:- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]《C程序设计语言(第2版·新版)》(徐宝文 李志 译)[机械工业出版社]- "Practical C Programming" by Steve Oualline [O"Reilly]《实用C语言编程(第三版)》(郭大海 译)[中国电力出版社]- "C: A Reference Manual" by Harbison and Steele [Prentice Hall]《C语言参考手册(原书第5版)》(邱仲潘 等译)[机械工业出版社]Linux内核使用GNU C和GNU工具链开发。虽然它遵循ISO C89标准,但也用到了一些标准中没有定义的扩展。内核是自给自足的C环境,不依赖于标准C库的支持,所以并不支持C标准中的部分定义。比如long long类型的大数除法和浮点运算就不允许使用。有时候确实很难弄清楚内核对工具链的要求和它所使用的扩展,不幸的是目前还没有明确的参考资料可以解释它们。请查阅gcc信息页(使用“info gcc”命令显示)获得一些这方面信息。请记住你是在学习怎么和已经存在的开发社区打交道。它由一群形形色色的人组成,他们对代码、风格和过程有着很高的标准。这些标准是在长期实践中总结出来的,适应于地理上分散的大型开发团队。它们已经被很好得整理成档,建议你在开发之前尽可能多的学习这些标准,而不要期望别人来适应你或者你公司的行为方式。法律问题--------Linux内核源代码都是在GPL(通用公共许可证)的保护下发布的。要了解这种许可的细节请查看源代码主目录下的COPYING文件。如果你对它还有更深入问题请联系律师,而不要在Linux内核邮件组上提问。因为邮件组里的人并不是律师,不要期望他们的话有法律效力。对于GPL的常见问题和解答,请访问以下链接:http://www.gnu.org/licenses/gpl-faq.html文档----Linux内核代码中包含有大量的文档。这些文档对于学习如何与内核社区互动有着不可估量的价值。当一个新的功能被加入内核,最好把解释如何使用这个功能的文档也放进内核。当内核的改动导致面向用户空间的接口发生变化时,最好将相关信息或手册页(manpages)的补丁发到mtk.manpages@gmail.com,以向手册页(manpages)的维护者解释这些变化。以下是内核代码中需要阅读的文档:README文件简要介绍了Linux内核的背景,并且描述了如何配置和编译内核。内核的新用户应该从这里开始。Documentation/Changes文件给出了用来编译和使用内核所需要的最小软件包列表。Documentation/CodingStyle描述Linux内核的代码风格和理由。所有新代码需要遵守这篇文档中定义的规范。大多数维护者只会接收符合规定的补丁,很多人也只会帮忙检查符合风格的代码。Documentation/SubmittingPatchesDocumentation/SubmittingDrivers这两份文档明确描述如何创建和发送补丁,其中包括(但不仅限于):- 邮件内容- 邮件格式- 选择收件人遵守这些规定并不能保证提交成功(因为所有补丁需要通过严格的内容和风格审查),但是忽视他们几乎就意味着失败。其他关于如何正确地生成补丁的优秀文档包括:"The Perfect Patch"http://userweb.kernel.org/~akpm/stuff/tpp.txt"Linux kernel patch submission format"http://linux.yyz.us/patch-format.htmlDocumentation/stable_api_nonsense.txt论证内核为什么特意不包括稳定的内核内部API,也就是说不包括像这样的特性:- 子系统中间层(为了兼容性?)- 在不同操作系统间易于移植的驱动程序- 减缓(甚至阻止)内核代码的快速变化这篇文档对于理解Linux的开发哲学至关重要。对于将开发平台从其他操作系统转移到Linux的人来说也很重要。Documentation/SecurityBugs如果你认为自己发现了Linux内核的安全性问题,请根据这篇文档中的步骤来提醒其他内核开发者并帮助解决这个问题。Documentation/ManagementStyle描述内核维护者的工作方法及其共有特点。这对于刚刚接触内核开发(或者对它感到好奇)的人来说很重要,因为它解释了很多对于内核维护者独特行为的普遍误解与迷惑。Documentation/stable_kernel_rules.txt解释了稳定版内核发布的规则,以及如何将改动放入这些版本的步骤。Documentation/kernel-docs.txt有助于内核开发的外部文档列表。如果你在内核自带的文档中没有找到你想找的内容,可以查看这些文档。Documentation/applying-patches.txt关于补丁是什么以及如何将它打在不同内核开发分支上的好介绍内核还拥有大量从代码自动生成的文档。它包含内核内部API的全面介绍以及如何妥善处理加锁的规则。生成的文档会放在 Documentation/DocBook/目录下。在内核源码的主目录中使用以下不同命令将会分别生成PDF、Postscript、HTML和手册页等不同格式的文档:make pdfdocsmake psdocsmake htmldocsmake mandocs如何成为内核开发者------------------如果你对Linux内核开发一无所知,你应该访问“Linux内核新手”计划:http://kernelnewbies.org它拥有一个可以问各种最基本的内核开发问题的邮件列表(在提问之前一定要记得查找已往的邮件,确认是否有人已经回答过相同的问题)。它还拥有一个可以获得实时反馈的IRC聊天频道,以及大量对于学习Linux内核开发相当有帮助的文档。网站简要介绍了源代码组织结构、子系统划分以及目前正在进行的项目(包括内核中的和单独维护的)。它还提供了一些基本的帮助信息,比如如何编译内核和打补丁。如果你想加入内核开发社区并协助完成一些任务,却找不到从哪里开始,可以访问“Linux内核房管员”计划:http://kernelnewbies.org/KernelJanitors这是极佳的起点。它提供一个相对简单的任务列表,列出内核代码中需要被重新整理或者改正的地方。通过和负责这个计划的开发者们一同工作,你会学到将补丁集成进内核的基本原理。如果还没有决定下一步要做什么的话,你还可能会得到方向性的指点。如果你已经有一些现成的代码想要放到内核中,但是需要一些帮助来使它们拥有正确的格式。请访问“内核导师”计划。这个计划就是用来帮助你完成这个目标的。它是一个邮件列表,地址如下:http://selenic.com/mailman/listinfo/kernel-mentors在真正动手修改内核代码之前,理解要修改的代码如何运作是必需的。要达到这个目的,没什么办法比直接读代码更有效了(大多数花招都会有相应的注释),而且一些特制的工具还可以提供帮助。例如,“Linux代码交叉引用”项目就是一个值得特别推荐的帮助工具,它将源代码显示在有编目和索引的网页上。其中一个更新及时的内核源码库,可以通过以下地址访问:http://sosdg.org/~coywolf/lxr/开发流程--------目前Linux内核开发流程包括几个“主内核分支”和很多子系统相关的内核分支。这些分支包括:- 2.6.x主内核源码树- 2.6.x.y -stable内核源码树- 2.6.x -git内核补丁集- 2.6.x -mm内核补丁集- 子系统相关的内核源码树和补丁集2.6.x内核主源码树-----------------2.6.x内核是由Linus Torvalds(Linux的创造者)亲自维护的。你可以在kernel.org网站的pub/linux/kernel/v2.6/目录下找到它。它的开发遵循以下步骤:- 每当一个新版本的内核被发布,为期两周的集成窗口将被打开。在这段时间里维护者可以向Linus提交大段的修改,通常这些修改已经被放到-mm内核中几个星期了。提交大量修改的首选方式是使用git工具(内核的代码版本管理工具,更多的信息可以在http://git.or.cz/获取),不过使用普通补丁也是可以的。- 两个星期以后-rc1版本内核发布。之后只有不包含可能影响整个内核稳定性的新功能的补丁才可能被接受。请注意一个全新的驱动程序(或者文件系统)有可能在-rc1后被接受是因为这样的修改完全独立,不会影响其他的代码,所以没有造成内核退步的风险。在-rc1以后也可以用git向Linus提交补丁,不过所有的补丁需要同时被发送到相应的公众邮件列表以征询意见。- 当Linus认为当前的git源码树已经达到一个合理健全的状态足以发布供人测试时,一个新的-rc版本就会被发布。计划是每周都发布新的-rc版本。- 这个过程一直持续下去直到内核被认为达到足够稳定的状态,持续时间大概是6个星期。- 以下地址跟踪了在每个-rc发布中发现的退步列表:http://kernelnewbies.org/known_regressions关于内核发布,值得一提的是Andrew Morton在linux-kernel邮件列表中如是说:“没有人知道新内核何时会被发布,因为发布是根据已知bug的情况来决定的,而不是根据一个事先制定好的时间表。”2.6.x.y -stable(稳定版)内核源码树-----------------------------------由4个数字组成的内核版本号说明此内核是-stable版本。它们包含基于2.6.x版本内核的相对较小且至关重要的修补,这些修补针对安全性问题或者严重的内核退步。这种版本的内核适用于那些期望获得最新的稳定版内核并且不想参与测试开发版或者实验版的用户。如果没有2.6.x.y版本内核存在,那么最新的2.6.x版本内核就相当于是当前的稳定版内核。2.6.x.y版本由“稳定版”小组(邮件地址<stable@kernel.org>)维护,一般隔周发布新版本。内核源码中的Documentation/stable_kernel_rules.txt文件具体描述了可被稳定版内核接受的修改类型以及发布的流程。2.6.x -git补丁集----------------Linus的内核源码树的每日快照,这个源码树是由git工具管理的(由此得名)。这些补丁通常每天更新以反映Linus的源码树的最新状态。它们比-rc版本的内核源码树更具试验性质,因为这个补丁集是全自动生成的,没有任何人来确认其是否真正健全。2.6.x -mm补丁集---------------这是由Andrew Morton维护的试验性内核补丁集。Andrew将所有子系统的内核源码和补丁拼凑到一起,并且加入了大量从linux-kernel邮件列表中采集的补丁。这个源码树是新功能和补丁的试炼场。当补丁在-mm补丁集里证明了其价值以后Andrew或者相应子系统的维护者会将补丁发给Linus以便集成进主内核源码树。在将所有新补丁发给Linus以集成到主内核源码树之前,我们非常鼓励先把这些补丁放在-mm版内核源码树中进行测试。这些内核版本不适合在需要稳定运行的系统上运行,因为运行它们比运行任何其他内核分支都更具有风险。如果你想为内核开发进程提供帮助,请尝试并使用这些内核版本,并在linux-kernel邮件列表中提供反馈,告诉大家你遇到了问题还是一切正常。通常-mm版补丁集不光包括这些额外的试验性补丁,还包括发布时-git版主源码树中的改动。-mm版内核没有固定的发布周期,但是通常在每两个-rc版内核发布之间都会有若干个-mm版内核发布(一般是1至3个)。子系统相关内核源码树和补丁集----------------------------相当一部分内核子系统开发者会公开他们自己的开发源码树,以便其他人能了解内核的不同领域正在发生的事情。如上所述,这些源码树会被集成到-mm版本内核中。下面是目前可用的一些内核源码树的列表:通过git管理的源码树:- Kbuild开发源码树, Sam Ravnborg <sam@ravnborg.org>git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git- ACPI开发源码树, Len Brown <len.brown@intel.com>git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git- 块设备开发源码树, Jens Axboe <axboe@suse.de>git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git- DRM开发源码树, Dave Airlie <airlied@linux.ie>git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git- ia64开发源码树, Tony Luck <tony.luck@intel.com>git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git- ieee1394开发源码树, Jody McIntyre <scjody@modernduck.com>git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git- infiniband开发源码树, Roland Dreier <rolandd@cisco.com>git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git- libata开发源码树, Jeff Garzik <jgarzik@pobox.com>git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git- 网络驱动程序开发源码树, Jeff Garzik <jgarzik@pobox.com>git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git- pcmcia开发源码树, Dominik Brodowski <linux@dominikbrodowski.net>git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git- SCSI开发源码树, James Bottomley <James.Bottomley@SteelEye.com>git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git使用quilt管理的补丁集:- USB, PCI, 驱动程序核心和I2C, Greg Kroah-Hartman <gregkh@suse.de>kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/- x86-64, 部分i386, Andi Kleen <ak@suse.de>ftp.firstfloor.org:/pub/ak/x86_64/quilt/其他内核源码树可以在http://git.kernel.org的列表中和MAINTAINERS文件里找到。报告bug-------bugzilla.kernel.org是Linux内核开发者们用来跟踪内核Bug的网站。我们鼓励用户在这个工具中报告找到的所有bug。如何使用内核bugzilla的细节请访问:http://test.kernel.org/bugzilla/faq.html内核源码主目录中的REPORTING-BUGS文件里有一个很好的模板。它指导用户如何报告可能的内核bug以及需要提供哪些信息来帮助内核开发者们找到问题的根源。利用bug报告-----------练习内核开发技能的最好办法就是修改其他人报告的bug。你不光可以帮助内核变得更加稳定,还可以学会如何解决实际问题从而提高自己的技能,并且让其他开发者感受到你的存在。修改bug是赢得其他开发者赞誉的最好办法,因为并不是很多人都喜欢浪费时间去修改别人报告的bug。要尝试修改已知的bug,请访问http://bugzilla.kernel.org网址。如果你想获得最新bug的通知,可以订阅bugme-new邮件列表(只有新的bug报告会被寄到这里)或者订阅bugme-janitor邮件列表(所有bugzilla的变动都会被寄到这里)。https://lists.linux-foundation.org/mailman/listinfo/bugme-newhttps://lists.linux-foundation.org/mailman/listinfo/bugme-janitors邮件列表--------正如上面的文档所描述,大多数的骨干内核开发者都加入了Linux Kernel邮件列表。如何订阅和退订列表的细节可以在这里找到:http://vger.kernel.org/vger-lists.html#linux-kernel网上很多地方都有这个邮件列表的存档(archive)。可以使用搜索引擎来找到这些存档。比如:http://dir.gmane.org/gmane.linux.kernel在发信之前,我们强烈建议你先在存档中搜索你想要讨论的问题。很多已经被详细讨论过的问题只在邮件列表的存档中可以找到。大多数内核子系统也有自己独立的邮件列表来协调各自的开发工作。从MAINTAINERS文件中可以找到不同话题对应的邮件列表。很多邮件列表架设在kernel.org服务器上。这些列表的信息可以在这里找到:http://vger.kernel.org/vger-lists.html在使用这些邮件列表时,请记住保持良好的行为习惯。下面的链接提供了与这些列表(或任何其它邮件列表)交流的一些简单规则,虽然内容有点滥竽充数。http://www.albion.com/netiquette/当有很多人回复你的邮件时,邮件的抄送列表会变得很长。请不要将任何人从抄送列表中删除,除非你有足够的理由这么做。也不要只回复到邮件列表。请习惯于同一封邮件接收两次(一封来自发送者一封来自邮件列表),而不要试图通过添加一些奇特的邮件头来解决这个问题,人们不会喜欢的。记住保留你所回复内容的上下文和源头。在你回复邮件的顶部保留“某某某说到……”这几行。将你的评论加在被引用的段落之间而不要放在邮件的顶部。如果你在邮件中附带补丁,请确认它们是可以直接阅读的纯文本(如Documentation/SubmittingPatches文档中所述)。内核开发者们不希望遇到附件或者被压缩了的补丁。只有这样才能保证他们可以直接评论你的每行代码。请确保你使用的邮件发送程序不会修改空格和制表符。一个防范性的测试方法是先将邮件发送给自己,然后自己尝试是否可以顺利地打上收到的补丁。如果测试不成功,请调整或者更换你的邮件发送程序直到它正确工作为止。总而言之,请尊重其他的邮件列表订阅者。
2023-08-04 04:27:131

php多线程怎么实现

PHP默认并不支持多线程,要使用多线程需要安装pthread扩展,而要安装pthread扩展,必须使用--enable-maintainer-zts参数重新编译PHP,这个参数是指定编译PHP时使用线程安全方式。PHP 实现PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离,将全局变量和静态变量 给每个线程都复制了一份,各线程使用的都是主线程的一个备份,从而避免了变量冲突,也就不会出现线程安全问题。(推荐学习:PHP视频教程)PHP 对多线程的封装保证了线程安全,程序员不用考虑对全局变量加各种锁来避免读写冲突了,同时也减少了出错的机会,写出的代码更加安全。但由此导致的是,子线程一旦开始运行,主线程便无法再对子线程运行细节进行调整了,线程一定程度上失去了线程之间通过全局变量进行消息传递的能力。同时 PHP 开启线程安全选项后,使用 TSRM 机制分配和使用变量时也会有额外的损耗,所以在不需要多线程的 PHP 环境中,使用 PHP 的 ZTS (非线程安全) 版本就好。实例代码下面是一个线程类,用来请求某一接口。接下来根据它写两个多线程的应用实例:class Request extends Thread { public $url; public $response; public function __construct($url) { $this->url = $url; } public function run() { $this->response = file_get_contents($this->url); }}异步请求将同步的请求拆分为多个线程异步调用,以提升程序的运行效率。$chG = new Request("www.google.com");$chB = new Request("www.baidu.com");$chG ->start();$chB ->start();$chG->join();$chB->join();$gl = $chG->response;$bd = $chB->response;
2023-08-04 04:27:211

安装libmcrypt-2.5.8 执行make时报没有规则可以创建目标“all”

没装编译器。 sudo get-apt install g++
2023-08-04 04:27:291

linux不是开源的吗,怎么没找到源代码呢,怎样才能看到linux的内核源代码?????我的是linux 5.0

网上有。www.linux.org www.kernel.org。一楼乱帖。源码占空间啊,一般盘里不带。
2023-08-04 04:27:505

单host下Docker的默认网络配置

本文用到的环境如下: host: centos7 docker: 通过 yum install -y docker 安装,版本号为1.10.3 docker镜像: # Version: 0.0.1 FROM ubuntu:latest MAINTAINER paul liu "pollux.liu@msn.com" RUN apt-get update RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping CMD /bin/bash 场景图: 我的host主机接有无线路由器,通过ADSL拨号上网,网卡eth0固定IP为192.168.0.200,网关为路由器的IP 192.168.0.1。 在host上安装docker,并运行容器。 通过以下命令安装docker, yum install -y docker 启用docker, systemctl start docker 然后在host主机运行 ifconfig 或 ip a 命令,可以看到除去host原有的网卡eth0和回环lo外,多了个docker0。 docker0 IP为172.17.0.1,所在的网段默认为B类私网地址172.17.0.0/16。可以将docker0看做是host主机的一块虚拟网卡。这样host主机就等同于配置了双网卡,两块网卡之间可以通信,但前提是启用ip_forward。 这是docker0的第一个身份。 运行两个容器docker1,docker2,然后在host主机上运行 brctl show 查看, 这里可以看出docker0的第二个身份,一个虚拟交换机。每运行一个容器,就会产生一对veth,其中一端连接到docker0上,另一端连接到容器的eth0上。这样,所有连接到docker0的容器组成了一个局域网。如下图: 在host主机上运行 ifconfig ,也会发现多了两个veth这样的网络接口。 在host主机上运行 ip addr show veth6d9a691 ,可以查看到该veth具有mac地址,这也正说明了docker0的虚拟交换机的身份,交换机是通过mac地址通信的,连接到交换机的设备必须具有mac地址。 由于docker0自身也具有mac地址,这个与纯二层交换机是不同的,并且绑定了IP 172.17.0.1,容器默认把docker0作为了网关。也就是docker0还兼具路由的功能,因此可以把docker0看做是一个三层交换机,可以做二层数据包转发,也可以做三层路由转发。 在容器中运行 route -n 查看路由如下:在host主机上运行 route -n 查看路由如下:在host中,访问本网段192.168.0.0是通过eth0转发数据包的,访问172.17.0.0网段是通过docker0转发数据包的,而对于其他如公网是通过eth0将数据包转发给网关192.168.0.1,再由该网关进行数据包转发的,比如上网。 在容器中运行 ping sohu.com 或 ping 192.168.0.200 都可以ping通。 默认情况下,不需要再额外做任何配置,在一台host主机上,通过docker0,各容器之间可以互通,并且可以通过host的eth0连接外网。 通俗的讲,通过docker0组成了一个网段为172.17.0.0/16的以太网,docker容器发起请求时,如果是相同网段则经由docker0转发到目标机器,如果是不同网段,则经由docker0,转发到host的另一块网卡eth0上,由eth0负责下一步的数据包转发,比如公网地址。 下面进一步分析一下报文是怎么发送到外面的。 容器内部发送一条公网请求报文,通过eth0,在veth被接收。此时报文已经来到了主机上,通过查询主机的路由表( route -n ),如果发现报文应该通过主机的eth0,从默认网关发送出去,那么报文就被从docker0转发给主机的eth0,但前提是首先启用ip_forward功能,才能在host主机的docker0和eth0两个网卡间传递数据包。 由于目标地址并不属于host主机所在网段,那么会匹配机器上的 iptables中的nat表POSTROUTING链中的规则。 在host主机运行命令 iptables -L -n -t nat --line-numbers ,查看nat表,这里只看POSTROUTING链: 第一行中说明,对于源地址为172.17.0.0/16网段的数据包,发出去之前通过MQSQUERADE伪装。linux内核会修改数据包源地址为host主机eth0的地址(也就是192.168.0.200),然后把报文转发出去。对于外部来说,报文是从主机eth0发送出去的。 局域网内的机器由于都是私有IP,是无法直接访问互联网的(数据包可以发出去,但回不来。)如果要上网,除了可以通过硬件路由器,也可以通过软件路由,在iptables的nat表中的POSTROUTING链中添加SNAT规则。 测试一下,在host主机运行命令 iptables -t nat -D POSTROUTING 1 将第一条规则删掉,那么在容器中就运行命令 ping sohu.com 就ping不通了。但仍然可以ping通host主机。 在host主机运行命令以下命令恢复: iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -o eth0 -j SNAT --to-source 192.168.0.200 或者 iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 关于SNAT和MASQUERADE,这篇文章已经有过描述,可以参考: Docker前传之linux iptables 新建一Dockerfile,用以运行nginx容器: # Version: 0.0.1 FROM paulliu/ubuntu_ip RUN apt-get install -y nginx EXPOSE 80 在host主机运行构建命令构建镜像 docker build -t paulliu/nginx . 在host主机运行容器启动命令 docker run -d -p 80 --name nginx1 paulliu/nginx nginx -g "daemon off;" 在host主机查看容器的端口映射 docker port nginx1 80 在host主机运行命令 iptables -nat -L -n 可以看到在PREROUTING链中多了以下DNAT规则: 也就是在容器启动时通过 -p 80 将host主机192.168.0.200:32773映射为容器172.17.0.4:80。 注意:docker容器每次启动时获取的IP地址未必是一样的,而且 -p 80 是在host主机上随机选择一个端口号进行映射,每次启动的端口号也未必是一样的。但iptables中相关的规则是自动变更的。 在host主机运行 curl localhost:32773 或者在其他主机运行 curl 192.168.0.200:32773 结果如下:
2023-08-04 04:28:051

Yuan Longping 英语简介

Yuan Longping, male, Han nationality, is a native of De"an, Jiangxi province. He was born in 1930 and graduated from Southwest China Agricultural Institute. Yuan Longping has had a renowned career in agriculture. He has won many prizes both in China and abroad for his outstanding work. Yuan began researching hybrid rice in 1964 and developed three strains of hybrid rice (male sterile, maintainer and restorer), and obtained the world"s first high-yielding hybrid rice strains in 1973. Yuan made breakthroughs in hybrid rice breeding and perfected production techniques by 1984. He has been praised as the "father of hybrid rice" for his contribution to hybrid rice development in China, which is now the world"s most advanced. Yuan Longping was elected an academician to the Chinese Academy of Engineering in 1995. Yuan Longping was a delegate to the 5th NPC.
2023-08-04 04:28:162

linux 怎样安装软件

linux 有汉化版的 里面有软件中心~~
2023-08-04 04:28:252

请教,shell如何模拟键盘输入字符

举个例子:做Docker构建镜像的练习,写了下面这个 Dockerfile 文件,其中 yum install tomcat 执行过程中需要用键盘输入两次字符”y”以便确认选项,Dockerfile 脚本命令如下:FROM centosMAINTAINER quicmous "xuyeping@yeah.net"RUN yes y | head -2 | yum install tomcat -yRUN echo "Hi, I am in your container"EXPOSE 8012345其中 yes 命令可以无限重复产生其后面的字符”y”,head 命令只选择其中两次重复输入,也就是两个字符”y”。命令行yes y | head -2 | yum install tomcat -y可以自动完成全部操作,中间过程不需要人工干预。
2023-08-04 04:28:341

安装vim补全插件过程遇到的问题,我按如下安装,到第二步 的 .vimrc 怎么找不到?谢谢

没有就新建一个,缺省.vimrc是没有的
2023-08-04 04:28:491

php不支持多线程怎么办

PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式。推荐:php服务器线程安全多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安全问题:线程安全:线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。在传统多线程中,由于多个线程共享变量,所以可能会导致出现如下问题:存在一个全局数组$arr = array("a");;A线程获取数组长度为1;B 线程获取数组长度为1;A 线程 pop 出数组元素 $a = array_pop($arr); $a = "a";;B 线程也 pop 数组元素 $b = array_pop($arr); $a = null;;此时 B 线程内就出现了灵异事件,明明数组长度大于0,或没有 pop 出东西;PHP 实现PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离,将全局变量和静态变量 给每个线程都复制了一份,各线程使用的都是主线程的一个备份,从而避免了变量冲突,也就不会出现线程安全问题。PHP 对多线程的封装保证了线程安全,程序员不用考虑对全局变量加各种锁来避免读写冲突了,同时也减少了出错的机会,写出的代码更加安全。但由此导致的是,子线程一旦开始运行,主线程便无法再对子线程运行细节进行调整了,线程一定程度上失去了线程之间通过全局变量进行消息传递的能力。同时 PHP 开启线程安全选项后,使用 TSRM 机制分配和使用变量时也会有额外的损耗,所以在不需要多线程的 PHP 环境中,使用 PHP 的 ZTS (非线程安全) 版本就好。类和方法PHP 将线程 封装成了 Thread 类,线程的创建通过实例化一个线程对象来实现,由于类的封装性,变量的使用只能通过构造函数传入,而线程运算结果也需要通过类变量传出。下面介绍几个常用的 Thread 类方法:run():此方法是一个抽象方法,每个线程都要实现此方法,线程开始运行后,此方法中的代码会自动执行;start():在主线程内调用此方法以开始运行一个线程;join():各个线程相对于主线程都是异步执行,调用此方法会等待线程执行结束;kill():强制线程结束;isRunning():返回线程的运行状态,线程正在执行run()方法的代码时会返回 true;因为线程安全的实现,PHP 的多线程开始运行后,无法再通过共享内存空间通信,线程也无法通过线程间通信复用,所以我认为 PHP 的“线程池”并没有什么意义。扩展内自带的Pool 类是一个对多线程分配管理的类,这里也不再多介绍了。
2023-08-04 04:28:561

谁会移植内核啊

什么手机的
2023-08-04 04:29:165

package.json是什么

什么是Node.js的模块(Module)?在Node.js中,模块是一个库或框架,也是一个Node.js项目。Node.js项目遵循模块化的架构,当我们创建了一个Node.js项目,意味着创建了一个模块,这个模块的描述文件,被称为package.json。通常情况下package.json内容出错,会导致项目出现bug,甚至阻止项目的运行。下面是normalize包的package.json文件:{ "name": "normalize.css", "version": "3.0.3", "description": "Normalize.css as a node packaged module", "style": "normalize.css", "files": [ "LICENSE.md", "normalize.css" ], "homepage": "http://necolas.github.io/normalize.css", "repository": { "type": "git", "url": "git://github.com/necolas/normalize.css.git" }, "main": "normalize.css", "author": { "name": "Nicolas Gallagher" }, "license": "MIT", "gitHead": "2bdda84272650aedfb45d8abe11a6d177933a803", "bugs": { "url": "https://github.com/necolas/normalize.css/issues" }, "_id": "normalize.css@3.0.3", "scripts": {}, "_shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6", "_from": "normalize.css@3.0.3", "_npmVersion": "2.7.0", "_nodeVersion": "0.10.35", "_npmUser": { "name": "necolas", "email": "nicolasgallagher@gmail.com" }, "maintainers": [ { "name": "tjholowaychuk", "email": "tj@vision-media.ca" }, { "name": "necolas", "email": "nicolasgallagher@gmail.com" } ], "dist": { "shasum": "acc00262e235a2caa91363a2e5e3bfa4f8ad05c6", "tarball": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz" }, "directories": {}, "_resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-3.0.3.tgz", "readme": "ERROR: No README data found!"}2、package.json属性说明name - 包名.version - 包的版本号。description - 包的描述。homepage - 包的官网URL。author - 包的作者,它的值是你在https://npmjs.org网站的有效账户名,遵循“账户名<邮件>”的规则,例如:zhangsan <zhangsan@163.com>。contributors - 包的其他贡献者。dependencies / devDependencies - 生产/开发环境依赖包列表。它们将会被安装在 node_module 目录下。repository - 包代码的Repo信息,包括type和URL,type可以是git或svn,URL则是包的Repo地址。main - main 字段指定了程序的主入口文件,require("moduleName") 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。keywords - 关键字上述参数是极为常见的参数,另外还可以设置script、license等等。除了官方必须的一些参数外,我们也可以存储我们自己的关于模块的描述信息在package.json。
2023-08-04 04:29:301

怎么制作docker镜像 有多大

方法/步骤在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中
2023-08-04 04:29:371

《TheWell-GroundedRubyist》epub下载在线阅读,求百度网盘云资源

《The Well-Grounded Rubyist》(David A. Black)电子书网盘下载免费在线阅读资源链接:链接: https://pan.baidu.com/s/1xhZ6J2kGFuW1gOFHGcWvfw 提取码: 9a4s书名:The Well-Grounded Rubyist作者:David A. Black豆瓣评分:7.5出版社:Manning Publications出版年份:2009-6-4页数:520内容简介:HIGHLIGHT The perfect introduction to Ruby, completely updated for Ruby 1.9. DESCRIPTION The Well-Grounded Rubyist takes the reader from interested novice to proficient practitioner. It"s a beautifully written tutorial that begins with the basic steps to get the reader"s first Ruby program up and running and goes on to explore sophisticated topics like callable objects, reflection, and threading. Whether the topic is simple or tough, the book"s easy-to-follow examples and explanations give the reader immediate confidence as you build your Ruby programming skills. The Well-Grounded Rubyist is a thoroughly revised and updated edition of the best-selling Ruby for Rails. In this new book, expert author David A. Black moves beyond Rails and presents a broader view of Ruby. It covers Ruby 1.9, and keeps the same sharp focus and clear writing that made Ruby for Rails stand out. It"s no wonder one reader commented: The technical depth is just right to not distract beginners, yet detailed enough for more advanced readers. KEY SELLING POINTS Crystal-clear examples and explanations of core Ruby topics Starts at the very beginning and guides you to confident proficiency Updated for Ruby 1.9 Prepares you to use Ruby anywhere - not just with Rails By the bestselling author of Ruby for Rails作者简介:A Ruby community leader, David A. Black is a director of Ruby Central, the parent organization of the annual International Ruby Conference (RubyConf) and the International Rails Conference. David is a Ruby core contributor and the creator and maintainer of the Rails-based Ruby Change Request Archive (RCRchive). He lives and works as a consultant in new Jersey.
2023-08-04 04:29:441

linux怎么安装软件

下载杀毒软件的安装程序,然后运行这个程序就会出现安装对话框,你按照提示点下一步就是了
2023-08-04 04:30:0113

docker下如何搭建MySQL+php-fpm+nginx容器环境,本文详解

配置容器(进入容器)docker exec -it your_mysql bash进入之后,要对用户进行授权,以便使用远程连接连接mysql 输入密码:ziqin666执行如下命令GRANT ALL PRIVILEGES ON *.* TO "root"@"localhost" IDENTIFIED BY "ziqin666";GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "ziqin666";GRANT ALL PRIVILEGES ON *.* TO "root"@"127.0.0.1" IDENTIFIED BY "ziqin666";FLUSH PRIVILEGES;此时可以使用客户端连接一下看看。(一定要把安全组规则对应端口打开)二、构建php-fpm容器准备工作php.ini 默认是不存在的在/home/app/phpfile文件夹下创建 php.ini文件和conf.d文件夹创建容器 docker run -p 9000:9000 --name your_phpfpm -v /home/app/html:/var/www/html -v /home/app/phpfile:/usr/local/etc/php --link your_mysql:mysql -d php:5.6-fpm命令说明:--name your_phpfpm: 将容器命名为 your_phpfpm。-v /home/app/html:/var/www/html: 将主机中项目的目录 /home/app/html 挂载到容器的 /var/www/html安装 pdo 以便后边测试数据库连接,在docker的php容器中可以这样来安装docker-php-ext-install pdo_mysql安装其他插件也可以使用这种办法并加入到php.iniextension=php_curl.dllextension=php_gd2.dllextension=php_mysql.dllextension=php_mysqli.dllextension=php_pdo_mysql.dllextension=php_pdo_odbc.dllextension=php_pdo.dll如果插件还不够就需要自己定制镜像FROM php:7.0.12-fpmMAINTAINER Tairy <tairyguo@gmail.com>WORKDIR /workingRUN apt-get update --fix-missing && apt-get install -y g++ autoconf bash git apt-utils libxml2-dev libcurl3-dev pkg-config && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone && docker-php-ext-install iconv curl mbstring xml json mcrypt mysqli pdo pdo_mysql zip && docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-png-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd && docker-php-ext-enable gd && pecl install /pecl/redis-3.0.0.tgz && docker-php-ext-enable redis && apt-get purge -y --auto-remove && rm -rf /var/cache/apt/* && rm -rf /var/lib/apt/lists/* && rm -rf /pecl三、安装nginx配置文件目录:/home/app/nginx/conf.d(注释:没有的文件自主创建哈)在配置文件目录新建 default.confserver{listen 80;server_name localhost;location / { root /usr/share/nginx/html; index index.html index.htm; }location ~ .php$ { fastcgi_pass your_phpfpm:9000; #此处写docker里边php 的名称: your_phpfpmfastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;include fastcgi_params; } error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}创建容器docker run -p 81:80 --name your_nginx -v /home/app/nginx/www:/usr/share/nginx/html -v /home/app/nginx/conf.d:/etc/nginx/conf.d --link your_phpfpm:phpfpm -d nginx:latest映射容器中的phpfpm和mysql都为固定,不能修改!这里需要配置nginx使用用户,即把/etc/nginx/nginx.conf里的nginx用户修改为www-data,同时把/home/app/nginx/www下的文件所有者改为www-data:www_data,否则访问会有权限问题chown -R www-data:www-data www四 、 测试1、查看服务docker ps -aSTATUS 皆为up ,即运行中2、测试 php解析在宿主机/home/app/nginx/www/目录下修改 index.php 文件。<?php echo phpinfo();3、测试mysql 链接修改 index.php<?php//echo phpinfo();$dbms="mysql"; //数据库类型$host="your_mysql"; //数据库主机名,此处写mysql 容器的名字$dbport = "3306";$dbName="mysql"; //使用的数据库$user="root"; //数据库连接用户名$pass="123456"; //对应的密码$dsn="$dbms:host=$host;port=$dbport;dbname=$dbName";try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "successful<br/>"; //你还可以进行一次搜索操作 // foreach ($dbh->query("SELECT * from user") as $row) { // print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 // } $dbh = null;} catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>");}访问ip , 到正确的输出,就证明我们的配置成功了。最后注意:很多人在学Java高级过程中难免会遇到各种问题解决不了。为此我建了个裙 783802103,里面很多架构师一起交流解答,没基础勿进哦!本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理docker下如何搭建MySQL+php-fpm+nginx容器环境,本文详解标签:名称-name测试数据csharpcatch题解fastcgidata-目的
2023-08-04 04:31:101

怎么关闭docker-proxy

看dockerfile:FROMalpine:latestMAINTAINERalexalexwhen@gmail.comRUNapk--updateaddnginxCOPY./usr/share/nginx/htmlEXPOSE80CMD[“nginx”,“-g”,“daemonoff;”]极简化的利用dockerfile和base镜像和github的特性,能少一句就少一句,动动手试一下...
2023-08-04 04:31:181

docker怎么在容器mysql写数据

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下[plain] view plain copy print?FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN yum install -y mysql-server mysql RUN /etc/init.d/mysqld start && mysql -e "grant all privileges on *.* to "root"@"%" identified by "letmein";"&& mysql -e "grant all privileges on *.* to "root"@"localhost" identified by "letmein";"&& mysql -u root -pletmein -e "show databases;" EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]
2023-08-04 04:31:271

为什么杂交水稻的研发非常艰难?

分类: 教育/科学 >> 科学技术 问题描述: 我所看到报道袁隆平的介绍,都在说杂交稻研发非常艰难,但是都语焉不详地谈了几句就转向介绍种植杂交稻的巨大利益。 为什么这种具有重大利益的项目,全世界的研发力量却长期没有什么很大的成果呢?是和水稻这种物种本身的特性有什么相关么? 袁隆平的三系杂交稻中的不育系、保持系、恢复系分别具体是什么意思? 解析: 三系即不育系,保持系和恢复系,是杂交育种的一种技术方法,通过三系配套,可以使作物的杂种优势得到充分利用,从而培育出既高产又抗病虫害的作物新品种.我国的杂交水稻就是采用这个方法获得突破的.同样,棉花具有明显的杂种优势,但由于始终未能解决细胞质不育引起减产的瓶颈问题,国内外三系杂交棉研究一直没有取得大的进展。============================== 所谓三系是:①雄性不育系。雌蕊发育正常,而雄蕊的花粉退化或败育,不能自花授粉结实。②保持系。雌雄蕊发育正常,将其花粉授予雄性不育系的雌蕊,不仅可结成对种子,而且播种后仍可获得雄性不育植株。③恢复系。其花粉授予不育系的雌蕊,所产生的种子播种后,长成的植株又恢复了可育性。 =============================== 雄性不育系(male sterile line) 来源:生命经纬 雌雄同株植物中,雄蕊发育不正常,不能产生有功能的花粉,但它的雌蕊发育正常,能接受正常花粉而受精结实,并能将雄性不育性遗传给后代的植物品系。雄性不育一般可分为3种类型。(1)细胞质雄性不育型,简称质不育型,表现为细胞质遗传。通常以单一的细胞质基因S和N分别代表雄性不育和雄性可育。用可育株花粉给雄性不育株雌蕊授粉,能正常结实,但F1植株仍表现为雄性不育的母体性状,因而不能自交产生F2,农业生产上不能利用。(2)细胞核雄性不育型,简称核不育型,表现为细胞核遗传,雄性不育性大多为一对隐性基因(m *** s)所控制,正常可育性为相对的显性基因(MsMs)所控制。雄性不育株与正常株杂交,F1植株为雄性可育(MsMs);F1自交产生的F2,可育株与不育株之比为3∶1,难以用普通方法保持雄性不育系,在农业生产上也不可能广泛利用。(3)核-质互作不育型,表现为核-质互作遗传。不但需要细胞质有不育基因S,而且需要细胞核里有纯合的不育基因(rfrf),二者同时存在,方能使植株表现为雄性不育。如胞质基因为可育N,则不论核基因是可育(RfRf)还是不育(rfrf),都表现为雄性可育。同样,如核里具有可育基因(RfRf)或(Rfrf),则不论胞质基因是可育N还是不育S,也都表现为雄性可育。这种由核-质互作形成的雄性不育系,其遗传组成为S(rfrf),不能产生正常的花粉,但可作为杂交母本。由于能找到保持系N(rfrf)〔用它与不育系杂交,所产生的F1仍能保持雄性不育,即:S(rfrf)()×N(rfrf)()→S(rfrf)(F1)(不育)〕并能接受恢复系S(RfRf)或N(RfRf)〔用它们与不育系杂交,所产生的F1都是可育的,即:S(rfrf)()×S(RfRf)→S(Rfrf)(F1)(可育),或S(rfrf)()×N(RfRf)→S(Rfrf)(F1)(可育)〕的花粉,使F1恢复为雄性可育,F1植株自交产生F2,所以在农业生产上可以广泛应用。雄性不育系可以免除人工去雄,节约人力,降低种子成本,还可保证种子的纯度。目前水稻、玉米、高粱、洋葱、蓖麻、甜菜和油菜等作物已经利用雄性不育系进行杂交种子的生产;对其他作物的雄性不育系,也正在进行广泛的研究。 ------------------------------ 保持系(maintainerline) 来源:生命经纬 当作为父本与不育系杂交时,能使F1保持雄性不育性的植物品系。保持系的遗传组成为N(rfrf),不育系的遗传组成为S(rfrf),它们杂交后所产生的F1仍然是不育的即:S(rfrf)()×N(rfrf)()→S(rfrf)(F1)(不育)。为此,保持系的细胞核必须具有与不育系一样的纯合不育基因,即rfrf,而细胞质则具有能育基因N。这样,保持系的雄性器官仍能正常发育并自交结实,又能作为父本与不育系杂交,使不育系的雄性不育性不断遗传下去,所以保持系是不育系赖以传代的必不可少的父本品系。农业上利用的保持系一般都与不育系属于同一品种。 -------------------------------------- 恢复系(restoring line) 来源:生命经纬 当作为父本与不育系杂交时,能使F1恢复为雄性可育且能正常结实的植物品系。恢复系的遗传组成为S(RfRf)或N(RfRf)。由于核遗传起主导作用,故不论胞质基因是不育(S)还是能育(N),它们均表现为雄性可育。用它们与不育系杂交,F1都是杂合可育的,即:S(rfrf)()×S(RfRf)()→S(Rfrf)(F1)(可育),或S(rfrf)()×N(RfRf)()→S(Rfrf)(F1)可育。就是说,恢复系不仅本身是雄性可育的,而且能使不育系产生的F1恢复为雄性可育。通常有众多的品系可使同一个不育系恢复为雄性可育,农业生产上应选择恢复性能强、杂种具有较高的自交结实率、有较好的杂种优势、增产幅度较大的品系作为恢复系。为此,常从与不育系地理距离远、生态型不同、性状差别大的品种或品系中经过测交选出具有生产价值的作为恢复系(见不育系)。 水稻不育系、保持系和恢复系是怎么回事? qhdcl.heagri.gov/default3x?id=2085
2023-08-04 04:31:371

shell脚本中怎么实现:暂停,按键继续?

1、其中 yum install tomcat 执行过程中需要用键盘输入两次字符”y”以便确认选项,Dockerfile 脚本命令如下。2、FROM centos MAINTAINER quicmous "xuyeping@yeah.net"。3、RUN yes y | head -2 | yum install tomcat -y RUN echo "Hi, I am in your container"EXPOSE 80。4、其中 yes 命令可以无限重复产生其后面的字符”y”,head 命令只选择其中两次重复输入,也就是两个字符”y”。命令行。5、yes y | head -2 | yum install tomcat -y,可以自动完成全部操作,中间过程不需要人工干预。
2023-08-04 04:31:461

Docker如何创建镜像?怎么修改,上传镜像

初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap  epel6的源提供febootstrap的RPM包  yum install docker-io febootstrap -y  service docker start  chkconfig docker --level35 on复制代码  制作CentOS6.6镜像目录  febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base   <a href="http://centos.ustc.edu.cn/centos/6.6/os/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/os/x86_64/</a> -u <a href="http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/</a>复制代码  -i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)   centos6 表示镜像的版本说明   base 表示生成的镜像目录   后面之后了系统安装源和更新源为USTC  安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件  进入base目录等于进入镜像的根目录  [root@image ~]# cd base/  [root@image base]# ls  bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var复制代码  可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等  把base目录把所有文件打包成二进制文件后导入docker创建为镜像  cd ~/root/base/ && tar -c . | docker import - centos6:base复制代码  docker images 可以查看镜像的信息  一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像  cat Dockerfile  FROM centos6:base  MAINTAINER Lion "lioncui@163.com"  VOLUME /var/lib/mysql  RUN yum install mysql-server mysql -y  RUN echo -ne "NETWORKING=yes\nHOSTNAME=mysql" > /etc/sysconfig/network  RUN echo -ne "bind-address = 0.0.0.0\ndefault-storage-engine=innodb\ninnodb_file_per_table\ncollation-server=utf8_general_ci\ninit-connect="SET NAMES utf8"\ncharacter-set-server = utf8" > insert  RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert  RUN echo -ne "/usr/bin/mysql_install_db\n/usr/bin/mysqld_safe" >> /opt/mysql_start  RUN chmod 777 /opt/mysql_start  ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:  WORKDIR /opt  EXPOSE 3306  CMD /bin/sh -c mysql_start复制代码  FROM 声明以centos:base镜像为基础   MAINTAINER 声明镜像的维护者信息   VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录)   由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录   RUN 在镜像中执行安装mysql   在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件   在my.cnf配置文件插入一些修改配置   创建启动脚本   声明环境变量   制定默认工作目录   EXPOSE 声明容器需要暴露的端口号  CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务  根据Dockerfile创建mysql服务镜像  docker build --rm=true -t mysql:frist .  查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像
2023-08-04 04:32:361

如何交互式地创建一个Docker容器

创建一个安全的Docker基镜像的方法** 构建一个Java环境基镜像 **正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash每个Dockerfile第一个指令都是指定它的父级容器,通常是用于继承,在我们的例子中是<code>alpine:latest</code>:shFROM alpine:latestMAINTAINER cSphere <docker@csphere >RUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]```好了,现在我们构建容器:sh$ docker build -t my-java-base-image >---> Running in 63433312d77e---> bfe94713797aRemoving intermediate container 63433312d77e... 省略若干行Step 4 : CMD /bin/bash---> Running in d2291684b797---> ecc443d68f27Removing intermediate container d2291684b797Successfully built ecc443d68f27并且运行它:sh$ docker run --rm -ti my-java-base-imagebash-4.3#成功了!我们有了一个运行着bash的Alpine Linux。
2023-08-04 04:33:282

怎样创建docker.list文件

如何使用Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:docker build -t edwardsbean/centos6-jdk1.7 .Dockerfile关键字如何编写一个Dockerfile,格式如下:# CommentINSTRUCTION argumentsFROM基于哪个镜像RUN安装软件用MAINTAINER镜像创建者CMDcontainer启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:Dockerfile:CMD echo hello world运行一下试试:edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmdhello world一旦命令匹配:edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbeanhello edwardsbeanENTRYPOINTcontainer启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条ENTRYPOINT没有CMD的可替换特性USER使用哪个用户跑container如:ENTRYPOINT ["memcached"]USER daemonEXPOSEcontainer内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:docker run -d -p 127.0.0.1:33301:22 centos6-sshcontainer ssh服务的22端口被映射到主机的33301端口ENV用来设置环境变量,比如:ENV LANG en_US.UTF-8ENV LC_ALL en_US.UTF-8ADD将文件<src>拷贝到container的文件系统对应的路径<dest>所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0如果文件是可识别的压缩格式,则docker会帮忙解压缩如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。比如:docker build github.com/creack/docker-firefoxdocker-firefox目录下必须有Dockerfile和要ADD的文件注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file.ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。VOLUME可以将本地文件夹或者其他container的文件夹挂载到container中。WORKDIR切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效ONBUILDONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
2023-08-04 04:33:421

怎么关闭dockerfile里面expose的端口

看dockerfile:FROMalpine:latestMAINTAINERalexalexwhen@gmail.comRUNapk--updateaddnginxCOPY./usr/share/nginx/htmlEXPOSE80CMD[“nginx”,“-g”,“daemonoff;”]极简化的利用dockerfile和base镜像和github的特性,能少一句就少一句,动动手试一下,这样build出来,整个镜像不超过10M,回过头来看看前面的镜像,光一个ubuntu得多大啊,实在是居家必备。
2023-08-04 04:33:501

docker容器内怎么连接外部的mysql

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下[plain] view plain copy print?FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN yum install -y mysql-server mysql RUN /etc/init.d/mysqld start && mysql -e "grant all privileges on *.* to "root"@"%" identified by "letmein";"&& mysql -e "grant all privileges on *.* to "root"@"localhost" identified by "letmein";"&& mysql -u root -pletmein -e "show databases;" EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]-
2023-08-04 04:34:101

docker commit和docker file的区别

制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中
2023-08-04 04:34:181

docker容器内怎么连接外部的mysql

如果将来数据库服务也在容器中提供,建议使用link的方式,代码中使用
2023-08-04 04:34:282

修理工用英语怎么说

问题一:汽车修理工用英文怎么说 汽车修理工 [词典] automobile mechanic; garageman; [例句]这个汽车修理工把那辆旧汽车修好了,并把它卖掉,赚了一些钱。 The garage man fixed up the old car and sold it at a profit. 问题二:维修工英语怎么写 maintenance man maintainer maintenance worker 谢谢,希望帮到你 问题三:修理用英文怎么说????? repair或者fix 问题四:汽车修理工四级用英语翻译,怎么翻译 这样翻译Automobile mechanic level 4. 问题五:维修用英文怎么说 service 英 [?s?:v?s] 美 [?s?:rv?s] n. 服役;服务,服侍;服务业;维修服务 vt. 检修,维修;向…提供服务;保养;满足需要 adj. 服务性的;耐用的;服现役的 词汇难度:高考 / 考研 / IELTS / BEC 第三人称单数: services 复数: services 现在分词: servicing 过去式: serviced 过去分词: serviced 双语例句 Britain still boasts the cheapest postal service 英国仍拥有最便宜的邮政服务系统。 问题六:修理与修好 用英语分别怎么说例如:The eq 修理与修好的英文翻译_百度翻译 修理与修好 Repair and repair repair_百度翻译 repair 英[r??pe?(r)] 美[r??per] vt. 修理; 纠正; 恢复; 弥补; n. 修理; 修理工作; 维修状态; 经修理的东西; [例句]Gold *** ith has repaired the roof to ensure the house is wind-proof 戈德史密斯修理了屋顶,以确保房屋能够抗风。 [其他] 第三人称单数:repairs 复数:repairs 现在分词:repairing过去式:repaired 过去分词:repaired 问题七:修理电脑用英语怎么翻译 repair the puter 或者mend the puter 问题八:维修用英文怎么说 service maintain repair
2023-08-04 04:34:441

如何使用docker来制作我现在正在使用的系统的镜像

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中
2023-08-04 04:34:521

linux 环境下 安装软件 报错 查看错误 wrong error 该如何处理

有错会退出,会在当前目录下生成 config.log ,vim 可直接查看.附:[root@s02 csft-3.1]# ./configurechecking build environment--------------------------checking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for gawk... gawkchecking whether make sets $(MAKE)... nochecking whether to enable maintainer-specific portions of Makefiles... nochecking for python... /usr/bin/pythonchecking for python version... 2.6checking for python platform... linux2checking for python script directory... ${prefix}/lib/python2.6/site-packageschecking for python extension module directory... ${exec_prefix}/lib64/python2.6/site-packageschecking for compiler programs------------------------------checking whether to compile debug version... nochecking for gcc... nochecking for cc... nochecking for cl.exe... noconfigure: error: no acceptable C compiler found in $pathSee `config.log" for more details. #这里会有提示的[root@02 csft-3.1]#
2023-08-04 04:35:131