[Docker]Docker官方起步指南学习笔记②——容器及Dockerfile


本学习笔记 Base on ——

>Get Started With Docker<


容器及其相关

容器是一个映像的实例,是APP运行的底层基础。


从Dockerfile构建容器

Dockerfile 定义了容器内的环境,它提供了对硬件及网络的虚拟化接入定义标准,告知Docker复制哪些文件到该环境中及相应的交互方式。

  1. Dockerfile 创建一个环境总是基于某个基准映像,如python:2.7-slim,在编码规范上,提倡所有Dockerfile关键字采用大写
  2. 不提倡将Dockerfile命名为除Dockerfile之外的名字,除非一个文件夹下存在多个Dockerfile文件。若同一目录下存在多个Dockerfile文件,建议采用Dockerfile.secondDockerfile.server等方式命名。
  3. Dockerfile的编写思想,应参照自动化的思想,即无交互式的Docker构建过程。其次,应使用 \ 将过长的命令分行。更多编码规范可>参见此处<

Dockerfile指令

指令列表

1.FROM10.VOLUME
2.MAINTAINER11.USER
3.RUN12.WORKDIR
4.ENV13.ONBUILD
5.COPY14.LABEL
6.ADD15.ARG
7.EXPOSE16.STOPSIGNAL
8.CMD17.HEALTHCHECK
9.ENTRYPOINT18.SHELL
  1. FROM

表示从某个基础映像构建新的映像,其必为整个Dockerfile的第一句有效命令。

FROM <imagesName:tag>

Back

  1. MAINTAINER</>

表示维护者的信息。非必需语句。

MAINTAINER Name <Email>

Back

  1. RUN

用来在Docker的编译环境中运行指定命令,其在shell或exec的环境下执行。
如exec格式:RUN ["程序名","参数1","参数2"]

RUN echo hello-docker

Back

  1. ENV

用于设置环境变量,该变量可在后续任何RUN指令和容器中使用。
ENV <key> <value>

ENV val hello-docker
RUN echo $val

Back

  1. COPY

用来将本地(宿主机)的文件复制到映像的指定路径下。
COPY <本地地址> <映像地址>

COPY /local/path/flie /image/path/file

Back

  1. ADD

与COPY类似,将某个URL地址的资源下载到映像指定位置。

ADD latest.tar.gz /image/path.file

Back

  1. EXPOSE

暴露指定的端口,指明映像/容器中的应用将会侦听某个端口;或用于多容器间的通信。
EXPOSE <端口1> [<端口2>...]

EXPOSE 80

Back

  1. CMD

该指令指明了容器默认的执行指令。一般用于在整个Dockerfile完成所有环境的安装与配置之后的最后一道指令。
CMD ["executable","param1","param2"]
注意:一个Dockerfile只允许使用一次CMD指令,并以最后一个CMD指令为最终需要执行的指令。
另外,docker run命令将会覆盖CMD命令,此时其与ENTRYPOINT的功能相似。如对于下面的代码,若映像名为image-test,当运行docker run image-test echo "new hello world",将会输出"new hello world"而不是"hello ubantu"。

FROM ubuntu
CMD ["echo","hello ubuntu"]

Back

  1. ENTRYPOINT

用于向容器内赋参数,相当于把容器当成一个程序使用。

FROM ubuntu
ENTRYPOINT ["echo"]
docker run image-test "Hello world!"

这时将会输出"Hello world!"
Back

  1. VOLUME

该指令用于向映像/容器内添加设置数据卷,以实现数据的共享、备份、迁移等。
注意:数据卷将会已知存在,知道没有任何容器使用它;此时,它对于宿主机而言还是一个普通文件,不会随着容器的停用而被销毁。
VOLUME ["/data", "/data2"]

FROM ubuntu
VOLUME /app
CMD ["cat", "/app/test.txt"]
docker run --rm -v /app test.txt

将会输出宿主机/app/test.txt中的内容。
Back

  1. USER

