参考動画
Youtuberの山浦さんの動画を参考にDockerを構築していきます。
今回自分はDocker構築初めてです。
この記事と動画で身に付くこと
- Dockerの使い方
- 周辺ツール
- Webアプリ環境
- CI/CD
- Linux
- Git
注意
この記事では、Macで作業をしていきます。
Dockerとは
1台のPCで仮想環境を作り、違うPCでも同じ環境で開発ができます。
これによって、アプリを簡単に開発、デプロイができる仕組みです。
Web系の企業では、ほぼ使っています。Dockerによって
1.開発環境を簡単に作れる
2.開発メンバーの中で、開発環境を統一できる
3.テスト環境や本番環境の統一
ができます。
Dockerがないとなぜ困るのか?
環境構築が大変です。💦みんなそれぞれPCの環境は違います。
人によってエラーが出たり、バージョンが違ったり、OSが違ったりして、
環境構築や開発、デプロイなどが効率悪くなってしまいます。😭
環境構築(Mac)
ここで必要なツールは、
1.iTerm2(ターミナル)
2.VSCode
3.Docker
4.Git
です。もう入っている方は、作業は不要です。まだの方は下の動画を参考に。
Linuxについて
ここでは解説を省きます。Linuxを全くわからない場合は山浦さんのUdemyをやってみてください。
Linutとシェルについても紙に書いてみました。絵が下手ですみません😭
Dockerの使い方、仕組み
Dockerの仕組みを書いていきます。これはYoutubeの動画を引用していきます。
docker run hello-world
でコマンドを実行します。その時以下の画像のようなことが起こっています。
Dockerはまず、イメージ(コンテナに必要なものを記載した雛形)から
コンテナ(Dockerの実行環境)を作成して、コンテナを起動させています。
上のコマンドの詳細についてです。
①docker run hello-worldを実行
②実行したコマンドをデーモン(イメージやコンテナを操作するアプリケーション)が受け取って、コマンドを実行するように指示
③hello-worldのdockerのイメージをDockerレジストリから取得。イメージをオンライン上で保存するのがレジストリ
④取得したイメージからコンテナ作成
⑤コンテナを起動させてHello from dockerと表示される
引用 https://www.youtube.com/watch?v=oHcLtX_DPko&list=PLs3eD4QT7ow6O5wyRRnRCvB7JMuq_D3-D&index=6
アプリ作成
ここではDockerのイメージとコンテナの基本的な操作をやっていきます。
以下の順番でやっていきます。
まずは何かディレクトリを作っていきます。ここではサンプルコードはRubyにします。
まずはWebサーバーを作ります。
require 'webrick'
server = WEBrick::HTTPServer.new(
DocumentRoot: './',
BindAddres: '0.0.0.0',
Port:8000
)
server.mount_proc('/') do |req, res|
res.body = 'hello'
end
server.start
次にDockerfile
を作ります。
FROM ruby:2.7
RUN mkdir /var/www
COPY main.rb /var/www
CMD ["ruby","var/www/main.rb"]
イメージとしてこんな感じです。
引用 https://www.youtube.com/watch?v=ZxwHVaq7FJo&list=PLs3eD4QT7ow6O5wyRRnRCvB7JMuq_D3-D&index=7
これでイメージの元が完成しました。ここから実行していきます。
- イメージ作成
docker image build -t sample/webrick:latest .
⚫︎補足
-t
はタグ
.は今いるディレクトリ
sampleが名前空間
webrickはイメージのタグ名
latestは最新バージョン
次にイメージができたか確認していきます。
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sample/webrick latest 44c9e23f04a0 About a minute ago 864MB
次はイメージからコンテナを作成、起動します。
docker-practice % docker container run -p 8000:8000 --name webrick sample/webrick:latest
[2024-04-25 09:35:08] INFO WEBrick 1.6.1
[2024-04-25 09:35:08] INFO ruby 2.7.8 (2023-03-30) [x86_64-linux]
[2024-04-25 09:35:08] INFO WEBrick::HTTPServer#start: pid=1 port=8000
⚫︎補足
container runで作成と起動をセットでやる。
-pがポートの指定
-- name webrickという名前をつける
sample/webrick:latestはイメージ名
これで立ち上がっているか確認しましょう。ブラウザで、localhost:8000
を起動。
ここでhelloと表示されます。ここのhelloはmain.rbの
server.mount_proc('/') do |req, res|
res.body = 'hello'
end
のレスポンスの部分です。
コンテナのライフサイクル(作成、起動、停止、削除)
コンテナのライフサイクルを見ていきます。
1.作成
2.起動
3.停止
4.削除
起動しているコンテナをCtr + cで一回止めています。コマンドで止めるなら
docker container stop webrick
です。停止したコンテナを確認してみましょう。
docker container ls -a
で停止中のコンテナも出てきます。そして停止中のコンテナを削除します。
docker container remove webrick
コンテナのログ、コマンド実行、掃除
ログ、コマンド実行、掃除はよく使うみたいです。再度コンテナを実行します。
docker container run -d -p 8000:8000 --name webrick sample/webrick:latest
f01e32ea6a2fd2d8e8debbd38f3c4b9b3106b1eccfbe187a99d3f44883f1568f
今回は-d
を使います。バックグラウンドでコンテナを実行し、コンテナを停止するまでコンテナのログを表示しないようにするために使用されます。確認すると以下のようになります。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f01e32ea6a2f sample/webrick:latest "ruby var/www/main.rb" About a minute ago Up About a minute 0.0.0.0:8000->8000/tcp webrick
次にログを確認していきます。
docker container logs webrick
[2024-04-25 09:52:17] INFO WEBrick 1.6.1
[2024-04-25 09:52:17] INFO ruby 2.7.8 (2023-03-30) [x86_64-linux]
[2024-04-25 09:52:17] INFO WEBrick::HTTPServer#start: pid=1 port=8000
実行中のDockerコンテナ内でコマンドを実行するためのコマンドを使います。ここでは、ruby -vを実行します。
docker-practice % docker container exec webrick ruby -v
ruby 2.7.8p225 (2023-03-30 revision 1f4d455848) [x86_64-linux]
最後にコンテナの掃除です。使ってコンテナを一気に消します。
docker-practice % docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N]
でyesをすると
Total reclaimed space: 3.471GB
みたいに掃除したコンテナのメモリが出てきます。3GBも使っていたのは、かなりPCを圧迫していました。😅
dockerのコマンドを忘れたら?
下のコマンドで探すことができます。
docker --help
で探すことができます。
もしイメージを探す場合は
docker image --help
で探すことができます。
Dockerfile
ここではDockerのイメージを用意するところです。ここで開発環境を作ることができます。
この画像ですね。
新しくsrcディレクトリを作成します。その中に、Gemfileを作りました。
ここでは、sinatoraを使用します。まずはGemfileを使います。
# fronzen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}"}
gem 'sinatra'
資料