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 qualquerLinux或Windows
má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.
Use o Dockerfile para criar arquivos de imagem pessoais
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
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"]
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
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:
- -f : especifique o caminho do Dockerfile a ser usado;
- -pull : tente atualizar a nova versão da imagem;
- -quiet, -q : Modo silencioso, apenas imprime o ID da imagem após o sucesso;
- -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]#
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
- -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.
- -rm Quando o contêiner sai, limpa automaticamente o contêiner.
- A opção -rm não pode ser usada com -d ao mesmo tempo
- -v Monta o diretório/código de trabalho do contêiner no $PWD do host, que é o diretório atual
- yoyo_pytest:v1 nome do contêiner e nome da tag
- 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.