Duas maneiras de criar imagens com o Docker
Há duas maneiras de o Docker criar uma imagem: o docker compromete-se a criar uma imagem e criar uma imagem com base no dockerfile.No dddd , falamos sobre como usar o dockerfile para criar uma imagem.Somente os comandos FROM e RUN são usados, o que é relativamente simples.
Este artigo fala sobre como usar o docker commit para criar imagens e outros comandos e o uso do dockerfile.
Primeiro, os estivadores se comprometem a criar uma imagem
Faça uma imagem através do docker confirmar, execute uma imagem básica, instale o software e modifique o arquivo de configuração na imagem básica. Em seguida, envie as alterações para a nova imagem.
1 run docker run
1) Imagens do Docker primeiro verifique se existe uma imagem local, selecione a imagem básica necessária, se não for necessário, use o docker pull para puxar a imagem necessária
2) Em seguida, use o docker run para executar a imagem como um contêiner
2. docker commit - uma informação do autor - m descrição informações nome do contêiner nome do espelho (faça você mesmo)
-a Especifique as informações do autor -m Envie as informações da descrição -p suspenda o contêiner por padrão ao confirmar
A implementação específica é a seguinte:
Na última caixa vermelha, o comando docker commit finalmente salva o nome da imagem modificada, basta escolher uma
3. docker diff Visualizar alterações na camada de armazenamento de imagens
4 history histórico do docker
-q exibe apenas o ID do espelho
Descrição:
1) Além do que você realmente deseja modificar com a imagem de confirmação, outros arquivos serão alterados ou adicionados devido à execução do comando.Se você estiver instalando pacotes de software, compilando e construindo, será adicionado muito conteúdo estranho, que será Fazendo com que a imagem no espelho fique extremamente inchada ,
A confirmação do Docker significa que as operações de espelhamento são todas de caixa preta , é difícil para outras pessoas saberem o que está acontecendo lá dentro e a manutenção é muito difícil. O funcionário não recomenda a criação por confirmação.
2) Esse método é o mais gratuito e mais fácil se você não se preocupar com o espelho se tornando cada vez maior.
Segundo, o comando Dockerfile
Dockerfile é um arquivo de texto, que contém uma série de instruções (Instrução); cada instrução cria uma camada; portanto, o conteúdo de cada instrução é para descrever como a camada deve ser construída.
Nota: Ao criar uma imagem, adicione apenas o que você realmente precisa adicionar a cada camada
1. FROM especifica a imagem base
FROM : FROM <imagem> 或者 FROM <imagem>: <tag>
Por exemplo: FROM centos: 7
2. MANUTENÇÃO designada informação do mantenedor
Formato: MAINTAINER <name>
Por exemplo: MAINTAINER hxq [email protected]
3. Executar comando
1) modo Shell:
EXECUTAR <comando> é como o comando inserido diretamente na linha de comando
RUN <comando> usa `/ bin / sh -c` por padrão para executar comandos
Anterior: EXECUTAR yum install -y httpd
R: EXECUTAR echo '<h1> Olá, Docker! </h1>'> /usr/share/nginx/html/index.html
2) modo exec
RUN ["arquivo executável", "parâmetro 1", "parâmetro 2"], é mais parecido com o formato em uma chamada de função
Nota: O comando RUN é usado para executar a linha de comando. Note que cada uso de um RUN (comando dockerfile) é adicionar mais uma camada à imagem (o limite máximo é de 127 camadas).
Execute várias instruções para conectar-se ao && (apt-get plus -y, o que significa que as solicitações de instalação do sistema selecionam yes por padrão; caso contrário, o espelhamento falha; se houver uma quebra de linha entre o comando &&, lembre-se de trazer \ após a linha )
4. Copie arquivos de cópia
格式:COPY src desc
复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。
5、ADD 高级复制
格式:ADD src dest
该命令将复制指定本地目录中的文件到容器中的dest中,src可以是是一个绝对路径,也可以是一个URL或一个tar文件,tar文件会自动解压为目录。
6、CMD 容器启动命令
是可以被 docker run 指令覆盖的,而ENTRYPOINT的参数可以被--entrypoint覆盖;会比CMD或者docker run指定的命令要靠前执行。
7、ENTRYPOINT 入口点
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2 会在shell中执行。
用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。
8、ENV 用设置环境变量
这些环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量。
格式为:EVN key value
ENV word hello
RUN echo $word
9、ARG 构建参数
10、VOLUMN 定义匿名卷
格式: VOLUME ["/data"]
作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
11、EXPOSE 暴露端口
在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。
格式: EXPOSE port [port2,port3,...]
比如:EXPOSE 80 这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。
12、WORKDIR 指定工作目录
为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。
格式: WORKDIR /path
比如: WORKDIR /path/to/workdir
13、USER 指定容器运行时的用户名或UID
后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。
格式为:USER username
比如:RUN groupadd -r docker && useradd -r -g docker docker
14、HEALTHCHECK 健康检查
15、ONBUILD 镜像触发器
格式:ONBUILD [INSTRUCTION]
该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令。
例如下面的Dockerfile创建了镜像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py
则基于镜像A创建新的镜像时,新的Dockerfile中使用from A 指定基镜像时,会自动执行ONBBUILD指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令:
FROM A
ADD ./app
RUN python app.py
16、docker build
创建好Dockerfile之后,通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。
通常建议放置Dockerfile的目录为空目录。另外可以在目录下创建.dockerignore文件,让Docker忽略路径下的文件和目录,这一点与Git中的配置很相似。
通过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . ## "."指定的是Dockerfile所在的路径