IDEA empacota a imagem docker e a envia para o servidor
1. Docker permite acesso remoto
1. Modifique o arquivo de serviço Docker
vim /lib/systemd/system/docker.service
Modifique esta linha, abra a porta 2375 e acesse remotamente o docker.
Obs: somente a rede interna, a rede externa não é segura.
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2. Recarregue o arquivo de configuração
systemctl daemon-reload // 1,加载docker守护线程
systemctl restart docker // 2,重启docker
3. Enrole diretamente para ver se faz efeito.
curl http://127.0.0.1:2375/info
4. Anexo: comandos relacionados à operação do Docker
O comando systemctl é um comando do gerenciador de serviços do sistema, que é uma combinação dos comandos service e chkconfig.
#启动docker
systemctl start docker
#停止docker
systemctl stop docker
#重启docker
systemctl restart docker
#查看docker状态
systemctl status docker
#开机启动
systemctl enable docker
2. Idea instala plug-ins e configurações de suporte do docker
1. Baixe a ideia do plug-in docker
2. Configurar a janela de encaixe
Editar configurações Adicionar Dockerfile
3. Configure as informações do servidor de conexão:
Nota: Contanto que Connection Successfl seja solicitado abaixo, significa que a conexão foi bem-sucedida;
4. Escreva o arquivo docker
##使用 JDK 8 环境为基础镜像,如果镜像不是本地的将会从 DockerHub 进行下载
FROM anapsix/alpine-java:8_server-jre_unlimited
#作者
MAINTAINER Sxq
#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp
#复制上下文目录下的target/demo-0.0.1-SNAPSHOT.jar 到容器里
COPY target/companyProject.jar companyProject.jar
#bash方式执行,使demo-0.0.1-SNAPSHOT.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /companyProject.jar"
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8081
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","companyProject.jar"]
Coloque dockerfile no diretório raiz
Pontos de conhecimento complementares: O objetivo do EXPOSE
1. Declare no Dockerfile quais portas serão abertas.
2. Ao construir um contêiner, você pode usar -P (P maiúsculo) para mapear portas aleatoriamente. (Se EXPOSE não especificar uma porta, o uso do parâmetro -P não terá efeito)
Para ser mais preciso, EXPOSE no Dockerfile é de pouca utilidade! razão:
1. A porta real exposta é o parâmetro -p ou -P especificado ao criar a execução do contêiner. Primeiro, o parâmetro -p é seguido por [host port: container port]. Então surge o problema. Como ele está em execução, às vezes você ainda precisa especificar a porta, então qual é a utilidade de EXPOSE!
2. Quando criamos a execução do contêiner, o parâmetro especificado é -P. Depois da execução, a porta EXPOSE será mapeada aleatoriamente para diferentes portas do host. Neste momento, o problema surge novamente. Uma vez que está mapeada para portas diferentes , a porta do contêiner é Se for aleatória e incerta, a porta não pode ser conhecida até depois de ser executada, o que é extremamente inconveniente de usar.
Com base na ideia de que a existência é razoável, deixe-me explicar o real propósito do EXPOSE:
EXPOSE pode ser usado, mas não pode ser usado sem ele, porque o Dockerfile não é necessariamente mantido por uma pessoa, ou quando o próximo pessoal de operação e manutenção assumir o projeto, ele poderá compreender a lógica geral por meio dos parâmetros no Dockerfile. Tudo é ainda para padronização.
5. Execute o projeto
Você pode ver as informações do serviço iniciadas por jar no log.
A seguir, olho as informações do meu servidor:
o projeto roda com sucesso e é acessado pela porta 8102.
Resumir
Falarei acima sobre isso hoje. Este artigo apresenta apenas brevemente um dos métodos usados pelo IDEA para empacotar a imagem do docker e enviá-la para o servidor! ! ! !