Meteor Up Docker 和 Graphicsmagick

10

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

我找到了这个解决方案(Access binaries inside 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
6个回答

14

每次重新启动容器都重新安装graphicsmagick软件包似乎是一种我不想做的hack。

如果您已经修改了启动脚本,不妨使用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 init Task
或者,您可以使用-f标志指定特定的Dockerfile来进行docker build 或者,第三个选项是使用here document将Dockerfile传输到docker build
我已经更新了start.sh gist,我们不再拉取meteord:base镜像,而是构建它。
docker build -t meteorhacks/meteord:app - << EOF
FROM meteorhacks/meteord:base
RUN apt-get install graphicsmagick -y
EOF
< p > docker build命令将每次运行,但只要要求不变,Docker将使用其缓存的Docker镜像。

我已经更新了我的答案,以回应您在哪里放置Dockerfile的评论。我认为将内容管道传输到start.sh模板中的docker build命令可能会更好。 - Vincent De Smet
我尝试了第三种选项,如果我使用 mupx restart,它可以正常工作,但是当我执行 mupx deploy 时, start.sh 会恢复到原始状态,因此我需要再次更改文件并重新启动。有没有办法避免这种情况发生? - Guima Ferreira
你是在模板文件夹下的start.sh还是/opt/.../config文件夹下进行更改的?你应该修改start.sh的模板。 - Vincent De Smet
我在/opt/.../conf进行了更改,但是找不到模板文件,它在哪里可以找到? - Guima Ferreira
1
对我来说,它在 /usr/local/lib/node_modules/mupx/templates/linux/start.sh 中。 - PhilippSpo
显示剩余9条评论

3
Kadirahq 的 Meteor Up 的开发版本中,可以在配置文件 (mup.js) 中指定自定义的 Docker 镜像。已经在 Docker Hub 上提供了安装 Graphicsmagick 的 MeteorD 镜像。
以下是我成功部署的版本 (Meteor 1.3.2.4, Meter Up 309cefb, Node v5.4.1): mup.js:
module.exports = {
  …
  meteor: {
    dockerImage: 'ianmartorell/meteord-graphicsmagick',
    …
  },
};

1
你需要在某个地方下载这个Docker镜像吗?还是只需在mup.js文件中进行更改就可以工作了? - JoshJoe

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


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

0

构建一个图像以获取正确的事情, 但你可以暂时这样做:

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

docker restart MeteorAppName

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


-4

我正在使用这个软件包,但服务器需要安装Graphicsmagick,这就是我正在尝试做的事情。 - Guima Ferreira
@DiegoGuimarães 那个软件包也为我安装了gm,这很有趣,可能是另一个问题。 - Mark Uretsky
1
这将不会在您的服务器上安装该软件包。 - Dude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接