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

初めての Docker 30分チュートリアル:Dockerfile で Image を build まで

More than 1 year has passed since last update.

本記事の想定オーディエンスとゴール

初めて Docker を使う人.最小限の学習コストで Dockerfile による Image 作成までをハンズオンしたい人.
1. インストール
2. Hello World
3. commit コマンドで新 Image 作成
4. Dockerfile を使用し build コマンドで新 Image 作成

環境

VirtualBox 5.1.28
CentOS-7-x86_64-Minimal-1611
Docker version 1.12.6

Docker とは

  • コンテナ型の仮想化環境を提供するオープンソースソフトウェア.Docker 社提供.
  • 完全仮想化を行うハイパーバイザ型製品(VMwareなど)と比べて,ディスク使用量は少なく,仮想環境 (インスタンス) 作成や起動が早い.

基本用語

Docker Image ~ アプリケーションとその実行環境,ファイルシステムや設定をまとめて1つのパッケージにしたもの.公式に配布されているものがあり,自作もできる.
Docker Container ~ Docker Image を起動し,その内部でアプリケーションが稼働している状態.
Dockerfile ~ 特定の Image を作成するスクリプト.
Docker Registry ~ Image を共有するためのサーバソフトウェア(Repository は Registry 内のカテゴリ)
Docker Hub ~ Docker 社公式 Registry.

1. Docker インストール

(コマンドはすべて root ユーザにて実施することとします)

# yum install docker
# systemctl start docker
# systemctl enable docker

基本コマンド(1)

# docker images ~ ローカル Repositry に保存されている Image の一覧
# docker run <Image 名> ~ 指定 Image を起動
# docker ps ~ 起動中 Container 一覧
# docker ps -a ~ 停止中も含めた全 Container 一覧

2. Hello World

# docker run hello-world

run は Image を起動するコマンド.
"hello-world" Image を探し,ローカル Repository になければ,Docker Hub(公式 Registry)から pull し,Container を起動する.
Container は "Hello from Docker!" 他のメッセージを出力し終了.

# docker images   # ローカル Repository に hello-world Image が追加されたことを確認.
# docker ps -a    # 停止済みの hello-world の Container があることを確認
# docker ps       # 停止済みの hello-world の Container が表示されないことを確認

基本コマンド(2)

# docker pull <Image 名> ~ Registry から Image をダウンロード
# docker commit <Container 名/ID> ~ 操作した Container を新 Image として作成

3. CentOS Image を pull -> yum update -> 新 Image として作成

# docker pull centos:centos7   # Docker Hub からダウンロード
# docker run -it --name centos7-01 centos:centos7 bash

-it オプションで bash 実行,プロンプト表示.--name オプションは Container 名を指定.

bash
# yum -y update
# exit
# docker ps -a    # 停止済みの centos7-01 の Container があることを確認
# docker commit centos7-01 tanishi/yum-update   # tanishi/yum-update の Repository に新 Image を作成
# docker images   # ローカル Repository に tanishi/yum-update が追加されたことを確認.

基本コマンド(3)

# docker build -t <新 Image 名> { Dockerfile のあるディレクトリ } ~ Dockerfile で新 Image を作成

4. Dockerfile で ruby インストール済みの新 Image を作成

任意のディレクトリ(今回は /var/tmp/ )に Dockerfile という名のファイルを作成.

# cd /var/tmp/
# vi Dockerfile

以下を記述.

Dockerfile
FROM tanishi/yum-update # 元の Image
RUN yum -y install ruby
# docker build -t tanishi/ruby /var/tmp/

確認.

# docker images   # ローカル Repository に tanishi/ruby が追加されたことを確認
# docker run -it --name ruby-01 tanishi/ruby:latest bash
bash
# irb
irb > p "Hello Ruby!"
"Hello Ruby!"
=> "Hello Ruby!"
irb > exit
# exit

基本コマンド(4)

# docker rmi <Image 名/ID> ~ 指定 Image 削除
# docker rm <Container 名/ID> ~ 指定 Container 削除
# docker rm `docker ps -a -q` ~ 停止中も含めた全 Container 一括削除

後片付け

全コンテナ削除.

# docker rm `docker ps -a -q`
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
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