目录 start
目录 end
|2018-04-08| 码云 | CSDN | OSChina
mkdir test && cd test && touch Dockerfile
输入如下文本 #随意写的
FROM alpine
MAINTAINER Mythos
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
docker build .
如果成功则会得到一个没有名字的镜像 none:none
docker build -t image:tag .
给镜像指定名字, 注意标签不设置就是默认的latestdocker run --name ContainerName -d image:tag
新建容器来运行镜像镜像
的表示,可以通过Dockerfile来描述构建镜像的步骤,且可以自动构建一个容器INSTRUCTION arguments
.dockerignore
文件来忽略不要上传的文件docker build
Dockerfile
就使用 .
docker build -t image:tag- < 文件名
或者使用-f参数:-f
指向任意位置的文件进行配置 docker build -f /path/to/a/Dockerfile .
-t
如果构建成功 可以指定保存新镜像的image和tag (多个的话就多个 -t就行了,例如 docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
)基于某镜像构建,这是整个文件的第一条指令,一定是基于某镜像构建的,如果是空镜像就使用特殊的
FROM scratch
允许多个FROM命令,其后的命令就是基于该FROM的镜像构建的,但是一个dockerfile只能得到一个有名字的镜像(最后一个FROM构建的镜像),之前的FROM就是none:none
FROM image
FROM image:tag
FROM image@digest
如果FROM使用中,找不到对应的版本的镜像,整个Dockerfile就会报错返回
MAINTAINER kuangcp myth.kuang@gmail.com
每条RUN命令在当前镜像的基础上执行指定命令,并提交为新的镜像层,所以尽量将所有命令放在一个RUN里
RUN command
/bin/sh -C
负责执行,所以就会有限制,必须要有 /bin/sh
RUN ["executable", "param1", "param2" ... ]
一定要双引号(JSON字符串的格式
来解析的)
RUN ["/bin/bash", "-C", "echo hello"]
RUN ["echo","$HOME"]
是不会正常输出的,因为此时不会加载环境变量中的数据
RUN ["sh", "-c", "echo", "$HOME"]
就可以正常输出了当RUN命令执行完毕后,就会生成一个新的文件层。这个文件层会保存在缓存中作为下一个指令的基础镜像存在,如果不需要缓存就加上 --no-cache
指定 容器启动时默认执行的命令
三种格式
CMD ["executable","param1","param2"]
(like an exec, preferred form) 推荐
CMD ["param1","param2"]
(as default parameters to ENTRYPOINT) 作为默认参数提供给ENTRYPOINTCMD command param1 param2
(as a shell) 作为shell命令 依靠bin/sh -C
执行docker run
中带了运行的命令,就会覆盖CMD命令sh -C
容器入口点
命令设置在容器启动时执行命令 一般用来做初始化容器,或者运行持久软件ENTRYPOINT echo "Welcome!"
那么每次启动容器都有这个输出ENTRYPOINT cmd param1 param2 ...
ENTRYPOINT ["cmd", "param1", "param2"...]
ENTRYPOINT ["mysql", "-u", "daemon"]
ENTRYPOINT ["memcached"]
USER daemon
设置环境变量
ENV <key> <value>
ENV name kuang cheng ping
ENV <key>=<value>
ENV name=myth\ kuang
ENV TZ=Asia/Shanghai
ENV命令之后的RUN命令都可以使用这里配置的环境变量
如果docker run --env <key>=<value>
则会覆盖dockerfile中同名key的值
docker run -e
重设环境变量一个ENV命令一个新层,所以也是尽量使用一个ENV命令
用来定义键值对, 相当于是一个内置的配置文件
LABEL key=value
LABEL version="java 1.8"
LABEL test=other
用来指定一些镜像中使用的参数,例如版本信息
ARG <name> [=<default value>]
docker build --build=-arg<name>=<value>
来传入值copy <src> <dest>
copy ["./log", "${APPROOT}"]
ADD <src> <dest>
VOLUME ["<mountpoint>"]
VOLUME ["/data"]
创建挂载点 用于共享目录WORKDIR /path/to/workdir
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
其实是在 /a/b/c 下执行 pwd FROM ubuntu
MAINTAINER "youtemail"
RUN apt-get update
RUN apt-get install -ysoftware-properties-common
RUN add-apt-repository ppa:git-core/ppa
RUN apt-get update && apt-get install -y git
ENTRYPOINT ["git"]
docker build -t git:new .
docker run --rm git:new
RUN useradd -ms /bin/bash mythos;\
echo "mythos:jiushi" | chpasswd;
USER mythos
WORKDIR /home/mythos