[Docker] Explicação detalhada da produção do arquivo de imagem pessoal Dockerfile

prefácio

Homepage pessoal de Jiejie
Eu só pergunto se você já jogou!
Unidade de conhecimento e ação, aspirações elevadas.

O Docker é uma ferramenta 开源的应用容器引擎que permite aos desenvolvedores empacotar seus aplicativos e dependências em um contêiner portátil e, em seguida, publicá-lo em qualquer Linux或Windowsmáquina com sistema operacional popular. Ele também pode implementar a virtualização. O contêiner está usando completamente o mecanismo de sandbox e interage entre si. não haverá interface entre eles.

1. Introdução ao Dockerfile

Dockerfile é um arquivo de compilação usado para criar uma imagem do Docker e é um script composto por uma série de comandos e parâmetros. Este artigo é uma compreensão das notas de estudo de Hengchuan.

Simplificando, o Dockerfile consiste em colocar cada etapa e instrução do nosso ambiente de instalação em um arquivo, executá-lo com um clique no final e, finalmente, criar o ambiente que você deseja.

Dockerfile é um arquivo de compilação usado para criar uma imagem do Docker e é um script composto por uma série de comandos e parâmetros.

Trilogia de compilação do Docker:

  • Escrever arquivo docker
  • docker build build image arquivo de imagem
  • docker run run container

Adicione uma descrição da imagem

2. Instruções relacionadas ao Dockerfile

Dockerfile é um arquivo de texto que contém todos os comandos para criar uma imagem espelhada. O comando docker build pode ser usado para criar uma imagem espelhada com base no conteúdo do Dockerfile. Antes de introduzir como criá-lo, primeiro introduza a estrutura gramatical básica
de o Dockerfile.

O Dockerfile tem as seguintes opções de comando:

  • A PARTIR da imagem base, cuja imagem é a nova imagem atual baseada em
  • MAINTAINER O nome e endereço de e-mail do mantenedor do espelho
  • RUN O comando a ser executado quando o contêiner é construído
  • CMD especifica o comando a ser executado quando um contêiner é iniciado.
    Pode haver várias instruções CMD no dockerfile, mas apenas a última entrará em vigor e o CMD será substituído pelos parâmetros após a execução do docker.
  • EXPOSE O número da porta exposta pelo contêiner atual
  • ENV é usado para definir variáveis ​​de ambiente durante a construção da imagem
  • ADD copia os arquivos no diretório do host para a imagem e o comando ADD processará automaticamente a URL e descompactará o arquivo tar
  • COPY COPY: Semelhante ao ADD, ele copia arquivos e diretórios na imagem, mas apenas copia e não processa automaticamente URLs e descompacta arquivos tar.
  • ENTRYPOINT especifica um comando a ser executado quando um contêiner é iniciado.
  • A finalidade do ENTRYPOIT é a mesma do CMD, que é especificar o programa e os parâmetros de inicialização do contêiner.
  • Volume de dados do contêiner VOLUME para armazenamento e persistência de dados
  • USER especifica o nome de usuário ou UID ao executar o contêiner e o RUN subsequente também usará o usuário especificado
  • WORKDIR especifica que, após a criação do contêiner, o terminal fará login no diretório de trabalho por padrão, um ponto de apoio
  • ONBUILD Executa o comando ao criar um Dockerfile herdado. Depois que a imagem pai é herdada pelo filho, o onbuild da imagem pai é acionado.

3. Escrita do Dockerfile

Crie uma nova pasta docker-run no diretório atual, cd na pasta, toque para criar um novo Dockerfile, então o vi abre o arquivo e começa a editar

[root@yoyo ~]# mkdir docker-run
[root@yoyo ~]# cd docker-run/
[root@yoyo docker-run]# touch Dockerfile
[root@yoyo docker-run]# vi Dockerfile

O conteúdo editado é o seguinte:

# 更新pip
RUN pip install --upgrade pip 

