当前位置: 首页 > 软件库 > 云计算 > >

mix_docker

授权协议 MIT License
开发语言 Elixir
所属分类 云计算
软件类型 开源软件
地区 不详
投 递 者 毛胜
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

mix docker

�� �� This project is now obsolete and abandoned! �� ��

With docker multi-stage builds you can simply use:

# Dockerfile
FROM elixir:1.6.5-alpine as build

# install build dependencies
RUN apk add --update git

# prepare build dir
RUN mkdir /app
WORKDIR /app

# install hex + rebar
RUN mix local.hex --force && \
    mix local.rebar --force

# set build ENV
ENV MIX_ENV=prod

# install mix dependencies
COPY mix.exs mix.lock ./
COPY config ./
COPY deps ./
RUN mix deps.compile

# build release
COPY . .
RUN mix release --no-tar --verbose

# prepare release image
FROM alpine:3.6
RUN apk add --update bash openssl

RUN mkdir /app && chown -R nobody: /app
WORKDIR /app
USER nobody

COPY --from=build /app/_build/prod/rel/myapp ./

ENV REPLACE_OS_VARS=true
ENV HTTP_PORT=4000 BEAM_PORT=14000 ERL_EPMD_PORT=24000
EXPOSE $HTTP_PORT $BEAM_PORT $ERL_EPMD_PORT

ENTRYPOINT ["/app/bin/myapp"]

and standard docker build.

OLD README CONTENT

Put your Elixir app inside minimal Docker image.Based on alpine linuxand distillery releases.

Installation

  1. Add mix_docker to your list of dependencies in mix.exs:
def deps do
  [{:mix_docker, "~> 0.5.0"}]
end
  1. Configure Docker image name
# config/config.exs
config :mix_docker, image: "recruitee/hello"
  1. Run mix docker.init to init distillery release configuration

  2. Run mix docker.build & mix docker.release to build the image. See Usage for more.

Guides

Usage

Build a release

Run mix docker.build to build a release inside docker container

Create minimal run container

Run mix docker.release to put the release inside minimal docker image

Publish to docker registry

Run mix docker.publish to push newly created image to docker registry

All three in one pass

Run mix docker.shipit

Customize default Dockerfiles

Run mix docker.customize

FAQ

How to configure my app?

Using ENV variables.The provided Docker images contain REPLACE_OS_VARS=true, so you can use "${VAR_NAME}" syntax in config/prod.exslike this:

config :hello, Hello.Endpoint,
  server: true,
  url: [host: "${DOMAIN}"]

config :hello, Hello.Mailer,
  adapter: Bamboo.MailgunAdapter,
  api_key: "${MAILGUN_API_KEY}"

How to configure the image tag?

By default, the image tag uses the following format: {mix-version}.{git-count}-{git-sha}You can provide your own tag template in config/prod.exs like this:

# config/config.exs
config :mix_docker,
  tag: "dev_{mix-version}_{git-sha}"

Additionally, you can pass the tag as an argument to mix docker.publish and mix docker.shipit:

mix docker.publish --tag "{mix-version}-{git-branch}"

See below for a list of possible variables

Variable Description
{mix-version} Current project version from mix.exs
{rel-version} Default distillery release version
{git-sha} Git commit SHA (10 characters)
{git-shaN} Git commit SHA (N characters)
{git-count} Git commit count
{git-branch} Git branch

What version of Erlang/Elixir is installed by default?

The default dockerfiles are based on bitwalker/alpine-erlang and elixir installed from apk repository

The following table summarizes the default versions:

mix_docker version alpine erlang elixir
up to 0.3.2 3.4 18.3 elixir@edge at the time of build
0.4.0 3.5 19.2 elixir@edge=1.4.1-r0
0.4.1 3.5 19.2 elixir@edge=1.4.2-r0

Please note that you can use any version you want by customizing your dockerfiles. See mix docker.customize for reference.

How to attach to running app using remote_console?

The easiest way is to docker exec into running container and run the following command,where CID is the app container IO and hello is the name of your app.

