前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >制作镜像的帮手-Dockerfile

制作镜像的帮手-Dockerfile

原创
作者头像
懒人的小脑
修改于 2020-01-07 09:17:00
修改于 2020-01-07 09:17:00
2.3K0
举报

为什么需要 Dockerfile

  • 公共容器不符合项目需求;
  • 自研系统没有公共镜像。

制作镜像的方法

基于容器

Dockerfile

Dockerfile 是一个文本文件包含了构建一个镜像的所有命令。

Dockerfile Format

  • format
  • Commnet 注释
  • INSTRUCTION arguments 指令和参数(指令本身并不区分大小写,建议使用大写)
  • dockerfile 中的指令是顺序执行的
  • 第一个非注释行必须是 FROM  指令,用来指定 Base Image
  • Dockerfile 需要一个专用的工作目录,并且 Dockerfile文件名首字母必须大写,镜像需要的任何文件都需要放在 Dockerfile 专用的工作目录下。
  • .dockerignore  文件中定义的文件将不会被打包至镜像中
  • 在 Dockerfile json数组中需要使用双引号 "" 

Dockerfile Instructions

FROM

FROM 指令是最重要的一个并且必须为 Dockerfile 文件的第一个非注释行指令,用于为镜像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。

实践中,基准镜像可以是任何可用镜像文件,默认情况下,Dockerfile 会在 docker 主机上查找指定的镜像文件,当镜像文件不存在时,从 Docker Hub Registry 上拉取所需的镜像文件。如果找不到指定的镜像文件,docker build 会返回一个错误信息。

代码语言:txt
AI代码解释
复制
FROM <repository>[:<tag>] 或

FROM <repository>@<digest>
  • <repository>:指定作为 base image 的名称
  • <tag>:base image 的标签,可选项,默认为 latest

MAINTAINTER(deprecated已废弃)

用于让 Dockerfile 制作者提供制作者本人的详细信息。Dockerfile 并不限制 MAINTAINER 指令可出现的位置,但推荐其放置于 FROM 指令之后

代码语言:txt
AI代码解释
复制
MAINTAINER <author's detail>

参数说明

<author's detail>:任何文本信息,约定俗成地使用作者名称及邮件地址

LABEL

LABEL 指令可以对镜像添加相关的元数据。

代码语言:txt
AI代码解释
复制
LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 一个 LABEL 是一个键值对,一个 LABEL 指令也可以同时添加多个键值对,一个 Dockerfile 可以有多个 LABEL 指令;
  • value 中包含空格需要用引号;

COPY

用于从 Docker 主机复制文件至创建的新镜像文件中。

代码语言:txt
AI代码解释
复制
COPY <src> ... <dest> 或

COPY ["<src>",..."<dest>"]

参数说明

  1. <src>:要复制的源文件或目录,支持使用通配符
  2. <dest>:目标路径,即正在创建的 image 的文件系统路径;建议为<dest>使用绝对路径,否则 COPY 指令则以 WORKDIR 为起始路径

文件复制准则

  1. <src>必须是 build 上下文中的路径,不能是其父目录中的文件;
  2. 如果<src>是目录,则其内部文件或子目录会被自动递归复制,但<src>目录本身并不会被复制;
  3. 如果制定了多个<src>或在<src>中使用了通配符,则<dest>必须是一个目录,且**必须以** / **结尾**;
  4. 如果<dest>不存在,将会自动创建,包括其父目录路径;

示例

复制单个文件

代码语言:txt
AI代码解释
复制
# Description:myimage

FROM busybox:latest

MAINTAINER "Manson <chrisma1209@gmail.com>"

# LABEL maintainer="Manson <chrisma1209@gmail.com>"

COPY index.html /data/web/html/

docker build -t tinyhttpd:v0.1-1 /root/myimage 

docker image ls 

docker run --rm --name tinyweb1 tinyhttpd:v0.1-1 cat /data/web/html/index.html 

此命令用于测试制作的镜像是否已成功拷贝文件,并且修改容器启动运行的默认命令,修改为 cat 命令,cat 命令执行结束,容器结束并删除。这是测试容器时的常用方法。

复制目录

代码语言:txt
AI代码解释
复制
# Description:myimage

