Чтобы использовать plumber
внутри контейнера docker, вам необходимо:
Создать Dockerfile со всеми зависимостями
Ссылка внутри docker -compose.yml
Создание файла Docker
В этом примере вы создаете изображение с r-script
какой маршрут равен src/myscript.R
FROM rocker/r-apt:bionic
RUN apt-get update && \
apt-get install -y -qq \
libmariadb-client-lgpl-dev \
r-cran-plumber \
r-cran-reshape2 \
r-cran-rmysql \
r-cran-dplyr
COPY src src
RUN chmod 755 src
WORKDIR /src
RUN chmod 777 myscript.R
EXPOSE 8000
CMD ["Rscript","myscript.R"]
Для построения образа с помощью Dockerfile запустите
docker image build -t my-plumber-image .
Обратите внимание, что .
в конце является текущим рабочим каталогом, а -t
обозначает «тег»
Свяжите изображение внутри docker -compose
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql-container
environment:
- MYSQL_ROOT_PASSWORD=mypassword
ports:
- "3306:3306"
plumber:
image: my-plumber-image
build: my-plumber-image
container_name: plumber-container
ports:
- "8000:8000"
links:
- mysql
После того, как сантехник свяжется с другими службами, доступ к которым вы можете получить через порт 8000, как и любой другой запрос POST / GET. ip
определяется локальной машиной.
Я рекомендую вам использовать почтальона для проверки запросов. Надеюсь, это поможет вам.
Я не упомянул ни одного примера с R
и plumber
, потому что на их сайте это действительно хороший короткий.
Соединение с БД
Если вы хотите установить соединение с контейнером, используйте следующий скрипт:
DB_conn <- function(){
return(RMySQL::dbConnect(RMySQL::MySQL(),
user = 'root',
password = 'mypassword',
dbname = 'mydatabase',
host = HOST, # Container name like "myservice_mysql_1" look in the logs
port = PORT) # Default port 3306
)
}