指定运行容器时的默认用户(默认为root)。
USER user[:group]
USER uid:gid

Back

  1. WORKDIR

设置工作目录,指定RUN、CMD、ENTRYPOINT的工作路径。
WORDDIR <PATH>
注意:若多次重复指令(后几个路径必为相对路径),则最终路径为其组合,例如:

WORKDIR /a
WORKDIR b
WORKDIR c

等效于WORKDIR /a/b/c
Back

  1. ONBUILD

设置二次映像构建时的执行指令。其在当前dockerfile进行构建时并不执行,而在基于该映像的子映像构建时执行。
注意:ONBUILD后不应存在FROM和MAINTAINER指令。

FROM busybox
ONBUILD RUN echo "Now it works!"

Back

  1. LABEL

添加元数据到映像。尽量只使用一个标签LABEL。
LABEL <label>=<value> [<label>=<value>....]

LABEL multi.label1="label1" \ 
	  multi.label2="label2" 

Back

  1. ARG

构建变量,该变量与ENV构建的环境变量不同,只能在Dockerfile内起效。
ARG <key> <value>

Back

  1. STOPSIGNAL

允许用户定制化运行docker stop时的信号。

STOPSIGNAL SIGNALKILL

Back

  1. HEALTHCHECK

用于检测映像的状态。
HEALTHCHEK [OPTION] CMD command,配置项包括:

  • --interval=DURATION 用于指定容器启动多久后开始自建,默认30s。
  • --tiemout=DURATION 设置超时时间,默认30s。
  • --retries=N 设置充实次数,默认3次。
HEALTHCHECK --interval=5m --timeout=3s CMD ["echo", "we cool!"]

Back

  1. SHELL

Docker构建时默认使用/bin/sh作为shell环境(windows下是cmd),该配置项可以修改其shell环境。

SHELL ["powershell", "-command"]

Back


从容器到映像

从Dockerfile完成容器(及其内部应用的部署)的构建之后,还可以选择将其打包为一个映像(Image),将其发布到DockerHub上,实现轻量级的应用移动和部署。

使用docker build 命令进行打包

docker build [OPTIONS] PATH | URL | -,常用指令有:

  • -c 控制CPU的使用数
  • -f – file <string> 选则所使用的Dockerfile
  • -m --memory <value> 设置内存使用上限
  • -q --quite 不显示构建过程的日志输出
  • -t --tag <value> 为映像打上标签
docker build --tag=myImage:v0.01

特别的,要注意路径的问题: docker build --tag=myImage:v0.01 -f Dockerfile . (命令末有个表示相对路径的.),会在当前路径下寻找Dockerfile文件并构建镜像。

发布Image

需要拥有DockerHub的账号,并利用docker login指令登录服务器之后,利用docker push指令发布。在发布前,利用docker tag指令为映像打上标签。

docker tag myImage myUserName/myRepository:tag
docker push myUserName/myRepository:tag

容器基本操作

常用指令列表

命令说明
attach依附到正在运行的容器
cp从容器里面复制文件或目录到宿主机系统或以标准形式输出
create创建一个新容器
diff检查容器的文件系统变化情况
events获取Docker服务器端的事件日志
exec在一个运行中的容器中执行命令
export导出容器的文件系统到指定位置
inspect获取容器的元数据
kill杀死一个运行中的容器,该指令不可被容器内部拦截
logs获取容器的运行日志
pause暂停容器内部的所有进程
port输出容器的端口信息
ps显示当前Docker中的容器列表
rename重命名一个容器
restart重启一个容器
rm移除一个或多个容器
run启动一个容器
start启动一个或多个挂起/暂停中的容器
stats显示容器的资源占用情况
stop暂停正在运行的容器
top显示容器内正在运行的进程
unpause恢复所有暂停的进程
update更新一个或多个容器的配置
wait阻塞一个容器,并逐步停止该容器
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值