LoginSignup
2
0

More than 1 year has passed since last update.

久しぶりにDockerを触るときに忘れているコマンドやオプションたち

Last updated at Posted at 2020-04-27

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アプリケーション

  1. rubyイメージからコンテナを作成
  2. ポート3000:3000を開放し、ボリュームを指定してコンテナを起動
  3. コンテナ内でRailsプロジェクトを作成
  4. コンテナにnode.jsをインストール
  5. 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
2
0
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
0