LoginSignup
2
3

More than 1 year has passed since last update.

もう逃げない。基礎から学ぶDocker入門 / Dockerの基本操作(イメージの作成, コンテナの起動, 停止, 削除)(2/9)

Last updated at Posted at 2021-09-23

はじめに

今まで、全然理解できていなくて逃げてたDockerに関して、しっかり理解していこうと思います。

コレまで、便利なんだろうなと思いながらも、逃げてました。

なので、開発環境では使いこなせるスキルにまでは理解したいと思います。

あと、暗記してたDockerコマンドを1つ1つ理解していきます。

以下のような順番で勉強していきます。

Dockerのイメージとコンテナの基本操作

アプリケーションを作成して、Dockerで実行する基本的な流れは大まかに以下になります

IMG_AF56A8F04EEB-1.jpeg

  • アプリケーションコードの用意
  • Dockerfileの用意
  • 上記2つをDockerイメージの雛形として、Dockerイメージを作成
  • Dockerイメージからコンテナを作成し、起動

この流れに沿って、やっていきます。

アプリケーションコードの用意

RubyでWebサーバを用意して、TOPページにアクセスしたらHelloと出力するやつを作ります。

worikng directory

practice_docker
├ Dockerfile
└ main.rb

Ruby で簡易的なwebサーバーを作成する

require 'webrick'

# サーバーの初期設定
server = WEBrick::HTTPServer.new(
  DocumentRoot: './',
  BindAddress: '0.0.0.0',
  Port: 8000
)

# TopページアクセスしたらHelloを返す設定
server.mount_proc('/') do |req, res|
  res.body = 'hello'
end

# サーバーの起動
server.start

簡易的な内容なのでツッコミ不要です。

Dockerファイルの用意

詳しくは説明しますが、Dockerファイルとはイメージの雛形になり、それを作ります。

Dockerファイルには主に以下の内容を書いていきます。

  • ベースとなるイメージ
  • ライブラリ
  • アプリケーションコード

この内容を元に、イメージを作成します。

FROM ruby:2.7

RUN mkdir /var/www
COPY main.rb /var/www

CMD ["ruby", "/var/www/main.rb"]
  • FROMは rubyのバージョンは2.7と指定
  • RUNは コマンドの実行、実際にRUNの右側に書いてあるのは読んで字の如くですね
  • COPYmain.rb/var/wwwに置くよ、という内容
  • CMDは Dockerイメージを作成・起動した時の実行するコマンドの指定
    • 今回は、実態ファイルmain.rbを実行せよという意味です

イメージの作成

これで、アプリケーションコードと、Dockerファイルというイメージを作成するための下準備が整いました。

ここからは、イメージを作成していきましょう。

基本的なコマンドはdocker image buildです。

docker image build -t sample/webrick:latest .

オプションの -t は今回、sample/webrick:latestという名前をつけますという意味

名前はなんでもいい/今回はwebrick使うので安易な名前だけどwebrickとした/最新バージョンなのでlatest
sample/webrick:latest

参考

.はカレントディレクトリのDockerファイルを参照するということをやってます

それでは、イメージを作成していきましょう。

(base) ~/P/practice_docker ❯❯❯ docker image build -t sample/webrick:latest .

