はじめに

本記事は動画( https://youtu.be/RYXtItghA14 )でも解説しています。
スライドを記事化したものです。動画と合わせて御覧ください。
RYXtItghA14

※記事化する際に補足説明を加筆しており、内容は動画のスライドと異なります。
※本記事の内容は2020年3月時点の内容となります。OSやミドルウェア、Dockerのバージョンが異なることで記載通りの内容で完了しない場合があります。


Dockerfileで出来る事

  1. イメージのダウンロード
  2. コンテナイメージ内でのシェルコマンド実行
  3. ローカルファイルをコンテナイメージ内への転送
  4. 実行ユーザ切り替え

Dockerfileで出来ない事

  1. デーモン(サービス)の起動
  2. Webアプリ環境構築でのDBへの初期DB構築などは出来ない

Dokcerコマンド一覧

コマンド 概要
FROM イメージを指定
LABEL メタデータの設定
ENV 環境変数を設定
RUN コンテナ内でコマンドを実行
COPY ファイル、ディレクトリをローカル→コンテナ、コンテナ→ローカルにコピーする
ADD ファイル、ディレクトリをローカル→コンテナに追加。.tarファイルをアンパックできる
CMD RUNのパラメータを設定。RUN実行後にクリアされる
WORKDIR 作業ディレクトリを指定
ARG docker buildコマンド時の引数定義
ENTRYPOINT コンテナにコマンドと引数を提供
SHELL コンテナ内の実行シェルの指定と設定
USER ユーザの切替

実行コマンド

docker build -t [イメージタグ] .

動画で使ったDockerfile

# centos7のイメージを利用する
FROM centos:7
LABEL maintainer=Takemi

SHELL ["/bin/bash", "-o", "pipefail", "-c"]"

# 累積アップデートの実行
RUN yum -y upgrade

#rootパスワード設定
RUN echo "root:docker123" | chpasswd;

#takemiユーザが存在していない場合ユーザ追加する
RUN echo 'make user takemi'
RUN adduser -m takemi;echo "takemi:takemi123" | chpasswd;

#sshのインストール
RUN yum install -y openssh-server
RUN systemctl enable sshd

#Apacheのインストール
RUN yum install -y httpd
RUN systemctl enable httpd

#MariaDBのインストール
RUN curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
RUN yum install -y MariaDB-server
RUN systemctl enable mariadb

RUN yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum -y install --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

#DocumentRoot作成
RUN mkdir /var/www/webapp
RUN chown takemi /var/www/webapp
RUN chgrp takemi /var/www/webapp
RUN chmod 774 /var/www/webapp
RUN gpasswd -a apache takemi

USER takemi
COPY index.html /var/www/webapp/

USER root
RUN chmod 772 /var/www/webapp/index.html
#RUN systemctl restart httpd