将使用docker-compose构建的映像推送到dockerhub

时间:2019-06-18 11:34:46

标签: docker docker-compose

我有一个与postgres交互的golang脚本。在docker-compose.yml中为golang和postgre创建了一个服务。当我使用“ docker-compose up”在本地运行时,它可以完美运行,但是现在我想创建一个映像,将其推送到我的dockerhub,以便仅通过“ docker run”即可将其拉出并运行。正确的做法是什么?

由“ docker-compose up --build”创建的映像启动时,“ docker run”没有错误,但立即停止。

docker-compose.yml:

version: '3.6' 
services: 
  go: 
    container_name: backend 
    build: ./ 
    volumes: 
      - # some paths 
    command: go run ./src/main.go
    working_dir: $GOPATH/src/workflow/project 
    environment: #some env variables 
      ports: 
      - "80:80" 
  db: 
    image: postgres 
    environment: #some env variables 
    volumes: 
      - # some paths 
    ports: 
      - "5432:5432" 

Dockerfile:

FROM golang:latest

WORKDIR $GOPATH/src/workflow/project 

CMD ["/bin/bash"]

我是docker的新手,因此感谢您对习惯用法的任何评论

1 个答案:

答案 0 :(得分:0)

docker-compose不会将docker映像合并为一个,而是根据{{1所定义的映像运行或运行up)或构建然后运行(使用up --build)docker容器。 }}文件。
更多信息在official docs

  

Compose是用于定义和运行多容器Docker应用程序的工具。

因此,在您的示例中,docker-compose将运行两个容器:
1-基于yml配置
2-基于go配置

要查看实际运行的容器,请使用以下命令:

db

有关更多信息,请参见docker docs

通常建议在单独的容器上运行每个searvice,但是如果您坚持要制作同时包含docker ps -a golang的映像,则可以拍摄postrges基本映像并在其上安装postgres,或者反之,获取基于golang的映像并在其上安装golang

安装步骤可以在postgres内部完成,请参考:
 -Dockerfile官方Dockerfile
 -postgres官方Dockerfile

将它们组合在一起。

编辑: (数字海洋部署)

好吧,如果您将所有内容(docker映像和golang文件)复制到您的Droplet中,它将使应用程序启动并运行,就像在本地计算机上执行该操作一样。

可以在此处找到示例:How To Deploy a Go Web Application with Docker and Nginx on Ubuntu 18.04

在生产中,通常用于大规模/交通应用,使用更高级的解决方案,例如:
-docker swarm
-kubernetes

有关数字海洋上的Kubernetes的更多信息,请参阅official docs

希望这可以帮助您找到路。