我正在使用docker-compose来创建我的开发环境。我想构建一个特定的图像,但我不知道如何为该图像设置名称。
wildfly:
build: /path/to/dir/Dockerfile
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
当我执行docker-compose
时,一切正常,但我得到了新图像的随机名称。是否可以为构建映像设置名称?
答案 0 :(得分:130)
对于docker-compose版本2文件格式,您可以为一个服务构建和标记图像,然后将该相同的构建图像用于其他服务。
对于我的情况,我想设置一个包含2个节点的弹性搜索集群,它们都需要使用相同的图像,但配置为以不同的方式运行。我还想从我自己的Dockerfile构建自己的自定义elasticsearch图像。所以这就是我所做的(docker-compose.yml):
version: '2'
services:
es-master:
build: ./elasticsearch
image: porter/elasticsearch
ports:
- "9200:9200"
container_name: es_master
es-node:
image: porter/elasticsearch
depends_on:
- es-master
ports:
- "9200"
command: elasticsearch --discovery.zen.ping.unicast.hosts=es_master
你可以看到在第一个服务定义“es-master”中,我使用“build”选项从./elasticsearch中的Dockerfile构建一个图像。我使用“image”选项标记名为“porter / elasticsearch”的图像。然后,我使用“image”选项在“es-node”服务定义中引用此构建的映像,并使用“depends_on”来确保构建并运行其他容器“es-master”。
答案 1 :(得分:46)
如果您使用新的文件格式,现在可以指定构建和图像键。
docker-compose build
会构建图片并使用您指定的名称对其进行标记,而docker-compose pull
会尝试将其拉出来。
所以你的docker-compose.yml
将是
version: '2'
services:
wildfly:
build: /path/to/dir/Dockerfile
image: wildfly_server
ports:
- 9990:9990
- 80:8080
更新docker-compose
sudo pip install -U docker-compose==1.6.0
答案 2 :(得分:45)
docker-compose 生成的图像名称默认情况下取决于文件夹名称,但您可以使用--project-name
参数覆盖它:
$ docker-compose --project-name foo build bar
$ docker images foo_bar
docker-compose 1.6.0 结束后,您可以指定build:
和image:
以获得明确的图片名称(请参阅arulraj.net's answer)。< / p>
第三种是从容器中创建图像:
$ docker-compose up -d bar
$ docker commit $(docker-compose ps -q bar) foo_bar
$ docker-compose rm -f bar
答案 3 :(得分:18)
根据您的使用情况,您可以使用已创建的图像并在docker-compose
中指定其名称。
我们有一个生产用例,我们的CI服务器构建一个名为Docker的映像。 (docker build -t <specific_image_name> .
)。一旦指定了指定的图像,我们的docker-compose
总是建立在特定图像的基础上。这允许几种不同的可能性:
1-您可以确保从docker-compose
运行docker-compose
,您将始终使用该特定图像的最新版本。
2-您可以在docker-compose
文件中指定多个命名图像,并让它们通过上一个构建步骤自动连接。
因此,如果您的图片已经构建,则可以使用build
为图像命名。移除image:
并指定wildfly:
image: my_custom_wildfly_image
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.whatever, container, false);
View testview= (View) v.findViewById(R.id.id);
return v;
}
答案 4 :(得分:14)
根据 Docker compose 3.9 版本,您可以使用 image: myapp:tag
指定名称和标签。
version: "3.9"
services:
webapp:
build:
context: .
dockerfile: Dockerfile
image: webapp:tag
参考:https://docs.docker.com/compose/compose-file/compose-file-v3/
答案 5 :(得分:5)
执行以下操作:
docker tag <image id> mynewtag:version
之后,当您<none>
时,您会看到自己的图片不再被命名为docker images
。
答案 6 :(得分:0)
sudo docker-compose -p
指定项目名称
注意:'-p' 选项位于命令中的 'build' 之前