Docker método de produção de imagem e Dockerfile Empresa analítico simples

Desde armazém site oficial pública do Docker espelhamento principalmente incompleta, não pode realmente conhecer sistema de produção da empresa, então precisamos personalizar a sua própria imagem no espelho ou reembalado. Docker espelhamento é uma das tarefas essenciais do administrador, espelhando o método Docker Existem dois métodos principais de produção são as seguintes:

  • Docker cometer | exportação apresentará um novo recipiente para a lista Images;
  • Escrever Dockerfile, bulid novo espelho à lista de espelho;

A, modo de cometer

  • Download da imagem de base Docker do armazém;
    docker pull docker.io/jdeathe/centos-ssh

  • Doeker executar vaso de geração de imagem de base;
    docker run -itd -p 6022:22 --privileged -name aliyun-server docker.io/jdeathe/centos-ssh

  • No recipiente - instalar o software, adicionar recursos, criar diretórios, arquivos;

#这里可以将你这个虚拟机需要的基础环境安装上,比如部署一个LNMP架构,或者我只想用一个web服务器,只用安装一个nginx即可!
yum install wget zlib-devel pcre-devel gcc-c++ -y
wget -O /usr/local/nginx-1.16.0.tar.gz http://nginx.org/download/nginx-1.16.0.tar.gz
tar xvf /usr/local/nginx-1.16.0.tar.gz
cd /usr/local/nginx-1.16.0
./configure --prefix=/usr/local
make -j4&make install
wget -O /usr/local/nginx/html/index.html http://www.baidu.com
echo "PATH=$PATH:/usr/local/nginx/sbin/" >>/etc/profile
source /etc/profile
  • Docker cometer ID recipiente, o recipiente será submetido à nova imagem;
    docker commit c432b9da999c
    Aqui Insert Picture DescriçãoAqui Insert Picture Descrição
  • Docker salvar a imagem lista de imagem é introduzido no pacote tar;
    docker save centos-v2:latest -o /root/centos-v2.tar
  • pacote tar espelho carga Docker, importação lista de espelhos.
    Nota: O primeiro scp para o servidor de destino e, em seguida, executar a seguinte operação
    docker load -i /root/centos-v2.tar

Dois, modo de Exportação

  • Download da imagem de base Docker do armazém;
  • Doeker executar vaso de geração de imagem de base;
  • No recipiente - instalar o software, adicionar recursos, criar diretórios, arquivos;
  • Docker recipiente de exportação ID, o recipiente é exportado como pacote de imagem tar (perda de memória em um arquivo de dados, a empresa não é recomendado para o programa);
docker ps
docker export c432b9da999c(容器ID) >/root/centos-v3.tar
  • Docker importar o pacote tar imagem, lista de espelhos introduzido.
 cat /root/centos-v3.tar|docker import - centos-v3
 -:占位符
 centos-v3:指定REPOSITORY

Aqui Insert Picture DescriçãoNota: as diferenças entre os dois métodos acima, comprometer a um multi vaso de ser submetido a um espelho de degrau, a exportação directamente para dentro do recipiente e, em seguida, derivando imagem, o passo de síntese. Mas isso é conveniente, mas pode haver perda de dados, de modo geral, não use o método de exportação!

Três, Dockerfile método de produção de classe empresarial (recomendado)

1, o princípio de produção Dockerfile

将基于一个基础镜像,通过编写Dockerfile方式,将各个功能进行叠加,最终形成新的Docker镜像,是目前互联网企业中打包镜像最为推荐的方式。

Dockerfile representação é um espelho, o espelho é uma matéria-prima, pode ser descrito por imagem Dockerfile construído, e construir automaticamente um recipiente.

2, da seguinte forma espelhada DockerFile, instruções e parâmetros necessários detalhada:

FROM	 		指定所创建镜像的基础镜像;
MAINTAINER		指定维护者信息;
RUN				运行命令;
CMD				指定启动容器时默认执行的命令;
LABEL			指定生成镜像的元数据标签信息;
EXPOSE			声明镜像内服务所监听的端口;
ENV				指定环境变量;
ADD				赋值指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下
COPY			赋值本地主机的<scr>路径下的内容到容器中的<dest>路径下;一般情况下推荐使用COPY而不是ADD;
ENTRYPOINT		指定镜像的默认入口;
VOLUME			创建数据挂载点;
USER			指定运行容器时的用户名或UID;
WORKDIR			配置工作目录;
ARG				指定镜像内使用的参数(例如版本号信息等);
ONBUILD			配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令;
STOPSIGNAL		容器退出的信号;
HEALTHCHECK		如何进行健康检查;
SHELL			指定使用SHELL时的默认SHELL类型;

