アドベンドカレンダー初投稿!
この記事は、Phone Appli Advent Calendar の24日目です。
よろしくお願いします!
なぜ、Docker?
- 何度かイライラさせられたのが、「Docker」だったから・・・・・
- 「イメージ」「コンテナ」などの用語が理解できなかったので・・・
- 本やサイトでよく見るから・・・・・
要は、業務中や他の勉強中にdockerでイライラする事を少なくするための「備忘録」的な記事です。はい・・・・
早速、やってみよう〜〜〜〜
前提条件
ツール | 説明 |
---|---|
docker | インストール済み |
VScode | プラグインとかあるので |
そもそも、Dockerとは?
- コンテナ型の仮想環境を作成・実行などをする事ができるプラットフォーム
コンテナとは?
- 仮想環境の一つである。(Linuxカーネルに実装された「namespace」という技術を使っている)
- ホストOS上(自分のPCのOS上)で,コンテナと呼ばれる仮想環境を作り、アプリ開発に必要なライブラリなどを一つにまとめて運用する事ができる
- 一つのホストOSで複数のアプリケーションを動かす事ができる(そのため、マイクロサービスとの親和性が高い とされている)
実装
今回のゴール
- コンテナ内で、指定にでファイル(/sample/test.md)で「vim」が起動できる
特に、vimに対する強いこだわりはないが、コンテナで何か作業する事で、
ホスト(自分のPC)との違うがわかるはず・・・
Dockerfileに記載する事
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
vim
RUN mkdir sample
WORKDIR /sample
RUN touch test.md
WORKDIR /
CMD ["ls"]
これを実行して、コンテナ内で指定ディレクトリに進み、vimを起動する事ができる
中身の説明
FROM ubuntu:latest
FROM
は、基本的にOSを指定する事が多い(今回はLinuxから派生した初心者に優しいとされるubuntuを指定)
- docker imageの基礎となるので、あまり大きなサイズにしたくない
RUN apt-get update && apt-get install -y \
vim
RUN mkdir sample
WORKDIR /sample
RUN touch test.md
WORKDIR /
RUN
は、実行コマンド
- ubuntu用の
apt-get
コマンドでupdate
とinstall
を実行する
WORKDIR
は、ディレクトリ移動
- 二回移動していますね・・・・(もっと良いやり方があるはず・・・)
CMD ["ls"]
CMD
は、コンテナを起動したときに最初に行うコマンドである。ポート番号を指定したい時などに使う
- 今回は、
ls
コマンドを実行して、ディレクトリの一覧を表示する
ターミナル・コマンドプロンプトで、コマンドを実行
docker build -t "自分が付けたいイメージの名前" . //-> イメージが作成される
docker images //-> "sample"というイメージが作成されている
docker run イメージ名 //-> コンテナを生成・起動して、コンテナ内でlsコマンドが実行される。すぐにコンテナが終了してしまうけど・・・
docker ps -a //-> `COMMAND`欄に`ls`コマンドをした履歴が残っているはず・・・
さて、dockerfile作成 -> image作成 -> コンテナ生成・起動 -> コンテナ内でコマンドを実行したけど、
- コンテナ内で立ち止まって、自分でコマンドを叩く事ができない**(ゴールを達成できない)**
オプションに-it
とbash
を付け加える事で解決
docker run -it イメージ名 bash //-> 「-it イメージ名 bash」 でコンテナ内のubuntuOS上でコマンドを叩く事が可能となる
-it
は、-i
と -t
で分ける事も可能(どちらかだけで実行しても良いが、標準入力ができなかったり、表示がきれいでなかったりする)
bash
は、コンテナ内を立ち上げるシェルコマンドである
あとは、以下のコマンドを順番に叩いて、ゴールとなる
cd sample
vim test.md
お疲れ様でした!
本来は、pythonやkotlinなどのWeb開発の環境構築・データ分析基盤のためにDockerを使う事が多いです。
なので、今回の実装だけで使うイメージができないかも知れないですが、
参考書やサイトに出てくる「コンテナ内で・・・・・」や「イメージを作成して・・・・」などでイライラする事が多少、減るかも知れないです。
今回の記事で、dockerに対するイライラが減るエンジニアが増えると、幸いです。
ではでは・・・・