LoginSignup
1
0

More than 3 years have passed since last update.

【Docker 備忘録】image, containerに名前をつける/ホストのディレクトリをマウントする

Posted at

概要

  • Docker学習中
  • Rails, Anaconda環境を構築したい
  • やりたいこと
    • イメージとコンテナに名前をつけたい
    • ファイル管理はホスト側で行いたい


環境

  • macOS Catalina 10.15.7
  • Docker 19.03.13

Dockerのバージョン確認

terminal
% docker --version
=> Docker version 19.03.13, ***

Dockerコマンド/オプション確認

terminal
% 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」です。
これを書いていきます。

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という名前のイメージを作成します。

terminal
[~/docker-test] % docker build -t docker-test .

作成できたかは、docker image lsで確認できます。

terminal
% docker image ls
=>
REPOSITORY      TAG        IMAGE ID         CREATED             SIZE
docker-test     latest     2c980ecce523     39 seconds ago      167MB


Docker imageからコンテナを作成

以下の条件でコンテナを作っていきます。

  • docker-test-containerというコンテナ名
  • Hostのhost-directorycontainerのcontainer-directoryを紐付ける

コマンドは以下のとおりです。

terminal
# 以下のコマンドは、①スペース区切り、②一行、で入力して下さい
# 見やすいように改行で表現しています。

[~/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に反映されるか確認してみましょう。

terminal(コンテナ)
/# cd container-directory
/container-directory# touch test
/container-directory# ls
test
/container-directory# vim test
(vim で hello! を入力)

host側でtestというファイルがあるか、そしてhello!という内容か、確認しましょう。

terminal(ホスト)
[~/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の基本コマンドでした。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0