Help us understand the problem. What is going on with this article?

docker run(コンテナ作成)する時のオプションあれこれ

More than 3 years have passed since last update.

最小限のDockerコンテナ作成

やぁ、楽しいDockerの世界へようこそ。
とりあえずまずはDockerコンテナを作ってみよう。最小限のコードはこれだ。
$ docker run -it #{利用したいイメージ} /bin/bash
-itオプションはコンテナ内で操作したい場合は必須のオプションなので、開発環境などの構築時にはおまじないとして覚えておこう。

利用したいイメージはここで探すといい。
https://hub.docker.com/explore/
例えば
$ docker run -it rails /bin/bash
だとRuby on Railsがすでに導入されたDockerコンテナができあがる。
RubyのインストールもRailsのインストールもしなくていいのだ。

コンテナに名前をつける

最小限のコードだと、管理する際のコンテナ名が適当に設定されてしまうので、名前をつけてやろう。
--nameオプションでコンテナ名を指定してやることができる。
$ docker run --name #{任意のコンテナ名} -it #{利用したいイメージ} /bin/bash
適当に設定された名前だと次回以降に起動する時にちょっと面倒なので、できるだけつけておこう。

ちなみにホストマシンで$ docker ps -aするとホストマシン内にあるDockerコンテナのリストが表示される。

ホストマシンのファイルをコンテナ内でも使う

ホストマシンにあるソースをDockerコンテナ内でも使いたい?
ではホストマシンとDockerコンテナ間でディレクトリを繋いでしまおう。
-vオプションでできるぞ!
$ docker run -v #{ホストマシンの任意のディレクトリ}:#{Dockerコンテナ内の任意のディレクトリ} -it #{利用したいイメージ} /bin/bash
これで例えば...
$ docker run -v /usr/local/src/project:/usr/src/app -it #{利用したいイメージ} /bin/bash
とすればコンテナ内の/usr/src/appからホストマシンの/usr/local/src/projectを参照できるわけだ。

コンテナにホストマシンのポートをバインドする

ん?railsアプリケーションでブラウザからポート3000でアクセスするのがめんどくさい?
それならポート80番でつなげるようにしちゃおう。
-pオプションを使って-vオプションと似たようにバインドできる。
-vオプションとは記載する順が逆になるので注意すること。
$ docker run -p 3000:80 -it rails /bin/bash
$ docker run -p 80:3000 -it rails /bin/bash
これで、ブラウザからポート指定しなくてもアプリケーションが確認できるはずだ。

コンテナに環境変数を設定する

環境変数を設定するには?-eオプションがある。
$ docker run -e #{環境変数名}=#{値} -it #利用したいイメージ} /bin/bash

dockerイメージのバージョンを指定する

古いDockerイメージを利用したい?ならそのバージョンを指定してやろう。
$ docker run -it #{利用したいイメージ}:#{利用したいバージョン} /bin/bash
これで君の開発環境はDockerに移行できる。
バージョンは先程紹介したDockerHubから確認するのがいいだろう。
例えばApacheのバージョン一覧はこうなっている。
https://hub.docker.com/_/httpd/

docker run時の初期ディレクトリを変更したい

お、今度は$ docker runした時のディレクトリがルートから始まるのが気に入らない?このオプションを使うといい。
$ docker run -w #{コンテナ内のディレクトリ} -it #{利用したいイメージ} /bin/bash
これで、起動したら指定したディレクトリがカレントディレクトリになる。

おさらい

最後に、これらを使って君のRailsプロジェクトの開発環境をDockerコンテナ化してみよう。
$ docker run --name #{任意のコンテナ名} -v #{ホストマシンのRailsプロジェクトのディレクトリ}:/usr/src/app -p 3000:80 -e RAILS_ENV=development -w /usr/src/app -it rails:4.2 /bin/bash
$ docker run --name #{任意のコンテナ名} -v #{ホストマシンのRailsプロジェクトのディレクトリ}:/usr/src/app -p 80:3000 -e RAILS_ENV=development -w /usr/src/app -it rails:4.2 /bin/bash
このコマンドでは

  • --name: コンテナに名前をつけてやり
  • -v: ホストマシンのディレクトリにコンテナ内/usr/src/appからアクセスできるようにして
  • -p: ポート80番でコンテナのポート3000番にアクセスできるようバインドして
  • -e: 環境変数RAILS_ENVにdevelopmentを設定
  • -w: 起動時にコンテナ内の/usr/src/appに移動
  • Rails:4.2が導入されている

コンテナを作成した。
これで君の開発環境はDockerで立ち上がり、そして君はコンテナ内にいるはずだ。
コンテナ内では(railsの場合)rails serverを起動するだけで、あとはブラウザで確認だ!

shimo_yama
フルなスタックをやる系のエンジニア
lightcafe_gr
全国にグループ会社を持つIT企業です
https://www.lightcafe.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした