LoginSignup
54
75

More than 5 years have passed since last update.

Dockerイメージの作り方

Last updated at Posted at 2017-08-10

Docker(ドッカー)イメージはコンテナの元だ。例えば、MySQLを運用するコンテナはMySQLイメージで起動する。ドッカーイメージはDockerfile (ドッカーファイル)で定義する。単純なネイティブなコードは入っていないプロジェクトを下記のドッカーファイルでイメージに生成できる:

Dockerfile
# FROM <イメージ名>:<バージョンタグ>
# このイメージを元に使って
FROM node:8.2.1-alpine

# イメージの中にアプリ用ディレクトリを作成
RUN mkdir -p /opt/myapp

# イメージの中の"cd"
WORKDIR /opt/myapp

# Dockerfileのディレクトリの中身をイメージの中のWORKDIRにコピー
COPY . .

# コンテナのポート8000をホストに開示
EXPOSE 8000

# イメージの起動の時実行されるコマンド
CMD ["npx", "http-server", "-p", "8000"]

上記のドッカーファイルはAlpineと言う軽いLinuxを利用する。

ネイティブなコードをコンテナの中でコンパイルする必要がある場合、Dockerfileにコンパイルステップが必要:

Dockerfile
# FROM <イメージ名>:<バージョンタグ>
# このイメージを元に使って
FROM node:8.2.1-alpine

# イメージの中にアプリ用ディレクトリを作成
RUN mkdir -p /opt/myapp

# イメージの中の"cd"
WORKDIR /opt/myapp

# Dockerfileのディレクトリの中身をイメージの中のWORKDIRにコピー
COPY . .

# コンパイルステップは一つのRUNだけで行う
RUN \
    # コンパイルに必要な依存をインストール
    apk add --no-cache --virtual build-deps \
        python=2.7.13-r1 \
        make=4.2.1-r0 \
        g++=6.3.0-r4 && \
    # コンパイル
    npm rebuild && \
    # コンパイル依存はもういらないのでイメージに無駄に入らないように同じRUNの中でアンインストール
    apk del build-deps

# コンテナのポート8000をホストに開示
EXPOSE 8000

# イメージの起動の時実行されるコマンド
CMD ["npx", "http-server", "-p", "8000"]

ドッカーイメージの生成

Dockerfileのディレクトリの中で:
docker build --tag <organization>/<project>:<tag> .

organization(任意): 普通にDocker Hubでのアカウント名
project(必須): プロジェクト名
tag(任意): 設定しないといつもlatestタグがイメージに付けられる。

コンテナの起動

docker run --publish 8000:3000 --detach --name mycontainer --env PORT=3000 <organization>/<project>:<tag>

上記のコマンドでPORT=3000という環境変数がコンテナに渡されて、コンテナのポート3000がホストOSのポート8000でアクセスできるように起動される。

最新のMySQLイメージでコンテナを起動:

docker run --name my-mysql-container --env MYSQL_ROOT_PASSWORD=mypassword --detach mysql:latest

54
75
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
54
75