FROM busybox:latest

MAINTAINER "Manson <chrisma1209@gmail.com>"

# LABEL maintainer="Manson <chrisma1209@gmail.com>"

COPY index.html /data/web/html/

COPY yum.repos.d /etc/yum.repos.d/ #仅实验用,因为每一条指令都会生成一个新的文件系统层
代码语言:txt
AI代码解释
复制
cp -r /etc/yum.repos.d/ /root/myimage

tree -L 2       

.

├── Dockerfile

├── index.html

└── yum.repos.d

    ├── CentOS-Base.repo

    ├── CentOS-CR.repo

    ├── CentOS-Debuginfo.repo

    ├── CentOS-fasttrack.repo

    ├── CentOS-Media.repo

    ├── CentOS-Sources.repo

    ├── CentOS-Vault.repo

    ├── docker-ce.repo

    ├── epel.repo

    ├── epel-testing.repo

    └── google-cloud.repo

docker build -t tinyhttpd:v0.1-2 /root/myimage

docker image ls

docker run --rm --name tinyweb1 tinyhttpd:v0.1-2 ls /etc/yum.repos.d

ADD

ADD 指令类似于 COPY指令,ADD 支持使用 TAR 文件和 URL 路径

代码语言:txt
AI代码解释
复制
ADD <src> ... <dest> 或

ADD ["<src>",..."<dest>"]

说明

  1. 同 COPY 指令;
  2. 如果<src>为 URL 且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;如果<dest>以/结尾,则文件名 URL 指定的文件将被直接下载并保存为<dest>/<filename>;
  3. 如果<src>是一个本地文件系统上的压缩格式的 tar 文件,它将被展开为一个目录,其行为类似于 tar -x 命令,通过 URL 获取的 TAR 文件不会被自动展开;
  4. 如果<src> 有多个,或其简介或直接使用了通配符,则<dest> 必须是一个以/结尾的目录路径;如果<dest> 不以/结尾,则其被视作为一个普通文件,<src>的内容将被直接写入到<dest>。

示例

代码语言:txt
AI代码解释
复制
# Description:myimage

FROM busybox:latest

MAINTAINER "Manson <chrisma1209@gmail.com>"

# LABEL maintainer="Manson <chrisma1209@gmail.com>"

COPY index.html /data/web/html/

COPY yum.repos.d /etc/yum.repos.d/

#ADD http://nginx.org/download/nginx-1.15.2.tar.gz /usr/local/src/ #URL 下载不会展开

ADD nginx-1.15.2.tar.gz /usr/local/src/ #宿主机上先下载好,在镜像文件系统中会自动展开
代码语言:txt
AI代码解释
复制
# 使用 URL 下载 tar 文件包不会被自动解压

docker build -t tinyhttpd:v0.1-3 /root/myimage/

docker run --rm --name tinyweb1 tinyhttpd:v0.1-3 ls /usr/local/src

# 使用本地的 tar 文件包,会被自动展开

wget http://nginx.org/download/nginx-1.15.2.tar.gz

docker build -t tinyhttpd:v0.1-4 /root/myimage/

docker run --rm --name tinyweb1 tinyhttpd:v0.1-4 ls /usr/local/src/nginx-1.15.2

WORKDIR

用于为 Dockerfile 中所有的 RUN、CMD、ENTERPOINT、COPY和 ADD 指令设定工作目录

代码语言:txt
AI代码解释
复制
WORKDIR <dirpath>

在 Dockerfile 文件中,WORKDIR 指令可出现多次,其路径也可以为相对路径,不过相对此前一个 WORKDIR 指令指定的路径。

另外,WORKDIR 也可以调用由 ENV 指定定义个变量,如 WORKDIR $STATEPATH 

示例

代码语言:txt
AI代码解释
复制
...

WORKDIR /usr/local/

ADD nginx-1.15.2 ./src/ #./目录就使用的WORKDIR 定义个目录

...

VOLUME

用于在 image 中创建一个挂载点目录,以挂载 Docker host 上的卷或其他容器上的卷。

代码语言:txt
AI代码解释
复制
VOLUME <mountpoint> 或

VOLUME ["<mountpoint>"]

如果挂载点目录路径下此前有文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中。

