Docker
docker pull
DockerHub と呼ばれるサービス上で様々なOS・ソフトウェアを公開しており、pull
コマンドを用いてローカル環境にインストールする
$ docker pull ruby
$ docker pull ubuntu
などなど...
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 days ago 73.9MB
dockerfile
docker build
するための手順を書いたファイル
# :[コメント]
FROM :[イメージ:バージョン] ... ベースイメージの指定
ENV :[key] [value] ... 環境変数の定義
WORKDIR :[作業ディレクトリ] ... コマンドを実行する際に基準となるディレクトリを設定
COPY :[ソース指定] [保存先指定] ... Docker内へホストのファイル/ディレクトリをコピー
ADD :[ソース指定] [保存先指定] ... Docker内へホストのファイル/ディレクトリをコピー DL&解答
RUN :[コマンド] ... build時に実行 「yum」や「apt」などのコマンドを実行することが多い
CMD :[コマンド] ... コンテナ立ち上げ完了(docker run)時に実行する
VOLUME :[ホストdir]:[コンテナdir] ... コンテナを実行しているホストのディレクトリを、コンテナ内のディレクトリとして使えるようにする
EXPOSE :[ポート番号] ... ポートを解放する アクセスするには docker run 時に-pフラグを使ってポートの公開範囲を指定するか、-Pフラグで全ての露出ポートを公開する必要がある
example) Railsアプリケーション
-
ruby
イメージからコンテナを作成 - ポート
3000:3000
を開放し、ボリュームを指定してコンテナを起動 - コンテナ内でRailsプロジェクトを作成
- コンテナに
node.js
をインストール -
Rails server
を実行
dockerfile
を書くということは、これらの作業を文書化していくということ
FROM ruby:2.6.0
ENV APP_PORT /usr/src/sample_app
WORKDIR ${APP_PORT}
RUN apt-get update && \
apt-get install -y nodejs
COPY Gemfile ${APP_PORT}
COPY Gemfile.lock ${APP_PORT}
RUN bundle install
EXPOSE 3000
CMD bundle exec rails server
docker build
Dockerfile から独自のイメージをビルドするためのコマンド
$ docker build -t 名前:タグ Dockerfileのあるディレクトリ
$ docker build -t name:1.0 .
.
はCOPYコマンドを実行する際にどのディレクトリを起点とするかを指定する
docker run
$ docker run -P nginx
nginx イメージを起動し、設定されているポートを公開する
$ docker run ubuntu cat /etc/issue
ubuntu イメージを起動し、cat /etc/issue
コマンドを実行する
$ docker run -it ubuntu bash
bash のような対話的な入力が必要なプロセスも実行する
$ docker run -it --name TEST -v "$PWD":/usr/src/app -p 3000:3000 ruby /bin/bash
ruby イメージからコンテナを起動
オプション
-i :ホストの入力をコンテナの標準出力をつなぎ、対話するようにシェルなどでコンテナ内で操作ができる
-t :コンテナの標準出力とホストの出力をつなげる (`-it`のようにまとめて使うことが多い)
-d :デタッチモードでコンテナを起動する コンテナ内に入らず、バックグラウンドで動作させることができる
-p :ホスト側のポート番号:コンテナのポート番号
-P :設定されているポートを公開
-v :ホスト側のディレクトリパス:コンテナ側のディレクトリパス dockerコンテナとホスト間でファイルを共有する
-link :コンテナ識別子:エイリアス dockerコンテナ同士を繋ぐ
-rm :コンテナ内でのコマンドの実行が終わったらコンテナを自動で削除する
--name :コンテナに任意の名前をつける
/bin/bash :コンテナ起動後に実行するコマンド 今回はシェルを指定
cat /etc/issue :コンテナ後に実行するコマンド OS名やマシンタイプ、OSのリリースなどを確認するコマンド
docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a487d1d8e0b nginx "bash" 9 seconds ago Up 8 seconds 80/tcp xenodochial_mendeleev
docker exec
起動したコンテナの中に入る
$ docker exec -ti 1a487d1d8e0b bash
root@1a487d1d8e0b:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var