[英]Docker files to docker compose
我是 docker 的新手。 我正在制作 java sockets 音乐服务器,我有 2 个文件。 Client.java 和 Server.java。 两者都在不同的容器中。 值得一提的是,我在命令行中运行这两个服务
Docker 文件
FROM java:8
COPY Server.java /
RUN javac Server.java
EXPOSE 25000
ENTRYPOINT ["java"]
CMD ["Server"]
FROM java:8
COPY Client.java /
RUN javac Client.java
EXPOSE 25000
ENTRYPOINT ["java"]
CMD ["Client"]
我还为这两个通信创建了一个网络。
docker network create client_server_network
我运行图像如下:
docker run --env SERVER_HOST_ENV=server --network-alias server --network client_server_network -it server
docker run --network client_server_network -it clientimage
现在我想用这两个 Dockerfile 和网络创建一个 docker 组合文件。 这是我到目前为止所做的:
version:'3'
services:
client:
image: java:8
ports:
-25000:25000
network:
default:
name: client_server_network
server:
image: java:8
ports:
-25000:25000
environment:
-SERVER_HOST_ENV=server
network:
我的问题是如何在两种服务中添加公共网络。 我写 docker 撰写文件的方式也是正确的吗?
下面是代码,默认情况下,两个容器都添加到名为 net 的网络中,并且它还必须在最后一行提供
version:'3'
services:
client:
image: java:8
ports:
- 25000:25000
networks:
- client_server_network
server:
image: java:8
ports:
- 25000:25000
environment:
- "SERVER_HOST_ENV=server"
networks:
- client_server_network
networks:
client_server_network:
请注意,网络应在相同级别的服务和版本中最后共同指定。 由于缩进是 docker-compose 中的主要因素。 如果缩进不正确可能会显示错误。
删除所有networks:
整个文件中的块。 client
和server
将可用作这两个容器的主机名。
Docker 文档中的Networking in Compose中进一步描述了此行为。 如果您不声明顶级networks:
,Compose 会创建一个名为default
的网络,如果您不声明networks:
在给定服务上,Compose 会将其附加到该default
网络。
您的两个docker run
命令的功能转换如下所示:
version: '3.8'
# Compose creates `networks: { default: }` on its own; you do not need
# top-level `networks:`
services:
server: # <-- this name is usable as a host name
image: server
environment:
- SERVER_HOST_ENV=server
# Automatically on `networks: [default]`
client:
image: clientimage
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.