サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Docker入門から(第6回:DockerFileの紹介及び使用)

tin
tin
2023-03-08 / 0 コメント / 5 いいね! / 153 読み / 1,606 文字

背景:

イメージの作成につき、docker commitとか、docker export ⇒ docker importとか、docker save ⇒ docker loadなどのコマンドは利用できますが、
実は多くの場面ではDockerFileの利用は一般的ですね。
今回はDockerFileの説明と使用について話してみます。

1. DockerFile簡単紹介

1-1. DockerFile公式サイト

https://docs.docker.com/engine/reference/builder/

1-2. DockerFileはなんですか

Dockerfileは、イメージを構築するためのテキストファイルであり、ファイルには構築するために必要な命令と説明が含まれています。Dockerは、Dockerfileの命令を読み取ってイメージを自動的に生成します。Dockerfileは、コマンドラインで使用できる任意のコマンドを実行することができます。一般的に、Dockerfileは、基本イメージ情報、メンテナー情報、イメージ操作命令、およびコンテナの起動時に実行される命令の4つのセクションに分かれます。

1-3. Dockerファイル ⇒ イメージ ⇔ コンテナの関係図

image-1678264383929

2. Dockerfileの基本的な構文

2-1. 基本ルール

  • ①Dockerfileは、テキストファイルである必要があります。

  • ②Dockerfileの最初の行には、ベースとなるDockerイメージを指定するFROM命令が必要です。例えば、FROM ubuntu:latestと書かれることがあります。

  • ③Dockerfileの中では、#記号を使ってコメントを記述できます。

  • ④Dockerfileの命令は、大文字で始まる必要があります。小文字で始まる場合は無視されます。

  • ⑤Dockerfileの命令は、改行で区切る必要があります。1つの行に複数の命令を記述することはできません。

  • ⑥Dockerfileの命令は、バックスラッシュ(\)を使用して複数行にまたがることができます。

  • ⑦Dockerfileの命令は、引用符(")で囲むことができます。

  • ⑧Dockerfileの命令は、前の命令で生成されたコンテキストに対して実行されます。

  • ⑨Dockerfileの命令は、イメージの作成に必要なファイルをコピーすることができます。コピー先のディレクトリが存在しない場合は自動的に作成されます。

  • ⑩Dockerfileの命令は、変数や環境変数を定義することができます。ENV命令を使用することが一般的です。

2-2. Dockerfileの実行流れ

  • ①Dockerは、ベースイメージからコンテナを実行
      ⇩
  • ②1つのコマンドを実行し、コンテナに変更を加えます
      ⇩
  • ③その後、Docker commitのような操作を実行して新しいイメージレイヤを提出
      ⇩
  • ④そして、Dockerは、commitされたイメージをベースにして新しいコンテナを実行
      ⇩
  • ⑤Dockerfileで指定された次のコマンドを実行し、すべてのコマンドが完了するまで続けます
    image-1678271124104

3. Dockerfileでdockerイメージを作成

3-1. 目標

vim+ifconfig+jdk8を含んでいるubuntuイメージを作成
※jdk8のダウンロード場所
https://www.oracle.com/java/technologies/downloads/#java8
image-1678271976645

3-2. Dockerfileを編集

[root@localhost myflie]# pwd
/home/myflie
[root@localhost myflie]# ls -l
合計 135516
-rw-r--r--. 1 root root       743  3月  8 20:49 Dockerfile
-rw-r--r--. 1 root root 138762230  1月 31 21:14 jdk-8u361-linux-x64.tar.gz
[root@localhost myflie]# 
[root@localhost myflie]# cat Dockerfile   // 以下はDockerfileの内容
FROM ubuntu
MAINTAINER tin<tinxxxxx@gmail.com>   # 自分のメールアドレス
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
# vimエディターをインストール
RUN apt-get update
RUN apt-get -y install vim
# ifconfigをインストール
RUN apt-get -y install net-tools
# java8
RUN mkdir /usr/local/java
# ADD jdk-8u361-linux-x64.tar.gzをコンテナに入れる
ADD jdk-8u361-linux-x64.tar.gz /usr/local/java/
# java環境変数を設定
ENV JAVA_HOME /usr/local/java/jdk1.8.0_361
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD /bin/bash  # CMDは、Dockerコンテナが起動した際に自動的に実行されるコマンドを指定するための命令

[root@localhost myflie]# 

3-3. Dockerfileを実行

docker build -t myubuntu:1.1 .
⇒ dockerイメージmyubuntu:1.1が生まれた

[root@localhost myflie]# pwd
/home/myflie
[root@localhost myflie]# ls
Dockerfile  jdk-8u361-linux-x64.tar.gz
[root@localhost myflie]# 
[root@localhost myflie]# docker build -t myubuntu:1.1 .
[+] Building 29.1s (12/12) FINISHED                                                                                 
 => [internal] load build definition from Dockerfile                                                           0.0s
 => => transferring dockerfile: 841B                                                                           0.0s
 => [internal] load .dockerignore                                                                              0.0s
 => => transferring context: 2B                                                                                0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                               0.0s
 => [1/7] FROM docker.io/library/ubuntu                                                                        0.0s
 => [internal] load build context                                                                              0.0s
 => => transferring context: 109B                                                                              0.0s
 => [2/7] WORKDIR /usr/local                                                                                   0.0s
 => [3/7] RUN apt-get update                                                                                   7.4s
 => [4/7] RUN apt-get -y install vim                                                                          10.5s
 => [5/7] RUN apt-get -y install net-tools                                                                     3.4s 
 => [6/7] RUN mkdir /usr/local/java                                                                            0.5s 
 => [7/7] ADD jdk-8u361-linux-x64.tar.gz /usr/local/java/                                                      4.4s 
 => exporting to image                                                                                         2.7s 
 => => exporting layers                                                                                        2.6s 
 => => writing image sha256:fdf54cd0d246200b93c63b33ea5eded8d78c0b22f8b4b5290dbea0f68d3cecd7                   0.0s 
 => => naming to docker.io/library/myubuntu:1.1                                                                0.0s 
[root@localhost myflie]# 
[root@localhost myflie]# docker images | grep myubuntu //生成したdockerイメージ
myubuntu            1.1       fdf54cd0d246   2 minutes ago   522MB

3-4. Dockerfileによる作成したイメージでコンテナを起動

docker run -it myubuntu:1.1 bash
⇒ javaとifconfigを検証

[root@localhost myflie]# docker run -it myubuntu:1.1 bash
root@2f5701a3aeb1:/usr/local# 
root@2f5701a3aeb1:/usr/local# ls
bin  etc  games  include  java  lib  man  sbin  share  src
root@2f5701a3aeb1:/usr/local# java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
root@2f5701a3aeb1:/usr/local# 
root@2f5701a3aeb1:/usr/local# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.6  netmask 255.255.0.0  broadcast 172.17.255.255
5
  • 5

コメント欄