**示例**

代码语言:txt
AI代码解释
复制
FROM busybox:latest

ADD nginx-1.15.2.tar.gz /usr/local/src/

VOLUME /data/mysql/
代码语言:txt
AI代码解释
复制
docker build -t tinyhttpd:v0.1-5 /root/myimage/

docker run --rm --name tinyweb1 tinyhttpd:v0.1-5 mount 或

docker run --rm --name tinyweb1 tinyhttpd:v0.1-5 sleep 60

docker inspect

EXPOSE

用于为容器打开指定要监听的端口实现与外部通信

代码语言:txt
AI代码解释
复制
EXPOSE <port>[/<protocol>] [<port>[/<protocol>]...]

参数说明

  • <protocol>用于指定传输层协议,可为 tcp 或 udp 二只之一,默认为 tcp 协议

EXPOSE 指令可以一次指定多个端口,如 EXPOSE 11211/udp 11211/tcp 

需要注意的是,EXPOSE 指定是待暴露的端口,运行容器默认不会暴露端口,使用 docker run 命令-P 选项后,会暴露 Dockerfile 中指定的暴露端口。

示例

代码语言:txt
AI代码解释
复制
# Description:myimage

FROM busybox:latest

MAINTAINER "Manson <chrisma1209@gmail.com>"

# LABEL maintainer="Manson <chrisma1209@gmail.com>"

COPY index.html /data/web/html/

COPY yum.repos.d /etc/yum.repos.d/

#ADD http://nginx.org/download/nginx-1.15.2.tar.gz /usr/local/src/

ADD nginx-1.15.2.tar.gz /usr/local/src/

VOLUME /data/mysql/

EXPOSE 80/tcp
代码语言:txt
AI代码解释
复制
docker run --name tinyweb1 --rm tinyhttpd:v0.1-6 /bin/httpd -f  -h /data/web/html #前台运行 docker 容器

docker inspect tinyweb1 #查看当前容器的 IP地址

curl 容器的 IP地址 #验证端口是否暴露,可以访问网页因为容器和宿主机在一个桥上,默认不会暴露端口

docker port tinyweb1

docker kill tinyweb1 #停止前台运行的容器

docker run --name tinyweb1 --rm -P tinyhttpd:v0.1-6 /bin/httpd -f  -h /data/web/html #-P 选项表示暴露应该暴露的端口

docker port tinyweb1

ENV

用于为镜像定义所需的环境变量,并可被 Dockerfile 文件中**位于其后**的其他指令如 ENV、ADD、COPY 等所调用。调用格式为 $variable\_name 或 ${variable\_name} 

使用环境变量替换 (Environment replacement) 引用变量 $variable_name 或${variable_name} ${variable:-word}:变量默认值,如果 variable 值为空或未设置,就使用 word 作为变量值。 ${variable:+word}:变量有值就显示为 word,变量无值,就显示无值。

代码语言:txt
AI代码解释
复制
ENV <key><value>或

ENV <key>=<value>...

说明

  1. 在第一种格式中,<key>之后的所有内容均会被视作其<value>的组成部分,因此,一次只能设置一个变量;
  2. 第二种格式可以一次设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<value>中包含空格,可以以反斜线(\)进行转义,也可以通过对<value>加引号进行标识;另外,反斜线也可以用于续行。
  3. 定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能。

示例

代码语言:txt
AI代码解释
复制
FROM busybox:latest



ENV DOC\_ROOT /data/web/html/ \

    WEB\_SERVER\_PACKAGE="nginx-1.15.2"



COPY index.html ${DOC\_ROOT:-/data/web/html/}

ADD ${WEB\_SERVER\_PACKAGE}.tar.gz /usr/local/src/

...

变量值生效的阶段

image.png
image.png

在容器启动时,可以修改 ENV 的值,但是有些 ENV 的值是不会影响 Dockerfile 中定义的 ENV值,这里要区分 ENV 值的生效阶段,在第一阶段docker build生效的 ENV 值在容器启动前操作,不会被影响。

RUN

RUN 指令运行于第一阶段 docker build(镜像文件构建过程)。RUN命令可执行的操作取决于基础镜像支持的命令数量。

代码语言:txt
AI代码解释
复制
RUN <command> 或