# 工作目录
WORKDIR /code
ADD . /code

# pip安装依赖包
RUN pip install -r requirements.txt

# 传递参数
ENTRYPOINT ["pytest"]

# 默认显示help帮助信息
CMD ["--help"]

Adicione uma descrição da imagem

4. requisitos.txt

requirements.txt é um pacote de dependência relacionado do python, que pode ser gerado pelo comando freeze

pip3 congelar > requisitos.txt

[root@yoyo docker-run]# cat requirements.txt 
APScheduler==3.5.3
asn1crypto==0.24.0
atomicwrites==1.3.0
attrs==18.2.0
backports.csv==1.0.7
bcrypt==3.1.7
beautifulsoup4==4.7.1
cached-property==1.5.1
certifi==2018.11.29
cffi==1.12.3
chardet==3.0.4
cryptography==2.7
DBUtils==1.3
defusedxml==0.5.0
diff-match-patch==20181111
Django==2.1.4
django-bootstrap3==11.0.0
django-crispy-forms==1.7.2
django-formtools==2.1
django-import-export==1.2.0
django-ranged-response==0.2.0
django-reversion==3.0.3
django-simple-captcha==0.5.10
django-stdimage==4.0.1
docker==3.7.3
docker-compose==1.24.1
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
et-xmlfile==1.0.1
future==0.17.1
httplib2==0.12.1
idna==2.7
jdcal==1.4
jsonschema==2.6.0
more-itertools==6.0.0
mysqlclient==1.4.2.post1
odfpy==1.4.0
openpyxl==2.6.1
paramiko==2.6.0
Pillow==5.4.1
pluggy==0.6.0
progressbar2==3.39.3
py==1.7.0
pycparser==2.19
pymssql==2.1.4
PyMySQL==0.9.3
PyNaCl==1.3.0
pytest==3.6.3
python-utils==2.3.0
pytz==2018.7
PyYAML==3.13
requests==2.20.1
six==1.12.0
soupsieve==1.7.3
tablib==0.13.0
texttable==0.9.1
tzlocal==1.5.1
urllib3==1.24.1
websocket-client==0.56.0
xlrd==1.2.0
xlwt==1.3.0

Adicione uma descrição da imagem

5. build para construir o arquivo de imagem

O comando docker build é usado para criar uma imagem usando um Dockerfile. Descrição das OPÇÕES:

  1. -f : especifique o caminho do Dockerfile a ser usado;
  2. -pull : tente atualizar a nova versão da imagem;
  3. -quiet, -q : Modo silencioso, apenas imprime o ID da imagem após o sucesso;
  4. -tag, -t: O nome e a tag do espelho, geralmente no formato de nome:tag ou nome; várias tags podem ser definidas para um espelho em uma compilação.

O parâmetro -t define o nome da imagem yoyo_pytes e o nome do rótulo da tag v1,Observe o ponto no final.

docker build -t yoyo_pytest:v1 .

[root@yoyo docker-run]# docker build -t yoyo_pytest:v1 .
Sending build context to Docker daemon  11.78kB
Step 1/8 : FROM python:3.6
 ---> cfcdf565ff94
Step 2/8 : MAINTAINER yoyo  <283340479@qq.com>
 ---> Using cache
 ---> f523b919fcf9
Step 3/8 : RUN pip install --upgrade pip
 ---> Using cache
 ---> 3399b50dab4e
Step 4/8 : WORKDIR /code
 ---> Using cache
 ---> 7223a20e17fd
Step 5/8 : ADD . /code
 ---> 650b554ccd6c
Step 6/8 : RUN pip install -r requirements.txt
 ---> Running in 0e49d444f7d8

Durante o processo de execução, você pode ver que está executando passo a passo, como: Etapa 1/8

Após a conclusão da operação, você pode visualizar a imagem gerada por meio de imagens do docker