docker exec -it CID /opt/app/bin/hello remote_console

Using alternative Dockerfiles

How to install additional packages into build/release image?

First, run mix docker.customize to copy Dockerfile.build and Dockerfile.release into your project directory.Now you can add whatever you like using standard Dockerfile commands.Feel free to add some more apk packages or run some custom commands.TIP: To keep the build process efficient check whether a given package is required only forcompilation (build) or runtime (release) or both.

How to move the Dockerfiles?

You can specify where to find the two Dockerfiles in the config.

# config/config.exs
config :mix_docker,
  dockerfile_build: "path/to/Dockerfile.build",
  dockerfile_release: "path/to/Dockerfile.release"

The path is relative to the project root, and the files must be located insidethe root.

How to configure an Umbrella app?

The default build Dockerfile does not handle the installation of umbrella appdeps, so you will need to modify it to match the structure of your project.

Run mix docker.customize and then edit Dockerfile.build to copy acrosseach of your umbrella's applications.

COPY mix.exs mix.lock ./

RUN mkdir -p apps/my_first_app/config
COPY apps/my_first_app/mix.exs apps/my_first_app/
COPY apps/my_first_app/config/* apps/my_first_app/config/

RUN mkdir -p apps/my_second_app/config
COPY apps/my_second_app/mix.exs apps/my_second_app/
COPY apps/my_second_app/config/* apps/my_second_app/config/

# etc.

How to configure a Phoenix app?

To run a Phoenix app you'll need to install additional packages into the build image: run mix docker.customize.

Modify the apk --no-cache --update add command in the Dockerfile.build as follows (add nodejs and python):

# Install Elixir and basic build dependencies
RUN \
    echo "@edge http://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
    apk update && \
    apk --no-cache --update add \
      git make g++ \
      nodejs python \
      elixir@edge && \
    rm -rf /var/cache/apk/*

Install nodejs dependencies and cache them by adding the following lines before the COPY command:

# Cache node deps
COPY package.json ./
RUN npm install

Build and digest static assets by adding the following lines after the COPY command:

RUN ./node_modules/brunch/bin/brunch b -p && \
    mix phoenix.digest

Add the following directories to .dockerignore:

node_modules
priv/static

Remove config/prod.secret.exs file and remove a reference to it from config/prod.exs. Configure your app's secrets directly in config/prod.exs using the environment variables.

Make sure to add server: true to your app's Endpoint config.

Build the images and run the release image normally.

Check out this post for detailed walkthrough of the Phoenix app configuration.

  • docker jvm 容器项目Docker最初是作为笔记本电脑上的单独容器开始使用的,今年6月正式达到1.0 GA状态。 迄今为止,已有460多个贡献者进行了8,741次提交,275万次下载和14,000个“ Dockerized”应用程序,这位 2014年JAX创新奖得主 现已成为该领域增长最快的开源项目之一,并且有成千上万的Docker云中的容器。 在某种程度上,这取决于向高度可扩展的体系结构

  • 1、Docker-compose 简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量

  • 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患。优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而有差异。本文将介绍精简Docker镜像的几种通用方法。 精简Docker镜像大小的必要性 Docker镜像由很多镜像层(Layers)组成(最多127层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write

  • docker安装ES 镜像准备 1、镜像搜索 docker search elasticsearch 2、拉取镜像 docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2 罗老师 2020/9/4 19:19:41 docker network create somenetwork 罗老师 2020/9/4 19:19:48 dock

  • 企业级容器技术 Docker docker隔离级别中包含两个核心组成: Namespace(名称空间):namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在内核,各 个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机 的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一

  • Fastdfs   手动搭建,需要ifconfig,手动设置TRACKER_IP为外网ip docker run -d --name=tracker -v /home/fastdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh   docker run -d --name

  • docker安装 安装 卸载docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \

  • 新建一个文件docker-compose.yml version: '3' services: #mysql_service mysql: image: mysql:5.7 restart: always container_name: mysql environment: MYSQL_ROOT_PASSWORD: chen command

相关阅读

相关文章

相关问答

相关文档