我有一个与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的新手,因此感谢您对习惯用法的任何评论
答案 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
希望这可以帮助您找到路。