やまものブログ

メモ書きブログです (^_^;A

Dockerイメージ Ubuntu 16.04 (Ubuntu 18.04上で)

Ubuntu 16.04が必須なアプリケーションがあって、Dockerも検討中です。
以下、16.04 コンテナを立ち上げたところまでのメモです。

docker のインストール
こちらのサイトに記載のとおりです。助かりました m(_ _)m
Ubuntuにdockerをインストールする

前提ソフトとあわせて docker をインストール。リポジトリの追加も必要。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce


Ubuntu 16.04 のイメージ、ホストとフォルダを共有
こちら3つのサイトの情報を参考にさせてもらいました m(_ _)m

DockerでUbuntu 16.04 LTSのイメージを利用してみよう
Dockerのコンテナとホストで共有フォルダを設定する手順
Dockerにおけるコンテナのライフサイクル


以下の手順では Dockerfileによる build ではなくcommit を使っています。
知人から聞いたところでは、Dockerfileは配布を想定した仕組みで、dockerの本来の思想にあうやり方だそうですが、とりえあず試すなら Dockerfile を使わなくてもいいとのことでした。ここではとりあえず手っ取り早く試した手順です。
余談ですが、build って聞いたら ubuntu OS を buildするのかと思って気が遠くなりましたが、docker build は既にあるイメージを作り直すことらしいです。

まず、ホストのOSはこちらです。
Ubuntu 18.04.1 LTS

コンテナとディレクトリを共有するには ユーザIDを一致させる必要があるそうです。
そこで、まず、ホストでのIDを確認します。自分一人で使っているマシンだとたいがい 1000番だそうで、自分の環境もそのとおりでした。

$ id
uid=1000(user001) gid=1000(user001) groups=1000(user001),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare)

コンテナ側と共有するディレクトリを作っておきます。
ここではホームに docker というディレクトリを作りました。
$ mkdir /home/user001/docker

ubuntu:16.04 のイメージを pullして、コンテナを runして bash を実行します。
$ sudo docker pull ubuntu:16.04
$ sudo docker run -it -d --name ubuntu1604 ubuntu:16.04
$ sudo docker exec -it ubuntu1604 /bin/bash

コンテナ内rootのプロンプトになるので、ID 1000番のユーザを作成します。
ここでのユーザ名はホスト側と同じである必要はないらしいですが、より安全だと期待して一致させました。
root@3b612232ca5f:/# useradd -u 1000 -m -d /home/user001 user001 && chown -R user001 /home/user001

コンテナから exit して、stopします。
root@3b612232ca5f:/# exit
$ sudo docker stop ubuntu1604

このコンテナを commit でイメージとして保存します。
$ sudo docker commit ubuntu1604 ubuntu:16.04a

新しいイメージの名称(ubuntu:16.04a)はオリジナルに 'a'を続けてみました。

docker run で -v オプションでディレクトリを指定します。
-v には :(コロン)で区切ってHOST-DIRとCONTAINER-DIRを指定します。今回は両方同じ/home/user001/docker になっています。
$ sudo docker run -v /home/user001/docker:/home/user001/docker -it -d --name ubuntu1604a ubuntu:16.04a

bashでrootから、su で user001 に替わって、共有ディレクトリにファイルを作成してみました。
$ sudo docker exec -it ubuntu1604a /bin/bash
root@a142b50ad547:/# su user001
$ cd
$ id > docker/test_on_docker.txt

ホストでも同じファイル docker/test_on_docker.txt にアクセスできました。
操作に手慣れてきたら、Dockerfile を使った build も試してみたいです。


【おまけ】イメージの保存場所
/var/lib/docker 下のどこかにあるようです。
commit で新しいイメージを作る前の容量です。
$ sudo du -sh /var/lib/docker
355M /var/lib/docker
作成直後は 113MB増加しました。
468M /var/lib/docker/

【おまけ】man の使い方
docker の各コマンドを man で確認するにはこんなかんじです。
$ man docker-<コマンド名>

"man docker" だけだと各コマンドの説明はありません。


今年、最後のブログ投稿になります。今年は 49件のブログを投稿しました。週に1件をいちおうの目安にしているので、52件には少し足りませんでしたが、まあまあのペースは保てたかと思います。
2018年も残すところあと3時間を切りました。
みなさまよいお年を!