Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dockerのことが多分わかるハンズオン

 Dockerのことが多分わかるハンズオン

Yoshiki Kobayashi

June 13, 2020
Tweet

More Decks by Yoshiki Kobayashi

Other Decks in Programming

Transcript

  1. 今までの環境構築 • サーバを起動する • 必要なミドルウェアをインストールする(これだけでハードル高い) • エラーが出る • ミドルウェアの設定をする(都度ググる) •

    エラーがでる • アプリケーションデプロイする(これもしんどい) • エラーがでる • 解決する、またエラーがでる
  2. それではやってみよう FROM ubuntu:latest CMD echo "Hello World!" 適当な場所でDockerfileという名前でファイルを作成し、下記内容を入力 $ docker

    build -t dockerhandson:latest ビルドコマンドを実行 $ docker run dockerhandson:latest Hello World! 起動コマンドを実行
  3. それぞれの説明 FROM ubuntu:latest # FROMでベースイメージを決める。今回だと ubuntuをベースイメージで利用。 # https://hub.docker.com/_/ubuntu # 他のOSとかも色々選べるのでdockerhubを漁ってみることをおすすめ

    CMD echo "Hello World!" # コンテナの一番最後で実行するコマンドを CMDで定義 # 今回だとechoコマンドを最後に実行するように定義してあげてる # なので、実行するとHello World!が出力されていた Dockerfile
  4. それぞれの説明 $ docker build -t dockerhandson:latest docker build でビルドコマンドが実行できる -t

    オプションでタグ付けが可能。 {コンテナ名}:{バージョン}って感じでタグ付けして管理する。 バージョン名は省略可能だけど、省略すると latestが自動的につけられる ビルドコマンド
  5. 1コンテナ1プロセス? FROM nginx:latest Nginx,MySQL,Node.jsを起動するとなると、こんな感じ? FROM mysql:latest FROM node:latest $ docker

    build -t dockerhandson_nginx:latest . $ docker build -t dockerhandson_mysql:latest . $ docker build -t dockerhandson_node:latest . $ docker run dockerhandson_nginx:latest $ docker run dockerhandson_mysql:latest $ docker run dockerhandson_node:latest
  6. やってみよう version: "3.7" # dcoker-compose.ymlのバージョンを指定 services: # サービス内にコンテナ別の項目を記載していく web: image:

    nginx:1.18 # nginxのイメージを指定、{ベースイメージ}:{バージョン}の形式 container_name: handson_web # ビルドされた時のコンテナ名を指定 ports: - 80:80 # ローカルの80ポートをコンテナ内にフォワーディング db: image: mysql:5.7 # mysqlのイメージを指定 container_name: handson_db # 上と同じくコンテナ名 environment: # コンテナ内に環境変数を渡す。本来はパスワードはあんまり ‍♂ MYSQL_ROOT_PASSWORD: pass Nginx,MySQLを起動するdocker-compose.ymlを書いてみる 記述が終わったらdocker-compose up で起動!
  7. やってみよう① version: "3.7" # dcoker-compose.ymlのバージョンを指定 services: # サービス内にコンテナ別の項目を記載していく app: build:

    . container_name: handson_rails ports: - 3000:3000 volumes: - ./rails:/opt/rails tty: true stdin_open: true Dockerfileを書き換える(Rails6系はwebpackerがめんどくさいので5系で許して) FROM ruby:2.6 RUN apt update && apt install -y nodejs RUN gem install rails -v 5.2 WORKDIR /opt/rails docker-compose.ymlを書き換える
  8. やってみよう② $ pwd /opt/rails $ rails new handson コンテナビルドした後に、コンテナ内にログインする! $

    docker-compose build app $ docker-compose run app bash ここでrails new すると・・・
  9. もうちょっと書き換える コンテナ実行時にいくつかやることがあるので、スクリプトが実行されるように修正する railsのプログラムディレクトリ (今回だとrails/handson 内)に[entrypoint.sh]を作成 #!/bin/bash rm -fr tmp/pids #Railsの嫌いポイント。

    rails s -b 0.0.0.0 Dockerfileもちょっと修正。コンテナビルド時に bundle installが実行されるようにする。 FROM ruby:2.6 RUN apt update && apt install -y nodejs RUN gem install rails -v '5.2' WORKDIR /opt/rails/handson COPY rails/handson/Gemfile ./Gemfile COPY rails/handson/Gemfile.lock ./Gemfile.lock RUN bundle install CMD sh entrypoint.sh
  10. さっきまで何をしていたか詳細 1. rails new を実行するための仮コンテナを作って 2. そのコンテナを起動 3. rails newを実行すると

    4. ローカル内に雛形ファイルが作成される 5. Railsを起動するためのコンテナに作りかえて 6. 起動!!!!
  11. 諸々のコマンドの説明 • docker-compose build [名前] ◦ docker-composeのservice別にコンテナをビルドする ◦ rails +

    nuxtみたいな環境で、railsだけビルドしたい時とかに便利 • docker-compose run コンテナ名 コマンド ◦ 起動中のコンテナにログインするコマンド ◦ コンテナ内で作業するときとかに使う • docker-compose up もしくは docker-compose down ◦ docker-compose.ymlの設定内容でコンテナを起動、停止 ◦ Ctrl + cでも終了はできる ◦ ゴミが残ってしまうのでdownで消した方が良い
  12. • コンテナ内でmigrate実行したい! ◦ docker-compose run app rails db:migrate • どんなコンテナが起動しているか確認したい!

    ◦ docker ps -a • コンテナ内で作業したい!(再掲、個人的にめっちゃ使う) ◦ docker-compose run app bash ユースケースごとのコマンド