Итак, я работаю над файлом компоновки докеров, чтобы развернуть мой веб-сервер Go. Мой сервер использует mongo, поэтому я добавил контейнер объема данных и службу mongo в docker compose. Затем я написал файл Docker для создания моего проекта Go и, наконец, запустил его.
Однако есть еще один шаг, который нужно сделать. Как только мой проект был скомпилирован, мне нужно запустить следующую команду:
./my-project -setup
Это добавит некоторую необходимую информацию в базу данных, а информацию нужно будет добавить только раз. Однако я не могу добавить этот шаг в файл Docker (в процессе сборки), поскольку mongo уже должен быть запущен.
Итак, как я могу это достичь? Даже если я перезапущу сервер, а затем снова запустив docker-compose up
, я не хочу, чтобы эта команда выполнялась снова.
Я думаю, что мне не хватает понимания Docker, потому что я фактически не понимаю все о контейнерах объема данных (они просто остановили контейнеры, которые монтируют том?).
Кроме того, если я перезапущу сервер, а затем запустите docker-compose up
, какие команды будут запущены? Будет ли он запускать тот же контейнер, который был остановлен с данным CMD?
В любом случае, вот мой docker-compose.yml:
version: '2'
services:
mongodata:
image: mongo:latest
volumes:
- /data/db
command: --break-mongo
mongo:
image: mongo:latest
volumes_from:
- mongodata
ports:
- "28001:27017"
command: --smallfiles --rest --auth
my_project:
build: .
ports:
- "6060:8080"
depends_on:
- mongo
- mongodata
links:
- mongo
И вот мой файл Dockerfile для создания моего изображения проекта:
FROM golang
ADD . /go/src/my_project
RUN cd /go/src/my_project && go get
RUN go install my_project
RUN my_project -setup
ENTRYPOINT /go/bin/my_project
EXPOSE 8080