darudaru

だるだるしてるエンジニア

初めてのDocker

「Docker For Mac」をインストールしました。Dockerに慣れたい。

Docker For Mac | Docker

Dockerがインストールできてるか確認

Dockerのバージョンを確認するコマンドを叩いてみる。

$ docker --version
Docker version 17.09.0-ce, build afdb6d4

$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21

$ docker-machine --version
docker-machine version 0.12.2, build 9371605

Dockerを立ち上げてみる

$ docker run -d -p 80:80 --name webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bc95e04b23c0: Pull complete
a21d9ee25fc3: Pull complete
9bda7d5afd39: Pull complete
Digest: sha256:9fca103a62af6db7f188ac3376c60927db41f88b8d2354bf02d2290a672dc425
Status: Downloaded newer image for nginx:latest
dea5724a26729aef7518baf2a285c31e64f5e472b6826994a7229873f2b790e9

http://localhost/でアクセスして画面が表示できればOK。
f:id:skanoemon:20171217172959p:plain

docker psでコンテナが起動してるのがわかる。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
dea5724a2672        nginx               "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   webserver

Docker

コンテナの操作

コンテナの起動
$docker run hello-world

docker runは指定したイメージからコンテナを起動するコマンド。書式はdocker run <イメージ名> <コンテナで起動するコマンド>
ローカルに指定したイメージがない場合は、Docker hubからダウンロードして、コンテナを起動してくれる。

runコマンドに-itをつけると対話的に作業ができる。

$ docker run -it alpine bin/sh
/ # ls
bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var

コンテナを起動せずにイメージだけ取得するためにはdocker pullコマンドを使う。

$ docker pull alpine

imagesコマンドで取得済みのイメージ一覧を確認できる。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              40960efd7b8f        3 weeks ago         108MB
alpine              latest              053cde6e8953        3 weeks ago         3.97MB
起動中のコンテナの確認

psコマンドで起動中のコンテナを確認できる。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ee63487cb246        alpine              "bin/sh"            35 seconds ago      Up 34 seconds                           admiring_snyder
コンテナの停止・再開

stopコマンドでコンテナを停止する。指定するコンテナIDはpsコマンドで確認します。

$ docker stop ee63487cb246
ee63487cb246

startコマンドで再開する。

$ docker start ee63487cb246
ee63487cb246

startコマンドを実行しただけでは、コンテナの操作ができるようにはならない。attachコマンドでターミナルからコンテナにアタッチできるようにします。

$ docker attach ee63487cb246
/ # ls
bin    etc    lib    mnt    root   sbin   sys    usr
dev    home   media  proc   run    srv    tmp    var

コンテナを完全に終了させるためには、コンテナにアタッチした状態でCtrl+Cを実行します。もしくは、stopコマンドでコンテナを停止させて、rmで削除することで終了させることもできます。

$ docker stop ee63487cb246
ee63487cb246
$ docker rm ee63487cb246
ee63487cb246

コンテナを削除するとstartコマンドで再開はできなくなります。

DockerFile

Dockerデーモンがイメージを作成する際に実行するコマンドをまとめたファイル。ベースとなるイメージに対して追加する操作が書かれている。
docker buildで、DockerFileに書かれているコマンドを実行し、イメージを構築する。

書式

# コメント
命令 引数

ベースとなるイメージを指定するために、1行目の命令はFROMにすること。

命令 書式 実行内容
FROM FROM <イメージ>
FROM <イメージ>:<タグ>
FROM <イメージ>@
ベースイメージを指定する。複数のFROMを指定できる。
MAINTAINER MAINTAINER <名前> 生成するイメージのAuthor (作者)フィールドを指定する。
RUN RUN <コマンド>
RUN ["実行バイナリ", "パラメータ1", "パラメータ2"]
指定したコマンドを実行する。
CMD CMD ["実行バイナリ", "パラメータ1", "パラメータ2"]
CMD ["パラメータ1", "パラメータ2"]
CMD <コマンド>
コンテナ起動時に実行するコマンド。docker runの引数を上書く。
LABEL LABEL = = = イメージにメタデータを追加する。
EXPOSE EXPOSE コンテナが使用するポートを指定する。
ENV ENV
ENV = ...
環境変数をセットする。
ADD ADD <ソース>... <送信先>
ADD ["<ソース>", ... "<送信先>"]
ファイル、ディレクトリを追加する。
COPY COPY <ソース>... <送信先>
COPY ["<ソース>",... "<送信先>"]
ファイル、ディレクトリをコピーする。
ENTRYPOINT ENTRYPOINT ["実行可能なもの", "パラメータ1", "パラメータ2"]
ENTRYPOINT コマンド パラメータ1 パラメータ2
コンテナ起動時に実行するコマンド。docker run 引数 の後にENTRYPOINTで指定したコマンドを追加する。
VOLUME VOLUME ["/data"] マウントポイントを作成する。
USER USER daemon 実行ユーザを指定する。
WORKDIR WORKDIR /path/to/workdir 作業ディレクトリを指定する。
ARG ARG <名前>[=<デフォルト値>] docker build コマンドで使う変数を定義する。

Docker Compose

ローカルホスト上で複数コンテナを起動するツール。

  1. アプリケーションの環境をDockerFileに定義する。
  2. アプリケーションを構成する各サービスをdocker-compose.ymlに定義する。
  3. docker-compose upを実行すると、Compose がアプリケーション全体を起動・実行する。

Composeファイルのリファレンスはここ