镜像容器技术学习--Docker(1)

目录

何为镜像,何为容器:

Docker技术:

Docker安装:

使用Dockerfile构建镜像

Dockerfile文件解析

使用Docker run 命令创建容器

使用容器构建镜像

常用Docker指令

镜像创建:

镜像删除:

容器删除:

查看镜像列表:

查看容器列表:

常用Shell指令

 


最近朋友参加了天池AI算法竞赛,其中需要使用Docker容器镜像技术进行“执行环境+代码”的封装与提交,因此临时学习了Docker技术相关知识,在此进行学习笔记。

何为镜像,何为容器:

镜像(Image)
镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。
从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器(Container)
容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库(Repository)
仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
————————————————
原文链接:https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81044217

Docker技术:

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。----引自百度百科

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker安装:

Windows平台安装教程:https://www.runoob.com/docker/windows-docker-install.html

CentOS平台安装教程:https://www.runoob.com/docker/centos-docker-install.html

使用Dockerfile构建镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile文件解析

#仅详细列出部分常用指令,其余未展开指令用法,参见:https://www.runoob.com/docker/docker-dockerfile.html

FROM:

基于底层镜像构建(定制的镜像都是基于 FROM 的镜像)

ENV:

设置环境变量

ARG:

构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效构建好的镜像内不存在此环境变量。构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

格式:

ARG <参数名>[=<默认值>]

COPY:

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

ADD:

RUN:

用于执行后面跟着的命令行命令。有以下两种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

CMD:

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

ENTRYPOINT:

VOLUME:

EXPOSE:

WORKDIR:

ONBUILD:

 

使用Docker run 命令创建容器

Docker run :创建一个新的容器并运行一个命令

语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

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

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

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

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

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --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: 四种类型;

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

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

  • --volume , -v: 绑定一个卷

其中,-v指令用于挂载目录,是实现容器于宿主机之间文件交互的桥梁。语法:

Docker run -v 宿主机目录(绝对路径):虚拟文件系统路径 Image...

#注意:对于windows宿主机,宿主机挂载目录必须在users/目录下,与users目录平级及以上均无法识别挂载
 

使用容器构建镜像

除使用Dockerfile构建镜像的方法外,还可以通过已有容器构建镜像。语法:

docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行

常用Docker指令

镜像创建:

docker build [OPTIONS] PATH | URL | -

OPTIONS:

  • --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,"-1"表示不限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 rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS:

  • -f :强制删除;

  • --no-prune :不移除该镜像的过程镜像,默认移除;

容器删除:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS:

  • -f :通过 SIGKILL 信号强制删除一个运行中的容器。

  • -l :移除容器间的网络连接,而非容器本身。

  • -v :删除与容器关联的卷。

查看镜像列表:

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS:

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

  • --digests :显示镜像的摘要信息;

  • -f :显示满足条件的镜像;

  • --format :指定返回值的模板文件;

  • --no-trunc :显示完整的镜像信息;

  • -q :只显示镜像ID。

查看容器列表:

docker ps [OPTIONS]

OPTIONS:

  • -a :显示所有的容器,包括未运行的。

  • -f :根据条件过滤显示的内容。

  • --format :指定返回值的模板文件。

  • -l :显示最近创建的容器。

  • -n :列出最近创建的n个容器。

  • --no-trunc :不截断输出。

  • -q :静默模式,只显示容器编号。

  • -s :显示总的文件大小。

更多docker指令,参见:https://www.runoob.com/docker/docker-command-manual.html

常用Shell指令

#进入目标目录
cd PATH  

#进入上层目录
cd ..

#获取当前目录
pwd

#编辑当前目录下的文件
vim filename

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值