3, Dockerfile espelhado e especificações técnicas são como se segue:

  • Compacta espelho usa: Tente fazer uso de cada imagem são mais concentradas, único, evitar estrutura grande e complexa, espelho multi-função;
  • escolha apropriada imagem base de: excesso pode causar construir um espelho inchado imagem base, o espelho é geralmente recomendado como uma imagem de base relativamente pequena;
  • Os comentários detalhados e manutenções: Dockerfile também um código para facilitar a posterior expansão e utilização por terceiros que devem ser considerados;
  • O uso adequado de números de versão: use o número da versão explícita informação digital informações específicas, em vez do mais tardar, para evitar não confirmar o número da versão específica, o ambiente unificado;
  • A redução do número de camadas do espelho: Espelho camadas recomendada para reduzir o comando combinado RUN, o conteúdo pode ser uma pluralidade de RUN instrução está ligado por &&;
  • Prontamente apagar arquivos temporários e cache: Isso evita espelho construído muito inchado, e estes arquivos de cache e nenhum uso prático;
  • Aumentar a velocidade de produção: o uso racional de cache, reduzindo o uso de arquivos em um diretório, documentos uso .dockeringore;
  • sequência de instruções de ajuste razoável: no caso de cache activada, o conteúdo da instrução, tanto quanto possível em frente da mesma, o que pode melhorar instruções de reutilização;
  • Reduzir a interferência de fontes externas: Se você realmente quer introduzir dados externos, abordar a necessidade de desenvolver de longa duração, e com informações sobre a versão, para que outros possam ser reutilizados sem erro.

4, DockerFile um caso de negócios

As necessidades das empresas: Iniciar recipiente de encaixe, enquanto porta de monitor externo aberto 22 recipientes Docker, alcançados através do CRT ou Xshell de login.
Gravar arquivo Dockerfile:

# 设置基本的镜像,后续命令都以这个镜像为基础
FROM centos:v1
# 作者信息
MAINTAINER  wujincheng@163.com

# RUN命令会在上面指定的镜像里执行任何命令
RUN rpm --rebuilddb;yum install passwd openssl openssh-server -y
RUN echo '123456' | passwd --stdin root
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

# 暴露ssh端口22
EXPOSE  22

# 设定运行镜像时的默认命令:输出ip,-D并以daemon方式启动sshd
CMD /usr/sbin/sshd -D;/bin/bash

5, DockerFile empresa Caso II

necessidades de negócios: abertura de porta SSH 6379, permitindo o acesso aos portos de Redis, Dockerfile da seguinte forma:
arquivo Dockerfile escreve:

# 设置基本的镜像,后续命令都以这个镜像为基础
FROM centos_lamp:v1 
# 作者信息
MAINTAINER  wujincheng@163.com

# RUN命令会在上面指定的镜像里执行任何命令
RUN rpm --rebuilddb;yum install redis* -y
RUN sed -i '/bind/127.0.0.1/0.0.0.0/g' /etc/redis.conf 

#暴露ssh端口6379
EXPOSE  6379

#-D设定运行以daemon方式启动sshd
CMD /usr/sbin/redis -D

6, DockerFile empresa Caso III

necessidades empresariais: com base em Dockerfile porta aberta 80 Apache, e se conectar remotamente ao servidor
para gravar o arquivo Dockerfile:

# 设置基本的镜像,后续命令都以这个镜像为基础
FROM centos_lamp:v1
# 作者信息
MAINTAINER  wujincheng@163.com

# RUN命令会在上面指定的镜像里执行任何命令
RUN rpm --rebuilddb;yum install pcre-devel -y
RUN rpm --rebuilddb;yum install httpd httpd-devel –y
RUN  echo “<h1>The Test Page JFEDU</h1>” >>/var/www/html/index.html

#暴露ssh端口80
EXPOSE 80

#启动httpd
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

7, DockerFile empresa da caixa quatro

necessidades de negócios: virtualização Docker, como construir o nosso servidor de banco de dados MYSQL? A resposta é simples, podemos gerar um espelho dockerfile mysql e iniciar a execução.
Gravar arquivo Dockerfile:

FROM centos:v1
RUN groupadd -r mysql && useradd -r -g mysql mysql
RUN rpm --rebuilddb;yum install -y gcc zlib-devel gd-devel
ENV MYSQL_MAJOR 5.6
ENV MYSQL_VERSION 5.6.20
RUN 
	&& curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \
	&& curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \
	&& mkdir /usr/local/mysql \
	&& tar -xzf mysql.tar.gz -C /usr/local/mysql \
	&& rm mysql.tar.gz* \
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts
WORKDIR /usr/local/mysql
VOLUME /var/lib/mysql
EXPOSE 3306
CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"]

8. O dockerfile de geração de imagem

Criar um espelho (centos: ssh) com construir janela de encaixe de acordo com Dockerfile:

#这种生成方式是用来指定名字不是Dockerfile的创建方式,-为占位符
docker  build  -t  [REPOSITORY]:[TAG]  -  <  /etc/dockerfile
#文件名默认为Dockerfile,所以不用指定,指定位置即可
docker  build  -t  [REPOSITORY]:[TAG]  .(指定位置为当前)
#注:-t是用来指定 Name and optionally a tag in the 'name:tag' format (default [])

Aqui Insert Picture Descrição

Ele publicou 188 artigos originais · ganhou elogios 150 · vista 30000 +

Acho que você gosta

Origin blog.csdn.net/weixin_44571270/article/details/104358577
Recomendado
Clasificación