Заметки про Docker
За время работы с Docker собралось немного мелочей, которые я и хочу здесь собрать.
Сборка образа
docker build -t $SERVICE_NAME:$SERVICE_VERSION .
Multi-stage Dockerfile
Docker с версии 17.05 умеет multi-stage Dockerfile. Это порой значительно уменьшает размер конечного образа. Пример:
FROM golang AS builder
ADD . /go/src/my-service/
RUN cd /go/src/my-service/ && go get .
RUN go install my-service
FROM alpine
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
COPY --from=builder /go/bin/my-service /bin/my-service
ENTRYPOINT /bin/my-service
Публикация образа в registry
docker tag $SERVICE_NAME:$SERVICE_VERSION registry.example.com/$SERVICE_NAME:$SERVICE_VERSION
docker push registry.example.com/$SERVICE_NAME:$SERVICE_VERSION
Nexus начиная с версии 3 поддерживает хранение docker-реестра. Из приятных фишечек - авторизация и о, роботы, возможность удалять образы!
Удалить все контейнеры со статусом “Exited”
docker rm -f $(docker ps -a -q --filter "status=exited")
IP хоста в контейнере
Начиная с версии Docker 18.03 внутри контейнера появился host.docker.internal
- доменное имя, которое указывет на хост. До версии 20.10.0 это работало только для Windows и Mac, но там стало работать и для Linux.
В версии 20.10.0 это перестало работать по умолчанию, теперь, чтобы контейнер мог достучаться до хоста, нужно добавить ключ
--add-host=host.docker.internal:host-gateway
Для Сompose и Nomad все точно так же работает через extra_hosts