スクールで学んだ環境と同じ環境をDockerで構築したい!!!いろんな記事を読み漁って勉強した集大成を書き綴っていきます。プログラミング初めて2カ月の初学者のため、たくさん間違いがあるかもしれません。
1 2 3 4 5 6 7 8 9 10 |
mkdir dockertest2 cd dockertest2 touch docker-compose.yml touch Gemfile touch Gemfile.lock touch entrypoint.sh touch Dockerfile touch .gitignore touch .env code . |
1 |
.env |
.gitignoreファイルは、簡単に言うとこのファイルの中身はGithubに反映させませんよってファイルです。この設定でcommitしても.envファイルはGithubに反映されなくなります。API_keyなど、Githubに反映させてはダメなものは.envファイル内に記入し、環境変数を隠しておきます。
1 2 3 4 5 6 7 8 |
#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@" |
entrypoint.sh注意!#はコメントアウトじゃないのでそのまま残しておかないとうまく起動できません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
version: '3.7' services: db: image: mysql:8.0 platform: linux/x86_64 command: --default-authentication-plugin=mysql_native_password ports: - "3306:3306" volumes: - db:/var/lib/mysql environment: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' env_file: - .env security_opt: - seccomp:unconfined app: build: context: ./ dockerfile: Dockerfile env_file: - .env stdin_open: true tty: true volumes: - ./app:/myapp - bundle:/usr/local/bundle - /myapp/app/node_modules command: bash -c "rm -rf tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" depends_on: - db ports: - "3000:3000" environment: TZ: Asia/Tokyo volumes: db: driver: local bundle: driver: local |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
FROM ruby:2.6.5 ENV TZ Asia/Tokyo RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \ && apt-get update -qq \ && apt-get install -y nodejs \ && npm install -g yarn WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install # COPY app/package.json app/yarn.lock /myapp/app/ # WORKDIR /myapp/app # RUN yarn install # WORKDIR /myapp COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"] |
Dockerfile Rubyのバージョン指定 このファイルの#はコメントアウトです、最初はコメントアウトした状態にしておかないとエラー出ます。
1 2 |
source 'https://rubygems.org' gem 'rails', '6.0.0' |
1 |
docker-compose run --no-deps app rails new . --force --database=mysql --skip-test --skip-spring --webpack |
docker compose内でrailsファイルを作ります。完了までに5分ほどかかるので待っててください。
1 2 3 4 5 6 |
pwd /home/gake/dockertest whoami gake sudo chown -R gake:gake /home/gake/dockertest |
上記コマンドは例です。
pwdの結果、whoamiの結果は人それぞれ違います。
sudo chown -R whoamiの結果:whoamiの結果 pwdの結果 となるようにコマンドを打ってください。これでファイル内の権限を全て取ってます。もしかしたら、このコマンドは人によっては省いてもいいかもしれません。
1 2 3 4 5 6 7 |
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: host: db |
database.ymlファイルを変更し、Dockerfileのコメントアウトを外します。
1 |
docker-compose run app rails db:create |
データベース作成
1 |
docker-compose up |
Docker起動、これでhttp://localhost:3000/にrailsが立ち上がっています。
1 2 |
rm -rf app/.git git init |
一度ディレクトリ内のrailsアプリのgitを消します。これをやらないと、最初に作成したdockerfileとappが分かれてGithubで管理されます。
その後、git initでまとめてGithubに反映させるといつも通りに1つのリポジトリで管理することができます。
以上でDockerでの環境構築終わりです。うまくいかなかったり間違えてる部分、修正点あればぜひがけっぷちのツイッターからDMください。