概要
Dockerイメージの作成方法を大雑把に把握したい。
そのため、簡単なシェルを実行するのみのコンテナイメージを作成する。
※Windows でDocker環境を構築する手順はこちら
作業の内容
- Alpine Linux上でシェルを実行する
- コンテナを起動するとシェルが実行され、「Hello, World!」と標準出力する
- イメージ名:shellsample
- コンテナ名:shellsample
- 階層構造は以下のとおり
shellsample
├ hello.sh
└ Dockerfile
サンプルシェルの作成
#!/bin/ash
echo "Hello, World!"
※改行コードは「LF」にて作成
※alpine linuxはbusyboxを元に作られていて、シェルにはashが使われている。参考にしたページ
Dockerfile の作成
FROM alpine:latest
RUN mkdir /opt/shell
COPY hello.sh /opt/shell/
RUN chmod 755 /opt/shell/hello.sh
CMD ["/opt/shell/hello.sh"]
【補足】
FROM
Dockerイメージのベースとなるイメージを指定する。
指定するDockerイメージはDocker Hubに公開されているものを指定する。
RUN
Dockerイメージビルド時にDockerコンテナ内で実行するコマンドを定義する。
COPY
Dockerを動作させているホストマシン上のファイルなどをコンテナ内にコピーする。
CMD
Dockerコンテナとして実行する際に、コンテナ内で実行するプロセスを指定する。
Docker image を作成しコンテナを実行
① PowerShellを起動する。
ショートカットキーの「Win + R」で「ファイル名を指定して実行」を起動し、「powershell」と入力し実行。
② Dockerfile 格納ディレクトリに移動。
③ Docker imageを作成
> docker image build -t shellsample .
Sending build context to Docker daemon 3.072kB
Step 1/5 : FROM alpine:latest
latest: Pulling from library/alpine
cbdbe7a5bc2a: Pull complete
Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Status: Downloaded newer image for alpine:latest
---> f70734b6a266
・・・(省略)・・・
Step 5/5 : CMD ["/opt/shell/hello.sh"]
---> Running in 108795c9aa54
Removing intermediate container 108795c9aa54
---> 6f1e9dc96d04
Successfully built 6f1e9dc96d04
Successfully tagged shellsample:latest
【補足】「docker image build」コマンドのフォーマット
docker image build [options] (Dockerfile配置ディレクトリのパス|URL)
※ -t オプション:任意のイメージ名を指定
④ コンテナ作成&実行
> docker container run -it --name shellsample shellsample
Hello, World!
【補足】「docker container run」コマンドのフォーマット(新規にDockerコンテナを実行する)
docker container run [options] イメージ名[:タグ名] [コマンド] [コマンド引数]
※ -it オプション:ホスト(手元のターミナル)とコンテナの標準入出力をつなげる
(こちらを参照)
※ --name オプション:コンテナの名前を割り当てる
※ 詳細はこちら
わかること
- 作業後のDockerイメージ一覧の確認
2つのDockerイメージができている。
> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
shellsample latest 6f1e9dc96d04 3 hours ago 5.61MB
alpine latest f70734b6a266 4 days ago 5.61MB
- 作業後のコンテナの状態
DockerfileのCMDで定義されているアプリケーション実行が終了したので、コンテナは「停止」状態となっている。
> docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7eabec82e384 shellsample "/opt/shell/hello.sh" 3 hours ago Exited (0) 3 hours ago shellsample
- コンテナを再度起動させると、標準出力が行われる。
> docker container start -ai shellsample
Hello, World!
【補足】「docker container start」コマンドのフォーマット(新規にDockerコンテナを実行する)
docker container start [options] イメージ名[:タグ名] [CONTAINER...]
※ -a オプション:コンテナの標準出力とDockerホストの標準出力を接続する
※ -i オプション:コンテナの標準入力とDockerホストの標準入力を接続する
※ 詳細はこちら