初めに
かなり簡略化した内容になっています。詳しく知りたい人は一番下の参考文献を見てください。そっちの方が100倍ためになります。この記事は、簡単な入りになればいいなと思ってます。目次
- dockerの基礎概念
- dockerの基本コマンド
- Dockerfileの書き方
- yamlファイルについて
- docker composeについて
1. dockerの基礎概念
なんとびっくり、3つだけ- イメージ
- コンテナ
- Dockerfile
イメージとは
複数または、一つのレイヤからなるもの
イメージには、レイヤによって次の情報が入っています。
- ベースイメージはなにか
- 何がインストールしてあるか
- 環境変数はどうなっているのか
- どういうファイルを配置しているか
ベースイメージとは、最小限のオペレーティングシステムやランタイムが含まれています。(DockerfileでFROMから始まる部分に該当します。)
イメージはDocker Hubで公開されいます。
使い方参考サイト
(Docker Hubに公開されているのはDockerfileではありません)
簡単に言ったらGitHubみたいなものです。
Dockerイメージは、以下で検索可能です。
docker search [option] 検索対象
・stars
星のいいね数
・offical
公式イメージか否かを教えてくれる
コンテナとは
簡単に言うと、pcです。
厳密に言うと、ホストマシン上の隔離された領域のことです。
コンテナの特徴
- コンテナはイメージを元に作られます。
- dockerのCLIやAPIを使って、コンテナの生成、起動、停止が行えます。
- 複数のコンテナは独立していてお互いに影響を及ぼさなず、個別に動かすことができます。
- Docker Engine上なら、ローカル、仮想マシン、クラウド環境でも動きます。
Dockerfileについて
簡単に言うと、環境設定ファイルです。
厳密に言うと、既存のイメージにレイヤを積み重ねるためのファイルです。
DockerHubに上がっているイメージだけで問題があり、自分に都合の良いイメージを作るためにDockerfileを作成します
2. dockerの基本コマンド
これも、3つだけ- イメージを作る(docker image build)
- コンテナ起動(docker container run)
- コンテナ内で何か操作をする(docker exec)
イメージを作る
docker image build
はDockerfileからイメージを作成するコマンドです。
DockerHubに上がっているイメージをそのままbuildしてもいいですし、Dockerfileから独自のイメージをbuildしてもいい
コンテナ起動
docker container run
は、イメージからコンテナを起動するコマンド
ここで大切なことは、このコマンドはイメージからコンテナを1つだけ作るということです。
このコマンドは、大量にオプションがあるので公式リファレンスでオプションを調べてその都度使い方を調べて覚えていくと良いと思います。
補足説明
docker container run
は、複数のコマンドを同時に実行しています。
- image pull(git pullとやってることは同じでDockerHubからimageをpullしています)
- container create
- container start
コンテナ内で何か操作をする
container exec
は起動したコンテナにだけ命令を送るコマンドです。
起動したコンテナにだけ送るコマンドなのでdocker container run
した後でないと使えません。
このコマンドも、公式リファレンスでオプションを調べてその都度使い方を調べて覚えていくと良いと思います。
補足説明
コマンドを学習するときは、形に注目しましょう
docker image build(イメージをビルドする)
docker container run(コンテナを起動する)
docker container exec(コンテナ内で操作をする)
これらすべてに共通することは、AをBするということです
3. Dockerfileの書き方
FROM ruby:3.1.2
# ライブラリのインストール
RUN apt-get update -qq
#git activestarage sqlite3
RUN apt-get install -y git imagemagick libmagick++-dev sqlite3
#nodejs 16のインストール
#nodejs ver.16だとwebpackerと相性相が悪い
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt install -y nodejs
#yarnのインストール
RUN npm install n -g
RUN npm install -g yarn
RUN gem install rails -v 6.1.4
#workingディデクトリの作成
RUN mkdir /app
WORKDIR /app
COPY Gemfile Gemfile.lock /app
#Gemfileのコピーとインストール
RUN bundle install
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
FROM : ベースイメージを指定する
RUN : 任意のコマンドを実行する
COPY : ホストマシンのファイルをイメージに追加する
CMD : デフォルト命令を指定する(.yamlファイルに記述できるから不要)
ここの説明をすると時間が足りないので以下参照お願いします。
公式リファレンス
4. yamlファイルについて
\ | やりたいこと | docker コマンド | yamlファイル |
---|---|---|---|
app | コンテナの定義 | - | app: |
app | コンテナ名の指定 | container run --name | container_name: |
app | イメージのビルド | image build | build: |
app | バインドマウント | container run --mount | volumes: |
app | デフォルト命令の指定 | container run | command: |
これが何を意味しているのか?(用語は公式リファレンスで調べてください)
docker コマンドの後ろのoptionやパラメータをyamlファイルで指定することができます。
具体例
app:
container_name: docker-rails-app
build: .
dockerfile: docker/app/Dockerfile
volumes:
- .:/app
command:bash -c "bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- "3000:3000"
container run --name
太文字の部分を、.yamlファイルで指定したdocker-rails-nameで置き換えてくれます。
container run [command]
太文字の部分を、.yamlファイルで指定したbash -c "bundle exec rails s -p 3000 -b '0.0.0.0'"で置き換えてくれます。
補足:
上記のDockerfileと.yamlに関連は無いです。あくまでも、例の一つとして提示してます。
5. docker composeについて
- Dockerfile
- docker image build
- docker container run
docker composeは上記のdocker image buildとdocker container runを置き換えてくれています。
つまり、.yamlファイルとDockerfileが正しく設定できていれば毎回コンテナ毎にdocker image buildやdocker container runを行わずにdocker composeを行ってくれれば両方勝手に.yamlに記述した内容でやってくれます。
したがって、実際にdockerを扱う場合にはコンテナ起動をするのに
docker compose up
たったのこれだけです
起動したコンテナを停止するには、
docker compose down
これだけです。
dockerの説明はこれで以上です!!
追記
docker compose up / downの説明がわからない人は、
upはpcの電源を付ける
downはpcの電源を消す
こんな感じで覚えて貰って大丈夫です!(ほんとは良くない……)
ここまでを目茶目茶簡単にまとめると
- Dockerfile(環境設定ファイル)を作成する。
- .yaml(複数コマンドを同時実行するファイル)を作成する
- docker compose up(pcの電源を付ける)を行います
- docker compose down(pcの電源を消す)を行います
終わりに
今回は、かなり省略して書きました。もっと詳しく知りたい人は以下の参考文献をみてください 機会があれば、これの続きでDockerfileの書き方の詳しい点にフォーカスして記事を書こうと思います参考文献
docker公式リファレン
僕が勉強した教材←この記事と被ってる内容かなり多いです。僕の勉強元なので…