[+] Building 67.6s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                       0.1s
 => => transferring dockerfile: 131B                                                                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/ruby:2.7                                                                                                                                                3.3s
 => [1/3] FROM docker.io/library/ruby:2.7@sha256:29cb031943ce6279ad88af96a29f2843fc37e33c705b6d511e23326e8cad1592                                                                                         63.1s
 => => resolve docker.io/library/ruby:2.7@sha256:29cb031943ce6279ad88af96a29f2843fc37e33c705b6d511e23326e8cad1592                                                                                          0.0s
 => => sha256:d2d425f2fea63cf7390882a28ba32f877d2e19dd38592e978cc7643ed388afb9 7.29kB / 7.29kB                                                                                                             0.0s
 => => sha256:2756ef5f69a5190f4308619e0f446d95f5515eef4a814dbad0bcebbbbc7b25a8 5.15MB / 5.15MB                                                                                                             3.2s
 => => sha256:29cb031943ce6279ad88af96a29f2843fc37e33c705b6d511e23326e8cad1592 1.86kB / 1.86kB                                                                                                             0.0s
 => => sha256:27602366229f69bdfad44d27db27a85d6da4ae3a2a43dbabe8b0dd9eb9f41267 2.00kB / 2.00kB                                                                                                             0.0s
 => => sha256:955615a668ce169f8a1443fc6b6e6215f43fe0babfb4790712a2d3171f34d366 54.93MB / 54.93MB                                                                                                          17.1s
 => => sha256:911ea9f2bd51e53a455297e0631e18a72a86d7e2c8e1807176e80f991bde5d64 10.87MB / 10.87MB                                                                                                           6.1s
 => => sha256:27b0a22ee906271a6ce9ddd1754fdd7d3b59078e0b57b6cc054c7ed7ac301587 54.57MB / 54.57MB                                                                                                          22.9s
 => => sha256:8584d51a9262f9a3a436dea09ba40fa50f85802018f9bd299eee1bf538481077 196.45MB / 196.45MB                                                                                                        33.6s
 => => sha256:4cc0225b12dba7873a1c73379908bbb2c66514129663f6e5f022ee4dff6ba799 198B / 198B                                                                                                                17.6s
 => => sha256:96ae2b648fae87777d3b8700a23b9bb506fbf0bf8bc7642857a31a3df9898194 14.51MB / 14.51MB                                                                                                          22.7s
 => => extracting sha256:955615a668ce169f8a1443fc6b6e6215f43fe0babfb4790712a2d3171f34d366                                                                                                                 11.6s
 => => sha256:07a5886d0a5ff026d91e07f7670ba6398fe6a266b301a5ebf1a7a40f78bebf76 173B / 173B                                                                                                                23.9s
 => => extracting sha256:2756ef5f69a5190f4308619e0f446d95f5515eef4a814dbad0bcebbbbc7b25a8                                                                                                                  2.1s
 => => extracting sha256:911ea9f2bd51e53a455297e0631e18a72a86d7e2c8e1807176e80f991bde5d64                                                                                                                  0.6s
 => => extracting sha256:27b0a22ee906271a6ce9ddd1754fdd7d3b59078e0b57b6cc054c7ed7ac301587                                                                                                                  6.3s
 => => extracting sha256:8584d51a9262f9a3a436dea09ba40fa50f85802018f9bd299eee1bf538481077                                                                                                                 19.4s
 => => extracting sha256:4cc0225b12dba7873a1c73379908bbb2c66514129663f6e5f022ee4dff6ba799                                                                                                                  0.0s
 => => extracting sha256:96ae2b648fae87777d3b8700a23b9bb506fbf0bf8bc7642857a31a3df9898194                                                                                                                  1.5s
 => => extracting sha256:07a5886d0a5ff026d91e07f7670ba6398fe6a266b301a5ebf1a7a40f78bebf76                                                                                                                  0.0s
 => [internal] load build context                                                                                                                                                                          0.0s
 => => transferring context: 338B                                                                                                                                                                          0.0s
 => [2/3] RUN mkdir /var/www                                                                                                                                                                               0.7s
 => [3/3] COPY main.rb /var/www                                                                                                                                                                            0.1s
 => exporting to image                                                                                                                                                                                     0.1s
 => => exporting layers                                                                                                                                                                                    0.0s
 => => writing image sha256:a1136785b9176e2a25e7a3a206745ce19cdd5d6c97ae7f53884f7fa5181428e6                                                                                                               0.0s
 => => naming to docker.io/sample/webrick:latest

イメージが作れたことの確認コマンドは以下

docker image ls

REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
sample/webrick   latest    a1136785b917   2 minutes ago   864MB
hello-world      latest    d1165f221234   6 months ago    13.3kB

今存在しているイメージのリストが出力されました。

ちゃんと名前つけたsample/webrickがありましたね。

うまくイメージが作成できたっぽいですね。

イメージからコンテナを作成し、起動させる

イメージ作成できたので、今度はイメージからコンテナを作成をして、起動させます。

基本的なコマンドはdocker container runです。

docker container run -p 8000:8000 --name webrick sample/webrick:latest

作成と起動をセットでやりました。

-pはportの指定です。

-p 8000:8000はローカルの8000番ポートを、dockerの8000番ポートに接続させています。

ポートはアプリケーションの宛先的なやつですね。

dockerは、1つの独立した環境なので、外部のローカルPCから何かする場合は、お互いのポート番号の指定が必要になります。

左側は、なんでもいいのですが、

右側のdockerのポートはmain.rbでサーバの設定でport: 8000を指定したので右側は8000を指定する必要があります。

--name xxxコンテナに名前をつけています。コンテナに名前をつけると、後々、操作する時に楽なので名前をつけています。

最後はイメージ名の指定です。

なんのイメージからコンテナを作成するかの指定です。

今回のイメージはsample/webrick:latestですね。

docker container run -p 8000:8000 --name webrick sample/webrick:latest

[2021-09-23 14:18:48] INFO  WEBrick 1.6.1
[2021-09-23 14:18:48] INFO  ruby 2.7.4 (2021-07-07) [x86_64-linux]
[2021-09-23 14:18:48] INFO  WEBrick::HTTPServer#start: pid=1 port=8000

おそらくコンテナが立ち上がった(サーバが立ち上がった)ぽい。

今回は、webサーバ作成したので port: 8000 にアクセスして確かめましょう。

requestのbodyにhello的な文言仕込んだのでそれが出力されればOKです。

http://localhost:8000/

で、ブラウザから hello と出力されればOKです。

:thumbsup:

コンテナの停止

起動中のコンテナを確認します。

docker container ls  

CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS          PORTS                                       NAMES
1536301bd55d   sample/webrick:latest   "ruby /var/www/main.…"   8 minutes ago   Up 13 seconds   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   webrick

おそらく、sample/webrick:latestのサーバが立ち上がってるというか、コンテナ(プロセス)が実行中だと思うので、それをctrl + cで起動中のプロセスを停止できます。

もしくは、以下のコマンドで停止できます。

docker container stop webrick

今度は、docker container lsしても具体的なコンテナは出てきませんね。

コンテナの削除

以下のコマンドでコンテナの削除ができます。

docker container rm webrick

消えましたね。

以上です。

アウトプット100本ノック実施中

2
3
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
2
3