Meteor Up Docker and Graphicsmagick

2020-03-01 15:49发布

I'm looking for how to install Graphicsmagick at Meteor Up Docker.

I found this solution (Access binaries inside docker) but I couldn't make work, where do I put those lines at start.sh?

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

That's my 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条回答
甜甜的少女心
2楼-- · 2020-03-01 16:16

Why don't you add the following package meteor add cfs:graphicsmagick https://atmospherejs.com/cfs/graphicsmagick

It tries to make sure Graphicsmagick is available. It worked for my use case i think it will work with docker too.

查看更多
劫难
3楼-- · 2020-03-01 16:20

I couldn't get the docker image that @hobbyhobbit mentioned to work, so I figured out how to write one that uses abernix/meteord:base and then has graphicsmagick installed. Very simple, but it seems to be working for me on Meteor 1.4.1.1

I just did this in my mup.js file

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

This was a huge pain to get working, so I'd be happy to help anyone who is struggling with this.

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

查看更多
Summer. ? 凉城
4楼-- · 2020-03-01 16:25

Build an image for get things right, but you can do temporary:

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

docker restart MeteorAppName

Check imagemagick: docker exec -it MeteorAppName convert -version

查看更多
Melony?
5楼-- · 2020-03-01 16:26

The development Version of Meteor Up at Kadirahq allows specification of a custom Docker Image in the config file (mup.js).

MeteorD-Images with Graphicsmagick installed are available on Docker Hub.

This got me a working deployment (Meteor 1.3.2.4, Meter Up 309cefb, Node v5.4.1):

mup.js:

module.exports = {
  …
  meteor: {
    dockerImage: 'ianmartorell/meteord-graphicsmagick',
    …
  },
};
查看更多
老娘就宠你
6楼-- · 2020-03-01 16:29

Re-installing the graphicsmagick package every time you re-start the containers seems like a hack I wouldn't want to do.

If you're modifying the start script already, might as well use a Dockerfile:

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

Then modify start.sh template to build a new docker image with graphicsmagick, tag it and use that image instead:

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

EDIT: Where to put Dockerfile?

start.sh template is copied to /opt/<appName>/config/, currently the Dockerfile would need to be in that same directory (/opt/<appName>/config/Dockerfile)

see Linux init Task

Alternatively, you can specify specific Dockerfile with the -f flag for the docker build

Or your third option is to pipe Dockerfile to docker build using a here document

I've updated the start.sh gist, we no longer pull the meteord:base image and build it instead:

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

The docker build will run every time, but as long as the requirements aren't changing, docker will use the docker images it cached.

查看更多
仙女界的扛把子
7楼-- · 2020-03-01 16:38

If the if statement successes, you should be able to see a running container corresponding to the image you are grepping. In my opinion you can add the two lines after the fi to obtain the environment variable.

查看更多
登录 后发表回答