Siga a conta pública do Java Book Club do WeChat para obter mais artigos bons
Na seção anterior, analisamos a imagem do componente principal do Docker. Nesta seção, torturaremos o contêiner acima da camada da imagem. Na figura abaixo, podemos ver que o container é gerado com base na camada Image. A relação entre imagem e container pode ser entendida por analogia com a relação entre classe e objeto. No mundo docker, a imagem é somente leitura, enquanto o contêiner é legível e gravável.
Já apresentamos como criar um contêiner no docker primeira vista da divindade. Por exemplo, o comando para criar o tomcat é o seguinte
docker run -d --name my-tomcat -p 9090:8080 tomcat
Imagem reversa do contêiner
Tortura de alma 1: Como sabemos que o contêiner é criado com base na imagem, podemos fazer a imagem passar pelo contêiner inversamente?
Vamos dar uma olhada em um exemplo para praticar uma onda
#1.拉取centos镜像
docker pull centos
#2.根据centos镜像创建出centos container
docker run -d -it --name my-centos centos
#3.进入my-centos容器中
docker exec -it my-centos bash
#4.输入vim命令,显示
bash: vim: command not found
#5.我们要做的是 对该container进行修改,也就是安装一下vim命令,然后将其生成一个新的centos #6.在centos的container中安装vim
yum install -y vim
#7.退出容器(exit或者Ctrl+d),将其生成一个新的centos,名称为"vim-centos-image"
docker commit my-centos vim-centos-image
#8.查看镜像列表,并且基于"vim-centos-image"创建新的容器
docker run -d -it --name my-vim-centos vim-centos-image
#9.进入到my-vim-centos容器中
docker exec -it my-vim-centos bash
#10.检查vim命令是否存在
vim
Após as operações acima, descobrimos que a imagem que criamos na direção reversa do contêiner e, em seguida, geramos um novo contêiner herdou as características do contêiner original. No entanto, este método não é recomendado. Como nossa operação normal é usar o arquivo Docker para gerar a imagem, se fizermos isso, não poderemos saber o processo de criação da imagem. A forma mais recomendada é a imagem personalizada na seção anterior
Comandos comuns para container
Usamos vários comandos para operar contêineres acima, aqui está um resumo:
#1.根据镜像创建容器
docker run -d --name -p 9090:8080 my-tomcat tomcat
#2.查看运行中的container
docker ps
#3.查看所有的container[包含退出的]
docker ps -a
#4.删除container
docker rm containerid
#5.删除所有container
docker rm -f $(docker ps -a)
#6.进入到一个container中
docker exec -it container bash
#7.根据container生成image
docker commit my-centos vim-centos-image
#8.查看某个container的日志
docker logs container
#9.查看容器资源使用情况
docker stats
#10.查看容器详情信息
docker inspect container
#11.停止/启动容器
docker stop/start container
Suplemento: comandos delete image e container
#1.杀死所有正在运行的容器
docker kill $(docker ps -a -q)
#2.删除所有已经停止的容器
docker rm $(docker ps -a -q)
#3.删除所有未打 dangling 标签的镜
docker rmi $(docker images -q -f dangling=true)
#4.删除所有镜像
docker rmi $(docker images -q)
#5.强制删除 无法删除的镜像
docker rmi -f <IMAGE_ID>
docker rmi -f $(docker images -q)
~/.bash_aliases
#1.杀死所有正在运行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'
#2.删除所有已经停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'
#3.删除所有未打标签的镜像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
#4.删除所有已经停止的容器和未打标签的镜像.
alias dockerclean='dockercleanc || true && dockercleani'
Monitoramento de recursos do contêiner
Como o nome sugere, como contêiner, ele deve ter seu próprio "tamanho", e apenas um uso razoável dos recursos do contêiner pode fazer com que ele tenha um melhor desempenho.
Acima, aprendemos sobre os comandos básicos de operação do Container, podemos executar docker stats para ver as informações de status do docker container em detalhes
Podemos ver que a alocação de memória padrão usa a memória máxima do host, o que tornará nossos recursos incontroláveis.
Em relação às restrições de recursos, podemos lidar principalmente com isso de duas maneiras:
-
Limite de memória
#--memory memory limit docker run -d --memory 100M --name tomcat1 tomcat
-
limite de CPU
#--cpu-shares cpu权重 docker run -d --memory 100M --cpu-shares 10 --name tomcat02 tomcat
Na imagem acima, podemos ver que a configuração foi bem-sucedida. O tamanho específico pode ser ajustado com flexibilidade de acordo com a situação real.
A linha de comando é boa para nós brincarmos e vermos, mas no ambiente de produção, quando há um grande número de contêineres, ela é esticada. No momento, temos que usar nossa poderosa ferramenta de monitoramento de contêineres
Weavescope
endereço do github: https://github.com/weaveworks/scope
Esta ferramenta é poderosa e simples de construir, mas pode haver um pequeno obstáculo, mas é fácil de resolver.
#1.配置weavescope环境
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch 192.168.110.164
#2.页面访问http://192.168.110.164:4040/,此时可能会出现页面无法访问的问题.我们要检查下4040端口是否启用。
#2.1 查看端口状态
firewall-cmd --query-port=4040/tcp
#2.2 添加端口
firewall-cmd --add-port=4040/tcp --permanent
#2.3 端口重载
firewall-cmd --reload
Introdução detalhada à tecelagem:
Você pode consultar o site oficial: https://www.weave.works/docs/
Você também pode ler este artigo: https://www.jianshu.com/p/1155b97bfdd8
Suporte técnico para contêineres
Acima mencionamos alguns pontos importantes do contêiner, então vamos resumir
Container é uma tecnologia de virtualização leve que não precisa simular hardware para criar máquinas virtuais. Docker é um formato de contêiner personalizado encapsulado com base no namespace do Linux Kernel, CGroups, UnionFileSystem e outras tecnologias para fornecer um conjunto de ambiente operacional virtual.
Namespace: usado para isolamento, como pid [processo], net [rede], mnt [ponto de montagem], etc.
CGroups: grupos de controladores são usados para limitar recursos, como memória e CPU
Sistemas de arquivos de união: usados para camadas de imagem e contêiner
Se você quiser explorar mais, consulte meu próximo artigo Operação e manutenção Análise de rede do Docker, fique atento ~