LoginSignup
68
22

初学者向けdocker基礎

Last updated at Posted at 2023-12-03

初めに

かなり簡略化した内容になっています。詳しく知りたい人は一番下の参考文献を見てください。そっちの方が100倍ためになります。この記事は、簡単な入りになればいいなと思ってます。

目次

  1. dockerの基礎概念
  2. dockerの基本コマンド
  3. Dockerfileの書き方
  4. yamlファイルについて
  5. docker composeについて

1. dockerの基礎概念

なんとびっくり、3つだけ
  • イメージ
  • コンテナ
  • Dockerfile

イメージとは

複数または、一つのレイヤからなるもの

イメージには、レイヤによって次の情報が入っています。

  • ベースイメージはなにか
  • 何がインストールしてあるか
  • 環境変数はどうなっているのか
  • どういうファイルを配置しているか

image.png

ベースイメージとは、最小限のオペレーティングシステムやランタイムが含まれています。(DockerfileでFROMから始まる部分に該当します。)
イメージはDocker Hubで公開されいます。
使い方参考サイト
(Docker Hubに公開されているのはDockerfileではありません)
簡単に言ったらGitHubみたいなものです。
Dockerイメージは、以下で検索可能です。
docker search [option] 検索対象
image.png
・stars
星のいいね数

・offical
公式イメージか否かを教えてくれる

コンテナとは

簡単に言うと、pcです。
厳密に言うと、ホストマシン上の隔離された領域のことです。

コンテナの特徴

  • コンテナはイメージを元に作られます。
  • dockerのCLIやAPIを使って、コンテナの生成、起動、停止が行えます。
  • 複数のコンテナは独立していてお互いに影響を及ぼさなず、個別に動かすことができます。
  • Docker Engine上なら、ローカル、仮想マシン、クラウド環境でも動きます。

image.png

Dockerfileについて

簡単に言うと、環境設定ファイルです。
厳密に言うと、既存のイメージにレイヤを積み重ねるためのファイルです。

DockerHubに上がっているイメージだけで問題があり、自分に都合の良いイメージを作るためにDockerfileを作成します

2. dockerの基本コマンド

これも、3つだけ
  1. イメージを作る(docker image build)
  2. コンテナ起動(docker container run)
  3. コンテナ内で何か操作をする(docker exec)

イメージを作る

docker image buildDockerfileからイメージを作成するコマンドです。

image.png

DockerHubに上がっているイメージをそのままbuildしてもいいですし、Dockerfileから独自のイメージをbuildしてもいい

コンテナ起動

docker container runは、イメージからコンテナを起動するコマンド

image.png

ここで大切なことは、このコマンドはイメージからコンテナを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ファイルで指定することができます。

具体例

.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の電源を消す
こんな感じで覚えて貰って大丈夫です!(ほんとは良くない……)

ここまでを目茶目茶簡単にまとめると

  1. Dockerfile(環境設定ファイル)を作成する。
  2. .yaml(複数コマンドを同時実行するファイル)を作成する
  3. docker compose up(pcの電源を付ける)を行います
  4. docker compose down(pcの電源を消す)を行います

終わりに

今回は、かなり省略して書きました。もっと詳しく知りたい人は以下の参考文献をみてください 機会があれば、これの続きでDockerfileの書き方の詳しい点にフォーカスして記事を書こうと思います

参考文献
docker公式リファレン
僕が勉強した教材←この記事と被ってる内容かなり多いです。僕の勉強元なので…

68
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
22