10

我正在寻找如何在 Meteor Up Docker 上安装 Graphicsmagick。

我找到了这个解决方案(在 docker 中访问二进制文件),但我无法工作,我应该把这些行放在start.sh哪里?

meteorDockerId=docker ps | grep meteorhacks/meteord:base | awk '{print $1}'
docker exec $meteorDockerId apt-get install graphicsmagick -y

那是我的start.sh

#!/bin/bash

APPNAME=instagatas
APP_PATH=/opt/$APPNAME
BUNDLE_PATH=$APP_PATH/current
ENV_FILE=$APP_PATH/config/env.list
PORT=80
USE_LOCAL_MONGO=0

# remove previous version of the app, if exists
docker rm -f $APPNAME

# remove frontend container if exists
docker rm -f $APPNAME-frontend

set -e
docker pull meteorhacks/meteord:base

if [ "$USE_LOCAL_MONGO" == "1" ]; then
  docker run \
    -d \
    --restart=always \
    --publish=$PORT:80 \
    --volume=$BUNDLE_PATH:/bundle \
    --env-file=$ENV_FILE \
    --link=mongodb:mongodb \
    --hostname="$HOSTNAME-$APPNAME" \
    --env=MONGO_URL=mongodb://mongodb:27017/$APPNAME \
    --name=$APPNAME \
    meteorhacks/meteord:base
else
  docker run \
    -d \
    --restart=always \
    --publish=$PORT:80 \
    --volume=$BUNDLE_PATH:/bundle \
    --hostname="$HOSTNAME-$APPNAME" \
    --env-file=$ENV_FILE \
    --name=$APPNAME \
    meteorhacks/meteord:base
fi


  docker pull meteorhacks/mup-frontend-server:latest
  docker run \
    -d \
    --restart=always \
    --volume=/opt/$APPNAME/config/bundle.crt:/bundle.crt \
    --volume=/opt/$APPNAME/config/private.key:/private.key \
    --link=$APPNAME:backend \
    --publish=443:443 \
    --name=$APPNAME-frontend \
    meteorhacks/mup-frontend-server /start.sh
4

6 回答 6

14

每次重新启动容器时重新安装 graphicsmagick 包似乎是我不想做的黑客行为。

如果您已经在修改启动脚本,不妨使用 Dockerfile:

FROM meteorhacks/meteord:base
RUN apt-get install graphicsmagick -y

然后修改start.sh模板以使用 graphicsmagick 构建一个新的 docker 图像,标记它并使用该图像代替:

见:https ://gist.github.com/so0k/7d4be21c5e2d9abd3743/revisions

编辑:在哪里放置 Dockerfile?

start.sh模板已复制到/opt/<appName>/config/,目前 Dockerfile 需要位于同一目录中 ( /opt/<appName>/config/Dockerfile)

请参阅Linux 初始化任务

或者,您可以指定带有-f标志的特定 Dockerfiledocker build

或者您的第三个选择是将 Dockerfile 通过管道传输到docker build使用此处的文档

我已经更新了start.sh 要点,我们不再拉取流星:基础图像并改为构建它:

docker build -t meteorhacks/meteord:app - << EOF
FROM meteorhacks/meteord:base
RUN apt-get install graphicsmagick -y
EOF

每次都会运行,docker build但只要需求不变,docker 就会使用它缓存的 docker 图像。

于 2015-08-09T11:59:45.193 回答
3

Kadirahq的Meteor Up开发版本允许在配置文件 ( )中指定自定义 Docker 映像。mup.js

安装了 Graphicsmagick 的 MeteorD-Images 在Docker Hub上可用。

这让我得到了一个有效的部署(Meteor 1.3.2.4,Meter Up 309cefb,Node v5.4.1):

mup.js:

module.exports = {
  …
  meteor: {
    dockerImage: 'ianmartorell/meteord-graphicsmagick',
    …
  },
};
于 2016-06-14T12:22:44.627 回答
1

我无法让@bskp 提到的 docker 镜像工作,所以我想出了如何编写一个使用 abernix/meteord:base 然后安装 graphicsmagick 的镜像。非常简单,但它似乎在 Meteor 1.4.1.1 上对我有用

我刚刚在我的 mup.js 文件中做了这个

docker: {
  image: "joshjoe/meteor-graphicsmagick",
},

开始工作是一个巨大的痛苦,所以我很乐意帮助任何为此苦苦挣扎的人。

https://github.com/c316/meteor-graphicsmagick

于 2016-09-12T14:57:16.453 回答
0

如果if 语句成功,您应该能够看到与您正在grepping的图像相对应的正在运行的容器。在我看来,您可以在fi之后添加两行以获得环境变量。

于 2015-08-09T07:47:17.790 回答
0

建立一个图像来做正确的事情,但你可以做临时的:

docker exec -it MeteorAppName apt-get install imagemagick -y

docker restart MeteorAppName

检查imagemagick:docker exec -it MeteorAppName convert -version

于 2016-08-18T02:38:26.120 回答
-4

为什么不添加以下包meteor add cfs:graphicsmagick https://atmospherejs.com/cfs/graphicsmagick

它试图确保 Graphicsmagick 可用。它适用于我的用例,我认为它也适用于 docker。

于 2015-08-09T13:09:40.303 回答