RUN ["<executable>","<param1>", "<param2>"]

说明

  1. 在第一种格式中,<command>通常是一个 shell 命令,且以 /bin/sh -c 来运行它,这意味着此进程在容器中的 PID 不为 1,不能接收 Unix 信号,因此,当使用 docker stop <container> 命令停止容器时,此进程接收不到 SIGTERM 信号;
  2. 第二种格式中的参数是一个 JSON 格式的数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命苦的选项或参数;然而,此种格式的命令不会以 /bin/sh -c 来发起,因此常见的 shell 操作如变量替换以及通配符(?,*等)替换不会进行;不过,如果要运行的命令依赖于此类 shell 特性时,可以将其替换为类似下面的格式: RUN ["/bin/sh","-c","executable","paramN"] 
代码语言:txt
AI代码解释
复制
...

ENV WEB\_SERVER\_PACKAGE=nginx-1.15.2

ADD http://nginx.org/download/nginx-1.15.2 /usr/local/src/

RUN cd /usr/local/src/ &&  tar -xf ${WEB\_SERVER\_PACKAGE}.tar.gz && mv nginx-\* webserve

...

CMD

类似于 RUN 指令,运行于第二阶段 docker run(基于 Dockerfile 构建出的新镜像文件启动的容器),需要结合 ENTRYPOINT 使用。

在 Dockerfile 中CMD建议只出现一次,如果出现多次,那么只有最后一个 CMD 有效。

CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过,CMD 指令的命令可以被 docker run 的命令行参数所覆盖。

代码语言:txt
AI代码解释
复制
CMD <command> 或

CMD <"<executable>","<param1>","<param2>"> 或

CMD <"<param1>","<param2>">

参数说明

  • 前两种语法格式的意义同 RUN
  • 第三种语法用于为 ENTRYPOINT 指令提供默认参数

示例

  1. 创建一个新的目录并创建 Dockerfile
代码语言:txt
AI代码解释
复制
FROM busybox:latest

LABEL maintainer="Manson <chrisma1209@gmail.com>" app="httpd"



ENV WEB\_DOC\_ROOT="/data/web/html/"



RUN mkdir -p $WEB\_DOC\_ROOT && echo '<h1>Busybox httpd server.</h1>' > ${WEB\_DOC\_ROOT}/index.html



CMD /bin/httpd -f -h ${WEB\_DOC\_ROOT}

2.创建镜像

代码语言:txt
AI代码解释
复制
docker build -t tinyhttpd:v0.2-1 /root/img2

3.查看镜像信息

代码语言:txt
AI代码解释
复制
docker image inspect tinyhttpd:v0.2-1

...

