初めまして。「あなたの学びをシェア!2020年までにUdemyで学んだこと03【PR】Udemy Advent Calendar 2020」の9日目を担当させていただきます。
今回は、私がDocker入門として購入した、「米国AI開発者がゼロから教えるDocker講座」について記事を書きたいと思います。
自分の経験
RailsでWebサービスの開発インターンを1年弱経験。Dockerは使用経験なし。
Linuxやgitは使用経験ありといった経験値です。
この講座について
レベル
初級〜上級
「Dockerとは」といった初球の内容から、CICDパイプラインの構築といった実用的な範囲まで網羅的に学ぶことができます。
学べること
- Dockerfileを書き、実際にコンテナを立ち上げることができるようになる
- Docker-composeを使って、複数のコンテナで構成されるWebアプリケーションの開発環境を整えることができる
- Dockerを使ったCICDパイプラインの構築
- Linuxの基礎コマンドなど,プログラミング学習に必要な知識の習得
ボリューム
土日で一通り学ぶことが可能です
実際に作成したDockerfileとdocker-composeファイル
講座ではデータベースはpostgres
を使っていたのですが、mysql
で構築してみました。また、講座ではruby2.5のDocker Imageを使用しているのですが、ruby2.6でrails6の環境構築を行いました。
rails6ではwebpackerがデフォルトのJavascriptコンパイラになっている影響で、node.jsのインストール関連で躓いたのが印象に残っています。
Dockerfile
FROM ruby:2.6
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y \
build-essential\
libpq-dev\
nodejs\
yarn
WORKDIR /work_dir
COPY Gemfile /work_dir/Gemfile
COPY Gemfile.lock /work_dir/Gemfile.lock
RUN bundle install
COPY . /work_dir
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"]
docker-compose.yml
version: "3"
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: <%= ENV.fetch("DATABASE_PASSWORD") %>
MYSQL_DATABASE: root
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/work_dir
environment:
- "DATABASE_PASSWORD=password"
ports:
- "3000:3000"
depends_on:
- db
stdin_open: true
tty: true
volumes:
mysql-data:
driver: local
受講してよかった点・感想
Dockerという今や当たり前の技術を学べて、満足度は星5つです。
ボリューミーな内容なので、2周することをお勧めします。
「なぜDockerが必要なのか」、といったWhyの部分と、「docker-composeとは」、といったWhatの部分が両方あったのですんなりと理解がしやすい講義内容だと思います。
また、ShellやKarnelといったOS周りの知識もこの講座を通じて少し身につけることができました。