🐳

dockerでrust環境構築してhello world

2022/02/20に公開1

ディレクトリ構成

以降「mov」の文字の部分検索して全て任意の名前にしていただければいい感じにできると思います
←②とかの説明部分は消してください★

ymlファイル

version: "3.8"
volumes:
  db-store:
services:
  mov-app:←②
    container_name: mov-app←(②はこっちかも?)
    build: ./docker/rust
    tty: true
    volumes:
      - ../backend:/work/backend
    ports:
      - 8083:8083
    networks:
      - mov-app-net

networks:
  mov-app-net:
    driver: bridge

Dockerfile

infrastructure/docker/rust/Dockerfile

# 何をベースに始めるか
FROM rust:1.52.1

# キー=バリュー
# cargoの出力ディレクトリの指定
ENV CARGO_TARGET_DIR=/tmp/target \
  DEBIAN_FRONTEND=noninteractive \
  LC_CTYPE=ja_JP.utf8 \
  LANG=ja_JP.utf8

RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get install -y -q \
  ca-certificates \
  locales \
  apt-transport-https\
  libssl-dev \
  libpq-dev \
  pkg-config \
  curl \
  build-essential \
  libdbus-1-dev \
  libsqlite3-dev \
  mariadb-client \
  git \
  wget \
  && echo "ja_JP UTF-8" > /etc/locale.gen \
  && locale-gen \
  && echo "install rust tools" \
  && rustup component add rustfmt \
  && cargo install cargo-watch cargo-make \
  && cargo install sqlx-cli --no-default-features --features mysql

WORKDIR /work/backend

rustコンテナを爆誕

ターミナルにて

docker-compose -p mov(←①) up -d

dockerのdashboardで見るとこんな感じ

https://zenn.dev/marimoofficial/articles/644cb77510eda7 にて説明してますが同時にmysqlのコンテナも作ってますのでmov-dbというものがあります

rustプロジェクト作成

yamlファイルにて自分のローカル(コロンの左側)のvolumesは ../backend(*) に設定しましたので
infrastructureと同じ階層にてrustのプロジェクトを作成しまする

cargo new backend(cargo new以下は*と同じ名前にする)

※ちなみにbackendの中に作られるものが、でmov-appのコンテナに入っていきます
下記コマンドでbackendの中身がそんままできてるのがみれます
infrastructureにて

docker-compose -p mov exec mov-app bash

満を持してhello world

またinfrustructureに移動
そこで

docker-compose -p mov exec mov-app(dashboardでいう②のとこ) cargo watch -x run

とすると

hello worldがお目見えです

Discussion