创建自己的docker镜像

文摘   科学   2024-05-17 17:37   北京  

什么是Docker?

Docker 是 Moby 项目的一个子项目,是一个用于在宿主机和云服务器上构建、运行和管理容器的软件框架。作为一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,这个容器不仅包含了代码,还包括运行环境、依赖库和配置文件等必需资源,Docker使用轻量级虚拟化技术,使得容器具有快速启动和低资源开销的特点,此外,基于linux内核的隔离技术和沙箱机制,能够确保容器之间互不干扰。

容器在docker中如同货轮上的集装箱一般互相独立、彼此隔离

什么是Dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一系列命令和参数构成的脚本,并且支持以 # 开头的注释行,Dockerfile中的指令具有特定的书写和使用规则:

  1. 每条保留的指令都必须是大写字母且后面要跟随至少一个参数

  2. 指令按照从上到下的顺序执行,并且每条指令都会创建一个新的镜像层


Dockerfile中的常用指令:

指令说明
FROM基础镜像,当前的镜像是基于哪个镜像的,意味着继承
LABEL  MAINTAINER镜像维护者的姓名和邮箱地址
RUN容器构建时需要运行的命令
CMD指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker  run之后的参数替换
EXPOSE当前容器对外暴露的端口
ENV用来在构建镜像过程中设置环境变量
ADD将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 
ENTRYPOINT指定一个容器启动时要运行的命令ENTRRYPOINT和CMD一样,都是在指定容器启动程序及参数
VOLUME容器数据卷,用于数据保存和持久化工作
USER指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。
WORKDIR指定在创建容器后,终端默认登录的进来工作目录
ONBUILD当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发


一个简单的Dockerfile文件

Docker基础使用

  • docker build 命令用于使用 Dockerfile 创建镜像

docker build -t 镜像名:tag .  #docker duild的基础语法,-t后接镜像名称与版本号,根据当前目录下的Dockerfile构建镜像

其他参数说明:

--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
  • docker search指令用于 从Docker Hub查找镜像
docker search 镜像名称 #简单使用

其他可选参数:

--automated :只列出 automated build类型的镜像;

--no-trunc :显示完整的镜像描述;

-f <过滤条件>:列出收藏数不小于指定值的镜像。

  • docker pull指令用于从镜像仓库中拉取或者更新指定镜像

docker pull 镜像名:版本号 #简单使用

可选参数:

-a :拉取所有 tagged 镜像

--disable-content-trust :忽略镜像的校验,默认开启

  • docker load 用于导入镜像压缩包

docker load 镜像包 #简单使用

可选参数:

--input , -i : 指定导入的文件,代替 STDIN。

--quiet , -q : 精简输出信息。

  • docker run 运行docker镜像

docker run -it --rm --name 容器名称 -v 载入的目录:容器中的目录 镜像名称#简单使用的一些参数,-it表示交互式的打开容器,-v将指定的目录挂载到容器中,--name为容器进行命名,--rm在使用结束后删除容器

可选参数:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;|id>

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

参考资料:

docker工具视频课程:https://bdtcd.xetslk.com/s/3Rcvt0

https://blog.csdn.net/Eternity_zzh/article/details/126616526

https://www.runoob.com/docker/docker-command-manual.html


更多生物信息分析课程

生信课堂
生信笔记
 最新文章