Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tanishilove

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

More than 3 years have 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`
1
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?