概要
- Docker学習中
- Rails, Anaconda環境を構築したい
- やりたいこと
- イメージとコンテナに名前をつけたい
- ファイル管理はホスト側で行いたい
環境
- macOS Catalina 10.15.7
- Docker 19.03.13
Dockerのバージョン確認
% docker --version
=> Docker version 19.03.13, ***
Dockerコマンド/オプション確認
% docker --help
=>
Options:
(略)
-v, --version Print version information and quit
ディレクトリ構成
今回は、ホスト側のhost-directory
とコンテナ側のcontainer-directory
を紐付けます。
~
|-- docker-test
|-- Dockerfile # これをビルドする
|-- host-directory # これをファイル管理用ディレクトリにする
/
|-- container-directory # これとHostのhost-directoryを紐付ける
build→run→ファイル操作までの流れ
Dockerfile
ビルドすることで、「コンテナ」の設計図となる「イメージ」を作れるのが「Dockerfile」です。
これを書いていきます。
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y vim && \
mkdir /container-directory
少し解説すると、
-
FROM ubuntu:latest
: ubuntuのイメージをpull -
RUN
-
apt-get update && apt-get install -y vim
: vimをインストール -
mkdir /container-directory
: ルート直下にcontainer-directoryを作成
-
という内容が記載されています。
docker-testという名前でビルド (imageを作成)
先ほど作成したDockerfileからdocker-test
という名前のイメージを作成します。
[~/docker-test] % docker build -t docker-test .
作成できたかは、docker image ls
で確認できます。
% docker image ls
=>
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-test latest 2c980ecce523 39 seconds ago 167MB
Docker imageからコンテナを作成
以下の条件でコンテナを作っていきます。
-
docker-test-container
というコンテナ名 -
Hostのhost-directory
とcontainerのcontainer-directory
を紐付ける
コマンドは以下のとおりです。
# 以下のコマンドは、①スペース区切り、②一行、で入力して下さい
# 見やすいように改行で表現しています。
[~/docker-test] % docker run
--name docker-test-container
-v ~/docker-test/host-directory/:/container-directory
-it docker-test bash
コマンドについてまとめます。
-
run
: イメージからコンテナを作成 -
--name
: コンテナ名を指定 -
-v ホストのディレクトリパス:コンテナのディレクトリパス
: ディレクトリの紐付け -
-it イメージ名 bash
: (厳密には違うが)コンテナ内にとどまり、bashを起動する
現在、ubuntuOSのコンテナ内でbashが起動している状態です。
ls
コマンドを入力すると、
root@167fe740d63e:/# ls
=>
bin boot container-directory dev etc home lib lib32 lib64 libx32
media mnt opt proc root run sbin srv sys test tmp usr var
Dockerfileで記載した通り、container-directory
が作成されているのが確認できました。
ディレクトリでファイル操作し、マウントを確認
コンテナ内のcontainer-directoryでファイル操作をし、ホスト側のhost-directoryに反映されるか確認してみましょう。
/# cd container-directory
/container-directory# touch test
/container-directory# ls
test
/container-directory# vim test
(vim で hello! を入力)
host側でtest
というファイルがあるか、そしてhello!
という内容か、確認しましょう。
[~/docker-test] % ls host-directory
test
[~/docker-test] % cat host-directory/test
hello!
確認できました!
ちなみに、ホスト側でファイルを作成/編集/削除等した場合も、コンテナ側に反映されます。
あくまで同じディレクトリをどこから参照しているかの違いであり、見ている物自体は一緒
だということは覚えておきましょう!
コンテナ、イメージの削除
コンテナからはexit
コマンドで抜けられます。
root@167fe740d63e:/container-directory# exit
exit
[~/docker-test] %
コンテナ、イメージは次のコマンドで削除できます。
% docker rm docker-test-container # コンテナの削除
% docker rmi docker-test # イメージの削除
以上、Dockerの基本コマンドでした。