[root@yoyo docker-run]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
yoyo_pytest                v1                  6b4267ce7ac4        21 seconds ago      1.02GB
[root@yoyo docker-run]#

Adicione uma descrição da imagem

6. executar para executar o contêiner

Crie um novo arquivo test_h.py no diretório atual e escreva o script de teste pytest

import pytest
def test_one():
    print("正在执行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在执行----test_two")
    x = "hello"
    assert x

def test_three():
    print("正在执行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

if __name__ == "__main__":
    pytest.main(["-s", "test_h.py"])

Execute o contêiner com docker run

  1. -it -t diz ao docker para alocar um pseudo-terminal e vinculá-lo à entrada padrão do contêiner, e -i mantém a entrada padrão do contêiner aberta.
  2. -rm Quando o contêiner sai, limpa automaticamente o contêiner.
  3. A opção -rm não pode ser usada com -d ao mesmo tempo
  4. -v Monta o diretório/código de trabalho do contêiner no $PWD do host, que é o diretório atual
  5. yoyo_pytest:v1 nome do contêiner e nome da tag
  6. test_h.py seguido do nome do script que precisa ser executado
[root@yoyo docker-run]# docker run -it --rm -v "$PWD":/code yoyo_pytest:v1 test_h.py  -s
================================================================== test session starts ==================================================================
platform linux -- Python 3.6.9, pytest-3.6.3, py-1.7.0, pluggy-0.6.0
rootdir: /code, inifile:
collected 3 items                                                                                                                                       

test_h.py 正在执行----test_one
.正在执行----test_two
.正在执行----test_three
.

=============================================================== 
3 passed in 0.01 seconds 

7. Recomendação de livro:

Desde que o CentOS 6.xeo CentOS 8.x foram descontinuados em "Linux Private Education Class: Technical Kernel and Enterprise Operation and Maintenance", que tipo de sistema é usado no sistema doméstico Linux de código aberto tem causado considerável controvérsia. A julgar pelos dados estrangeiros, o atual sistema Rocky Linux mostrou uma tendência a substituir o CentOS. O Rocky Linux é um sistema operacional de nível empresarial gratuito e de código aberto projetado para ser 100% compatível com o sistema Linux para usuários corporativos (Red Hat Enterprise Linux, RHEL) lançado pela Red Hat (Red Hat) e atualmente está sendo intensamente desenvolvido pelo meio comunitário. O Rocky Linux é uma distribuição Linux empresarial gerenciada e de propriedade da comunidade que fornece uma poderosa plataforma de nível de produção e pode ser usada como uma alternativa ao sistema Linux downstream do RHEL após o CentOS parar de manter (alterado para uma versão Stream de atualização contínua), herdando o CentOS original O código aberto, recursos gratuitos. "Linux Private Teaching Class: Technical Kernel and Enterprise Operation and Maintenance" gira em torno do sistema Rocky Linux e explica em detalhes os pontos técnicos e casos práticos corporativos de uso do sistema Rocky Linux. O livro inteiro tem 13 capítulos no total, principalmente introduzindo o sistema Rocky Linux. Em seguida, explicou gerenciamento de diretório e gerenciamento de arquivos, gerenciamento de usuários, gerenciamento de autoridade, gerenciamento de disco, gerenciamento de processo, gerenciamento de sistema e gerenciamento de rede; em seguida, expandiu o conhecimento e explicou o conteúdo do gerenciamento de contêiner. Por fim, explicou a otimização do kernel do sistema Linux, soluções em nuvem para pequenas e médias empresas, sistema de monitoramento Prometheus e combate empresarial Podman. Este livro considera totalmente as necessidades de leitura de leitores de base zero e fornece cuidadosamente recursos como notas, exemplos de códigos, vídeos de aprendizagem e mapas mentais.
Adicione uma descrição da imagem

Acho que você gosta

Origin blog.csdn.net/2202_75623950/article/details/132272693
Recomendado
Clasificación