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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

Avatar for Yoshiki Kobayashi

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 ユースケースごとのコマンド