"Cmd": [

  "/bin/sh",

  "-c",

  "#(nop) ",

  "CMD [\"/bin/sh\" \"-c\" \"/bin/httpd -f -h ${WEB\_DOC\_ROOT}\"]"

...

这里可以看到,容器先启动了/bin/sh,然后在运行 /bin/httpd,就就是说 httpd 是 shell 的子进程

4.运行容器

代码语言:txt
AI代码解释
复制
docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.2-1

即使使用了-it 选项,但是因为没有进入交互式环境,因为 httpd 根本不提供交互式接口

5.进入容器查看进程

代码语言:txt
AI代码解释
复制
docker exec -it tinyweb2 /bin/sh

/ # ps

PID   USER     TIME  COMMAND

    1 root      0:00 /bin/httpd -f -h /data/web/html/

   11 root      0:00 /bin/sh

   16 root      0:00 ps

/ # printenv

WEB\_DOC\_ROOT=/data/web/html/

HOSTNAME=aa6643a0ceaf

SHLVL=1

HOME=/root

TERM=xterm

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

这里有一个问题,不是应该/bin/sh 的 PID是 1 ,而目前 httpd 的进程号为 1,可以接收 docker stop 发送的信号,因为 docker  进行过转换,通过 docker image inspect tinyhttpd:v0.2-1 可以查看。

6.修改 Dockerfile

代码语言:txt
AI代码解释
复制
...

CMD ["/bin/httpd","-f","-h ${WEB\_DOC\_ROOT}"]

这样构建镜像并启动容器,由于并没有创建 sh 子进程,所以也获取不到shell变量的值,因此会报错,找不到路径。所以要修改为:

代码语言:txt
AI代码解释
复制
FROM busybox:latest

LABEL maintainer="Manson <chrisma1209@gmail.com>" app="httpd"



ENV WEB\_DOC\_ROOT="/data/web/html/"



RUN mkdir -p $WEB\_DOC\_ROOT && echo '<h1>Busybox httpd server.</h1>' > ${WEB\_DOC\_ROOT}/index.html



#CMD /bin/httpd -f -h ${WEB\_DOC\_ROOT}



CMD ["/bin/sh","-c","/bin/httpd -f -h ${WEB\_DOC\_ROOT}"]

注意的是-c 后面的参数是一个参数只需要一个对引号,分开写会报错。

ENTRYPOINT

类似 CMD命令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序。与 CMD 不同的是,由 ENTRYPOINT 启动的程序不会被 docker run 命令行指定的参数所覆盖,而且,这些命令行参数会被当做参数传递给 ENTRYPOINT指定的程序。【参数追加】

docker run 命令句的 --entrypoint 选项可以覆盖 ENTRYPOINT 指令指定的程序

代码语言:txt
AI代码解释
复制
ENTRYPOINT <command>

ENTRYPOINT ["<executable>","<param1>","param2"]

说明

  1. docker run 命令传入的命令参数会覆盖 CMD 指令的内容并且附加到 ENTRYPOINT 命令最后作为其参数使用;
  2. Dockerfile文件中也可以存在多个 ENTRYPOINT 指令,但仅有最后一个会生效。
  3. CMD 和 ENTRYPOINT 同时在一个 Dockerfile 时,CMD 指定的参数作为 ENTRYPOINT的参数

示例 1

代码语言:txt
AI代码解释
复制
FROM busybox:latest

LABEL maintainer="Manson <chrisma1209@gmail.com>" app="httpd"

ENV WEB\_DOC\_ROOT="/data/web/html/"

RUN mkdir -p $WEB\_DOC\_ROOT && echo '<h1>Busybox httpd server.</h1>' > ${WEB\_DOC\_ROOT}/index.html

ENTRYPOINT /bin/httpd -f -h ${WEB\_DOC\_ROOT}
代码语言:txt
AI代码解释
复制
docker build -t tinyhttpd:v0.2-5 /root/img2/

#正常运行

docker run --name tinyweb -it --rm -P tinyhttpd:v0.2-5

##正常运行,没有执行 ls 命令,ls 命令作为参数追加到 ENTRYPOINT 指令指定的程序之后

docker run --name tinyweb -it --rm -P tinyhttpd:v0.2-5 ls /data/web/html 

示例 2

  1. 创建目录和 Dockerfile 文件
代码语言:txt
AI代码解释
复制
FROM nginx:1.14-alpine

LABEL maintainer="Simon <chrisma1209@gmail.com>"



ENV NGX\_DOC\_ROOT='/data/web/html/'



ADD index.html ${NGX\_DOC\_ROOT}

ADD entrypoint.sh /bin/



CMD ["/usr/sbin/nginx","-g","daemon off;"]



#先运行/bin/entrypoint.sh 脚本,然后引用 CMD 指定的参数,并替换/bin/entrypoint.sh 进程

#ENTRYPOINT ["/bin/sh","-c","/bin/entrypoint.sh"]

#ENTRYPOINT ["/bin/sh","-c","/bin/entrypoint.sh"]

#ENTRYPOINT ["/bin/sh","-c","ls /bin"]

ENTRYPOINT ["/bin/entrypoint.sh"]
  1. 准备相关文件

entrypoint.sh

代码语言:txt
AI代码解释
复制
#!/bin/sh

#filenname entrypoint.sh

#

cat > /etc/nginx/conf.d/www.conf << EOF

server {

        server\_name $HOSTNAME;

        listen ${IP:-0.0.0.0}:${PORT:-80};

        root ${NGX\_DOC\_ROOT};

}

EOF



exec "$@" #替换当前进程

index.html

代码语言:txt
AI代码解释
复制
<h1>mynginx in docker</h1>
  1. 构建镜像

docker build -t myweb:v0.1-12 /root/mynginx/ 

  1. 运行容器

docker run --name myweb -it --rm -P myweb:v0.1-12 

如果容器运行失败,提示 permission denied,在构建镜像前手动赋予entrypoint.sh执行权限

  1. 验证

docker exec -it myweb /bin/sh 进入容器,查看监听的端口,查看进程,获取网页 wget -O - -q ab04ddac4745 

  1. 传递参数

docker run --name myweb -it --rm -P -e "PORT=8080" myweb:v0.1-12 

为了在不同的环境中使用相同的镜像,通常都是使用 entrypoint 脚本启动,当传入不同的参数来区分在不同环境中使用容器,如区分开发环境、测试环境、生产环境。Dockerfile 中 entrypoint 脚本的作用、意义和参数的传递方式是一个难点,可以在github 上 docker 仓库中多多学习其他镜像Dockerfile 的写法。

USER

用于指定运行 image 时或运行 Dockerfile 中任何 RUN、CMD或 ENTRYPOINT 指令指定程序时的用户名或 UID。

默认情况下,container 的运行用户是 root 用户。

代码语言:txt
AI代码解释
复制
USER <UID>|<USERNAME>

说明

<UID>可以为任意数字,但实践中必须为/etc/passwd 中某用户的有效 UID,否则,docker run 命令将运行失败

HEALTHCHECK

用于指定一个命令检查主进程的工作状态

代码语言:txt
AI代码解释
复制
HEALTHCHECK [OPTIONS] CMD command

HEALTHCHECK NONE

OPTIONS

  • --interval=DURATION(默认 30 秒)
  • --timeout=DURATION(默认 30 秒)
  • --start-period=DURATIPN(默认 0 秒),容器启动时的等待时间,等待后开始健康检查
  • --retries=N(默认 3)

响应值

  • 0:success,容器健康并且可提供服务
  • 1:unhealthy:容器不能正常工作
  • 2:reserverd:没有,可自定义

示例

代码语言:txt
AI代码解释
复制
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/|| exit 1

SHELL

指定默认 shell

STOPSIGNAL

代码语言:txt
AI代码解释
复制
STOPSIGNAL signal

ARG

定义变量,在 docker build 过程中使用的变量。而 ENV 的变量是可以在 docker run 时进行传值的。

ONBUILD

用于在 Dockerfile 中定义一个触发器。Dockerfile 用于 build 镜像文件,此镜像文件亦可作为base image 被另外一个 Dockerfile 用作 FROM 指令的参数,并以之构建的镜像文件。

在后面的这个 Dockerfile 中的 FROM 指令在 build 过程中被执行,将会“触发”创建其 base image 的 Dockerfile 文件中的 ONBUILD 指令定义的触发器。

代码语言:txt
AI代码解释
复制
ONBUILD <INSTRUCTION>

说明

尽管任何指令都可注册成为触发器指令,但 ONBUILD 不能自我嵌套,且不会触发 FROM 和 MAINTAINER 指令。

使用包含 ONBUILD 指令的 Dockerfile 构建的镜像应该使用特殊的标签,如 ruby:2.0-onbuild。

在 ONBUILD 指令中使用的 ADD 或 COPY 指令应该格外小心,因为构建过程中的上下文在缺少指定的源文件时会失败。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
qiime2+lefse的n个解决方案
qiime2 有自带的差异分析工具的(composition ancom),可是,大家已经习惯了一直用的 lefse,于是,把 qiime2 的结果导出进行 lefse 分析,在某种程度上就是一个“刚需”啦!在希望 qiime2 官方或者 lefse 官方做一个 q2-lefse 之前,我们的解决方案有哪几个呢?这里分享下我找到的几个,欢迎补充。
用户1075469
2024/01/15
4500
qiime2+lefse的n个解决方案
SMURF流程之q2-sidle(一)
前面说到Science封面文章用的16S数据分析流程有qiime2的插件版本,可以解决基于matlab MCR standalone版本的报错,于是实践一下!https://github.com/jwdebelius/q2-sidle。conda的安装就不表了,教程挺多的。
用户1075469
2021/03/11
6580
SMURF流程之q2-sidle(一)
qiime2+biom+qiime1获得16S物种丰度
我们知道,不管是16S等扩增子测序,还是宏基因组,最后最重要的结果,就是物种的丰度情况了,qiime2给出的16S丰度结果是一个计数,对于许多软件来说这是可用的,那么如果我们想获得一个直接的百分比数据应该怎样做呢?
用户1075469
2020/06/23
1.8K0
微生物组常用数据库国内备份站点来啦!再也不用为数据库无法下载发愁啦!
每一个微生物学组的研究者在分析数据的时候都会遇上各种数据的问题:做16S分析发现数据库定制格式不会,做宏基因组有参分析发现依赖数据无法下载,宏基因组注释分析时用的NT,NR数据库从NCBI下载太慢了,建软件索引时计算资源不足,甚至要担心有一天国际数据库切断了,我们该从哪里下载数据?
生信宝典
2020/10/10
1.5K0
微生物组常用数据库国内备份站点来啦!再也不用为数据库无法下载发愁啦!
首个宏基因组版本--Qiime2 2023.9发布啦
计划的下一个QIIME 2版本计划于2023年2月发布(QIIME2 2023.12)。
用户1075469
2023/11/01
5330
首个宏基因组版本--Qiime2 2023.9发布啦
新技能Get!宏基因组分析结果导入qiime2分析和可视化
最近读微生态公众号中宏基因组的文章,发现阿童木写的教程,宏基因组的数据可以导入qiime2分析。于是有了发现新大陆的感觉,qiime2是一个优秀的可视化工具,有它在手,分析不愁呀,可是作者并没有给出怎样导入数据的教程,我摸索了一番,基本解决了问题,欢迎交流呀!数据是使用biobakery的流程得到的metaphlan3的结果,如下图所示:
用户1075469
2021/05/20
1.5K0
使用R语言获得16S物种丰度
还是获得16S物种丰度得老问题,最近在一台新机器上安装qiime1,发现有报错,对于这种停止维护的软件,也是正常现象吧,于是想别的办法解决,恰巧最近读R几本R语言的入门书,发现prop.table()这个函数是可以实现相关功能的,于是学习使用下。可能你早已会做这个啦,还是分享一下,看看有没有人需要。
用户1075469
2020/07/27
1.3K0
扩增子分析流程
该 SOP 基于 QIIME2 2020.2,学习之前建议先过一遍 QIIME2 “Moving Pictures” tutorial[1]。
生信菜鸟团
2020/06/17
4.6K0
SAHMI 单细胞宿主-微生物互作分析代码实战
2020年11月29日,拙文《单细胞时代 || 宿主-微生物组相互作用》中,浅谈了在单细胞水平分析宿主细胞与微生物组的相互作用,当时主要参考的文章是:Host-Microbiome Interactions in the Era of Single-Cell Biology。
生信技能树jimmy
2024/06/13
1.8K1
SAHMI 单细胞宿主-微生物互作分析代码实战
QIIME和USEARCH的安装
QIIME是微生物组领域最广泛使用的分析流程,2016年起北亚利桑那大学Gregory Caporaso教授开发了QIIME2。
小汪Waud
2023/02/03
3K0
QIIME和USEARCH的安装
关于 16s 序列的注释算法
16S rRNA 扩增子测序已被广泛应用于微生物组研究,其中一个至关重要的步骤就是对相应序列(OTU 或者 ASV)进行分类学注释。虽然已经有大量的注释算法被开发出来,但是我们最普遍用到的仍是朴素贝叶斯分类器(NBC)。追溯其历史,RDP(Ribosomal Database Project)首先使用了NBC 算法[1]来对序列进行分类注释,证明了16S rRNA 序列可以进行属水平分类。很多研究也证明 NBC 在标记基因序列分类上的效果确实十分稳健,比如 QIIME2 内置的 q2-feature-classifier[2] 分类器。
生信菜鸟团
2021/08/25
1.5K0
关于 16s 序列的注释算法
QIIME2图形界面版(Q2STUDIO)学习笔记二
在装好了q2studio后很困惑,所有的插件都是灰色的,即使切换到有数据的文件夹,一直以为是我的报错($JAVA_HOME找不到)导致的。由于报错,我还尝试了好几个版本进行测试,可是悲剧的是都有问题,于是祭出杀手锏,上虚拟机了哈哈。比conda还要简单,当然性能也就相对差点了。先运行起来学会再说。
用户1075469
2020/03/03
9380
9000字的扩增子背景长文,值得收藏。
大家好,我叫刘永鑫,来自中国科学院遗传与发育生物学研究所,今天很高兴有这次机会为大家来讲扩增子分析系列课程。我本科学习的是微生物学专业,之后又获得了生物信息学博士学位,在短暂的两年博士后科研工作后,留所任工程师,主要负责宏基因组学的数据分析。在过去的两年工作里,主要参与并发表的文章有10余篇,累积影响因子150多分,其中包括一篇Science和两篇Nature Biotechnology。同时还是宏基因组公众号的创始人,在两年多的时间里,分享了400多篇原创文章,写作量超过200万字,阅读量超过1000多万次。我们接下来让大家一次对自己的研究方向,姓名和单位进行简单自我介绍,方便大家的沟通。 很感谢大家对自己基本情况和研究方向的介绍,这对于我下面课程中和重点的突出很在帮助,也希望同行互相认识,多交流和互相帮助。下面我们开始今天的课程,本次为第2天的第1节课,主要介绍扩增子分析的背景知识,右边这个图是来自2016年一篇Nature Protocol的文章,对微生物组近10年的发展进行了总结,我们可以看到从2010年到2016年我们开始对哪些环境对象进行探索,包括极端环境、植物叶片、白蚁、人类肠道、海洋、永久冻土、以及土壤沉积物的研究,这个领域扩展到了我们所能探索的所有地方。
生信宝典
2019/12/10
1.6K0
9000字的扩增子背景长文,值得收藏。
人类微生物组计划 - 宏基因组/16S分析流程 bioBakery
bioBakery是NIH人类微生物组计划实施过程中开发的部分软件和使用教程的集合,主要由哈佛大学的Huttenhower实验室开发。提供了16S, 宏基因组,宏转录组分析的全部流程,并可以生成结果报告。
生信宝典
2018/10/25
4.4K0
人类微生物组计划 - 宏基因组/16S分析流程 bioBakery
ubiome类似数据dada2处理探索3
我简单处理了下otu序列和表,使它们能导入qiime2,应该是一行shell代码解决的,shell水平不行,python来顶了。
用户1075469
2020/03/03
4230
QIIME2 2022.8来啦
有多少小伙伴和我一样,一直期盼着Qiime2更新的,在月末,qiime2新版本终于发布啦!小编敲黑板:
用户1075469
2022/11/08
4580
QIIME2 2022.8来啦
物种分类原理
微生物由于形态微小,数目众多,分类鉴定一直都是一大难题,传统的微生物鉴定方法,主要是根据微生物的表型特征,例如形态学、生理生化学,生态学等特征来推断微生物的系统发育。但是由于微生物形体微小、结构简单等特点,微生物的分类鉴定除了传统的分类方法之外,还必须寻找新的特征作为分类鉴定的依据。分子生物学的发展,使我们不仅可以根据表型特征,而且可以从分子水平上,通过研究和比较微生物乃至整个生物界的遗传型特征,甚至生物的基因组特征来研究生物的进化、发育和分类鉴定。
生信喵实验柴
2023/02/24
9830
物种分类原理
大更新,QIIME 2 2023.5
并行化、断点续分析、输出集合、基于阴性对照识别污染、宏基因组学工作流程(即将推出!)
用户1075469
2023/08/26
3290
大更新,QIIME 2 2023.5
易生信-扩增子教程01-基本概念
距离上次《生信宝典》联合《宏基因组》组织的扩增子分析线下培训结束己经有三个多月了。
生信宝典
2018/08/17
1.3K0
易生信-扩增子教程01-基本概念
宏转录组学习笔记(三)
QIIME(Quantitative Insights Into Microbial Ecology)和MOTHUR是引用最多、应用最广泛的软件。它们都可以用来分析原始测序数据生成OTU/丰度表,并进行不同样本的比较。QIIME2于2018年发布,是一个全新设计和重写的QIIME版本。
用户1075469
2020/09/01
9690
相关推荐
qiime2+lefse的n个解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档