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;
Diretório do artigo
- A, modo de cometer
- Dois, modo de Exportação
- Três, Dockerfile método de produção de classe empresarial (recomendado)
- 1, o princípio de produção Dockerfile
- 2, da seguinte forma espelhada DockerFile, instruções e parâmetros necessários detalhada:
- 3, Dockerfile espelhado e especificações técnicas são como se segue:
- 4, DockerFile um caso de negócios
- 5, DockerFile empresa Caso II
- 6, DockerFile empresa Caso III
- 7, DockerFile empresa da caixa quatro
- 8. O dockerfile de geração de imagem
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
- 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
Nota: 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 [])