概要
Windows環境にDockerをインストールし、基本動作を確認するまでの手順を整理する。
今回、Docker Desktop for windows
をインストールする。
インストール手順
Hyper-V を有効化
Docker desktop for windows
は、Windowsの仮想化の機構 Hyper-V
を使用する。
Hyper-V
を有効化する手順は次の通りである。
- コントロールパネルのプログラムと機能を開く
Windowsの機能の有効化または無効化
を選ぶ。
Hyper-V
にチェックを入れる
OK
を押すと、設定処理の進捗が表示されたのち完了画面に遷移する。
完了画面では、再起動を促される。
画面の指示に従って、Windowsを再起動する。
Docker Desktop for windows をインストールする
Docker公式サイトから、Docker for Windows
のインストーラーを入手する。
- [Docker公式サイト/Docker Desktop][https://www.docker.com/products/docker-desktop]
「Download for Windows」という青いボタンをクリックすると、インストーラーのダウンロードが始まる。
インストーラーのファイルサイズは、約510MB だった(2021/08/31時点)
インストーラーの起動
インストーラーを起動すると次のような画面が表示される。
画面に Install required Windows components for WSL 2
とあるが、これはDocker上でWindowsを動かすためのものである。
今回は、CentOS 環境の構築をしたいので、チェックを外しておく。
⇓
インストール処理
インストール処理のログが流れてゆく。
しばらくするとインストール処理が完了する。
インストールを完了するには、Windowsを一度ログアウトする必要があると画面に表示されている。
Docker Desktop の起動
再起動すると、Dockerが起動し、次のようなダイアログが立ち上がった。
WSL 2 is not installed
ここで Use Hyper-V
を選択してみる。
すると、チュートリアルへの案内のメッセージが表示された。
チュートリアルを体験してみよう。
Docker Desktop チュートリアル
チュートリアルを始めたところ、そのウィンドウの右側にWindows PowerShellが開いていることが分かる。
docker コマンドをシェルで実行するようにというので、実行したところ、チュートリアル用のDockerイメージをリポジトリからダウンロードしてきたようだ。
続いて、Dockerイメージのビルド処理を行うように指示される。
実行するコマンドは次の通り。
cd getting-started
docker build -t docker101tutorial .
コマンドを実行すると、シェル上でビルド処理が進行している様子がうかがえる。
続いて、コンテナの起動を指示される。
以下のコマンドを実行せよという。
docker run -d -p 80:80 \
--name docker-tutorial docker101tutorial
すると、Dockerイメージを保存して、Docker Hub にアップロードせよとのこと。
チュートリアルは一旦この辺で終わりにしておこう。
Docker 試運転
Windows PowerShell を起動し、Dockerのインストール状態を確認する。
> docker version
Client:
Cloud integration: 1.0.17
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
Git commit: 3967b7d
Built: Fri Jul 30 19:58:50 2021
OS/Arch: windows/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.8
API version: 1.41 (minimum version 1.12)
Go version: go1.16.6
Git commit: 75249d8
Built: Fri Jul 30 19:52:10 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63
docker-init:
Version: 0.19.0
GitCommit: de40ad0
便利メモ:PowerShell で CTRL+C/V を有効にする
シェルの出力を簡単にコピペできるように CTRL
+ C
/CTRL
+ V
を有効化しておこう。
また、行の折り返しも考慮してバッファにコピーできるように、行の折り返し選択を有効にする
も忘れずにチェックしておこう。
Docker版 Hellow world を動かす
Docker Hub に登録されている hello-world
というイメージをダウンロードして、それをビルド&実行してみる。
> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
コンテナの一覧を確認する。
確かに、hello-world
というイメージがダウンロードされ、コンテナが構築されたことが分かる。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8704bb047c87 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" About an hour ago Exited (0) About an hour ago repo
CentOS のコンテナ構築
(1) CentOS のコンテナイメージを取得する
Dockerイメージは、docker pull
コマンドで取得することができる。
今回、centos
リポジトリの centos7
タグが付与されたイメージを取得するので、引数は centos:centos7
としている。
> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
docker images
を使い、centos
が取得できていることを確認する。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker101tutorial latest c5ee10044f54 3 hours ago 28.2MB
alpine/git latest b8f176fa3f0d 3 months ago 25.1MB
hello-world latest d1165f221234 6 months ago 13.3kB
centos centos7 8652b9f0cb4c 9 months ago 204MB
(2) CentOS コンテナを起動する
docker run
コマンドを使い取得したDockerイメージから、CentOSのコンテナを作成する。
> docker run -it --name="centos7_1st" centos:centos7 /bin/bash
すると次のようにCentOSのコンテナが起動し、Rootユーザーでシェルにログインした状態になる。
> docker run -it --name="centos7_1st" centos:centos7 /bin/bash
[root@c1aad13a8e5c /]# pwd
/
[root@c1aad13a8e5c /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 65792556 2548080 59872700 5% /
tmpfs 65536 0 65536 0% /dev
tmpfs 1016332 0 1016332 0% /sys/fs/cgroup
shm 65536 0 65536 0% /dev/shm
/dev/sda1 65792556 2548080 59872700 5% /etc/hosts
tmpfs 1016332 0 1016332 0% /proc/acpi
tmpfs 1016332 0 1016332 0% /sys/firmware
PowerShell のウィンドウをもう一つ立ち上げて、コンテナの一覧を確認した。
centos:centos7
のコンテナが起動していることが分かる。(STATUSが Exited(0)
ではなく、Up
となっている)
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1aad13a8e5c centos:centos7 "/bin/bash" 16 minutes ago Up 16 minutes centos7_1st
8704bb047c87 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 4 hours ago Exited (0) 4 hours ago repo
(3) CentOS コンテナを停止する
起動中のCentOSコンテナに接続しているシェル(Bash)で exit
を実行すると、シェルが閉じて、コンテナも停止する。
# exit
exit
先ほどまで起動していたCentOSのコンテナが停止していることが分かる。
STATUS が Exited(0)
になっている。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1aad13a8e5c centos:centos7 "/bin/bash" 20 minutes ago Exited (0) About a minute ago centos7_1st
8704bb047c87 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 4 hours ago Exited (0) 4 hours ago repo
(4) CentOS コンテナの再起動
停止しているCentOSコンテナ(NAME="centos7_1st")を docker start
コマンドで再起動する。
> docker start centos7_1st
centos7_1st
docker ps --all
でコンテナの状態を調べると、CentOSコンテナが起動していることが確認できる。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1aad13a8e5c centos:centos7 "/bin/bash" 25 minutes ago Up 23 seconds centos7_1st
8704bb047c87 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 4 hours ago Exited (0) 4 hours ago repo
(5) 再起動したコンテナに接続する
コンテナに接続する方法には docker attatch
と docker exec
がある。
docker attatch で接続する場合
> docker attach centos7_1st
[root@c1aad13a8e5c /]# pwd
/
[root@c1aad13a8e5c /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 2.5G 58G 5% /
tmpfs 64M 0 64M 0% /dev
tmpfs 993M 0 993M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/sda1 63G 2.5G 58G 5% /etc/hosts
tmpfs 993M 0 993M 0% /proc/acpi
tmpfs 993M 0 993M 0% /sys/firmware
exit
でコンテナの接続を切ると、そのままコンテナが停止してしまう点に注意。
コンテナを動かしたままあシェルを抜ける場合は、 CTRL + P
→ CTRL + Q
で抜ける。
# CTRL + P --> CTRL + Q を入力
[root@c1aad13a8e5c /]# read escape sequence
>
read escape sequence
と表示されているのが分かる。
コンテナの稼働状況を見ると、無事動いているのが確認できる。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1aad13a8e5c centos:centos7 "/bin/bash" 7 hours ago Up 7 hours centos7_1st
8704bb047c87 hello-world "/hello" 9 hours ago Exited (0) 9 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 11 hours ago Exited (0) 11 hours ago repo
docker exec で接続する場合
> docker exec -it centos7_1st /bin/bash
[root@c1aad13a8e5c /]# pwd
/
[root@c1aad13a8e5c /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 2.5G 58G 5% /
tmpfs 64M 0 64M 0% /dev
tmpfs 993M 0 993M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/sda1 63G 2.5G 58G 5% /etc/hosts
tmpfs 993M 0 993M 0% /proc/acpi
tmpfs 993M 0 993M 0% /sys/firmware
docker exec
で接続した場合、exit
でシェルを抜けても、コンテナは停止しない。
[root@c1aad13a8e5c /]# exit
exit
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1aad13a8e5c centos:centos7 "/bin/bash" 8 hours ago Up 7 hours centos7_1st
8704bb047c87 hello-world "/hello" 9 hours ago Exited (0) 9 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 11 hours ago Exited (0) 11 hours ago repo
ただし、docker exec
で接続する場合、接続するコンテナでシェルが動いていなければならない。
(6) コンテナのバックグランド起動
コンテナをバックグラウンド起動させるには docker run
コマンドに -d
オプションを指定する。
以下のコマンドを例として実行してみる。
> docker run -it -d --name="centos7_background" centos:centos7 /bin/bash
11131abade262c1224287a7f2f651cea4fec78a2ddbdecf07345139f11fa0979
すると、新しく起動したコンテナのコンテナIDがシェルに出力される。
起動中のコンテナ一覧を見ると、バックグランド起動した centos7_background
の存在を確認することができる。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11131abade26 centos:centos7 "/bin/bash" 19 seconds ago Up 18 seconds centos7_background
c1aad13a8e5c centos:centos7 "/bin/bash" 23 hours ago Up 22 hours centos7_1st
8704bb047c87 hello-world "/hello" 24 hours ago Exited (0) 24 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 26 hours ago Exited (0) 26 hours ago repo
バックグランド起動したコンテナに接続する
docker exec で接続する
まず docker exec
でコンテナに接続する。
> docker exec -it centos7_background /bin/bash
[root@11131abade26 /]# pwd
/
[root@11131abade26 /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 2.5G 58G 5% /
tmpfs 64M 0 64M 0% /dev
tmpfs 993M 0 993M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/sda1 63G 2.5G 58G 5% /etc/hosts
tmpfs 993M 0 993M 0% /proc/acpi
tmpfs 993M 0 993M 0% /sys/firmware
コンテナへの接続を確認できたので、exit
でシェルを抜けてみる。
# コンテナのシェルから抜ける
[root@11131abade26 /]# exit
exit
>
コンテナの一覧を見ると、centos7_backgounrd
がバックグランド起動している(=停止していない)ことを確認できた。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11131abade26 centos:centos7 "/bin/bash" 4 minutes ago Up 4 minutes centos7_background
c1aad13a8e5c centos:centos7 "/bin/bash" 23 hours ago Up 22 hours centos7_1st
8704bb047c87 hello-world "/hello" 25 hours ago Exited (0) 25 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 26 hours ago Exited (0) 26 hours ago repo
docker attach で接続する
続いて、docker attach
で接続を試みる。
バックグランド起動であれば、exit
でシェルを抜けてもコンテナは停止せず、稼働したままのはずである。
> docker attach centos7_background
[root@11131abade26 /]# pwd
/
[root@11131abade26 /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 2.5G 58G 5% /
tmpfs 64M 0 64M 0% /dev
tmpfs 993M 0 993M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/sda1 63G 2.5G 58G 5% /etc/hosts
tmpfs 993M 0 993M 0% /proc/acpi
tmpfs 993M 0 993M 0% /sys/firmware
続いて、exit
でコンテナとの接続を終了してみる。
[root@11131abade26 /]# exit
exit
バックグラウンド起動していたコンテナだったが、停止していた。
> docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11131abade26 centos:centos7 "/bin/bash" 11 minutes ago Exited (0) 18 seconds ago centos7_background
c1aad13a8e5c centos:centos7 "/bin/bash" 23 hours ago Up 22 hours centos7_1st
8704bb047c87 hello-world "/hello" 25 hours ago Exited (0) 25 hours ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 26 hours ago Exited (0) 26 hours ago repo
書式を指定して docker ps コマンドを実行する
コンテナの状態を一覧する docker ps
コマンドであるが、書式を指定して表示することができる。
# 例
> docker ps --format "table {{.Image}}\t{{.Names}}" --all
IMAGE NAMES
centos:centos7 centos7_background
centos:centos7 centos7_1st
hello-world angry_gauss
alpine/git repo
{{.プロパティ名}}
の形式で、出力したいコンテナのプロパティを指定することができる。
# 例2
> docker ps --all --format "table {{.Image}}\t{{.Names}}\t{{.CreatedAt}}\t{{.Status}}"
IMAGE NAMES CREATED AT STATUS
centos:centos7 centos7_background 2021-09-05 19:01:31 +0900 JST Exited (0) 19 minutes ago
centos:centos7 centos7_1st 2021-09-04 20:27:59 +0900 JST Up 23 hours
hello-world angry_gauss 2021-09-04 18:31:54 +0900 JST Exited (0) 25 hours ago
alpine/git repo 2021-09-04 17:13:05 +0900 JST Exited (0) 26 hours ago
指定できるプロパティの一覧は、以下の公式サイト文書で確認することができる。
Docker Desktop が起動しない場合の対処法
Hyper-V
を初期化できず、Docker Desktopの起動が失敗することがある。
例えば、他に Hyper-V
を利用するアプリケーションが先に起動していた場合である。
- 例:WSL版のUbuntuが起動していた、などの場合
この時、サービス管理ツールを起動し、Hyper-V
に関するサービスを再起動すると良いだろう。
以下のスクリーンショットで枠線で囲んだサービスを参照。
- HV ホスト サービス
- Hyper-V Virtual Machine Management
- Hyper-V ホスト コンピューティング サービス
環境をカスタマイズ&Docker イメージを保存する
標準的なDocker イメージを元に構築したコンテナで、環境をカスタマイズして(各種パッケージのインストールや設定など)、カスタマイズした環境をDocker イメージとして保存するとしたい。
Docker イメージを保存すれば、複雑で面倒なインストール作業を伴う環境も、コマンド一つで復元できるようになるだろう。
まず、先ほど立ち上げた、CentOSのコンテナで環境のカスタマイズを行う。
# コンテナを起動
> docker start centos7_1st
centos7_1st
# コンテナに接続
> docker attach centos7_1st
[root@c1aad13a8e5c /]#
コンテナの環境のカスタマイズ
まず、各パッケージを最新の状態にする。
[root@c1aad13a8e5c /]# yum update
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirrors.cat.net
* extras: mirrors.cat.net
* updates: mirrors.cat.net
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/4): extras/7/x86_64/primary_db | 243 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.1 MB 00:00:01
(4/4): updates/7/x86_64/primary_db | 11 MB 00:00:02
Resolving Dependencies
--> Running transaction check
---> Package bind-license.noarch 32:9.11.4-26.P2.el7 will be updated
---> Package bind-license.noarch 32:9.11.4-26.P2.el7_9.7 will be an update
(・・・中略・・・)
---> Package zlib.x86_64 0:1.2.7-18.el7 will be updated
---> Package zlib.x86_64 0:1.2.7-19.el7_9 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Updating:
bind-license noarch 32:9.11.4-26.P2.el7_9.7 updates 91 k
centos-release x86_64 7-9.2009.1.el7.centos updates 27 k
coreutils x86_64 8.22-24.el7_9.2 updates 3.3 M
curl x86_64 7.29.0-59.el7_9.1 updates 271 k
device-mapper x86_64 7:1.02.170-6.el7_9.5 updates 297 k
device-mapper-libs x86_64 7:1.02.170-6.el7_9.5 updates 325 k
glib2 x86_64 2.56.1-9.el7_9 updates 2.5 M
glibc x86_64 2.17-324.el7_9 updates 3.6 M
glibc-common x86_64 2.17-324.el7_9 updates 12 M
kpartx x86_64 0.4.9-135.el7_9 updates 81 k
libblkid x86_64 2.23.2-65.el7_9.1 updates 183 k
libcurl x86_64 7.29.0-59.el7_9.1 updates 223 k
libmount x86_64 2.23.2-65.el7_9.1 updates 185 k
libsmartcols x86_64 2.23.2-65.el7_9.1 updates 143 k
libuuid x86_64 2.23.2-65.el7_9.1 updates 84 k
nss x86_64 3.53.1-7.el7_9 updates 869 k
nss-sysinit x86_64 3.53.1-7.el7_9 updates 66 k
nss-tools x86_64 3.53.1-7.el7_9 updates 535 k
openldap x86_64 2.4.44-24.el7_9 updates 356 k
openssl-libs x86_64 1:1.0.2k-21.el7_9 updates 1.2 M
python x86_64 2.7.5-90.el7 updates 96 k
python-libs x86_64 2.7.5-90.el7 updates 5.6 M
systemd x86_64 219-78.el7_9.3 updates 5.1 M
systemd-libs x86_64 219-78.el7_9.3 updates 418 k
tzdata noarch 2021a-1.el7 updates 501 k
util-linux x86_64 2.23.2-65.el7_9.1 updates 2.0 M
vim-minimal x86_64 2:7.4.629-8.el7_9 updates 443 k
zlib x86_64 1.2.7-19.el7_9 updates 90 k
Transaction Summary
========================================================================================================================
Upgrade 28 Packages
Total download size: 40 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7/updates/packages/centos-release-7-9.2009.1.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for centos-release-7-9.2009.1.el7.centos.x86_64.rpm is not installed
(1/28): centos-release-7-9.2009.1.el7.centos.x86_64.rpm | 27 kB 00:00:00
(2/28): bind-license-9.11.4-26.P2.el7_9.7.noarch.rpm | 91 kB 00:00:00
(3/28): curl-7.29.0-59.el7_9.1.x86_64.rpm | 271 kB 00:00:00
(・・・中略・・・)
(27/28): glibc-common-2.17-324.el7_9.x86_64.rpm | 12 MB 00:00:02
(28/28): zlib-1.2.7-19.el7_9.x86_64.rpm | 90 kB 00:00:00
------------------------------------------------------------------------------------------------------------------------
Total 14 MB/s | 40 MB 00:00:02
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : tzdata-2021a-1.el7.noarch 1/56
Updating : glibc-2.17-324.el7_9.x86_64 2/56
(・・・中略・・・)
Cleanup : glibc-common-2.17-317.el7.x86_64 54/56
Cleanup : glibc-2.17-317.el7.x86_64 55/56
Cleanup : tzdata-2020d-2.el7.noarch 56/56
Verifying : python-2.7.5-90.el7.x86_64 1/56
Verifying : systemd-libs-219-78.el7_9.3.x86_64 2/56
(・・・中略・・・)
Verifying : libsmartcols-2.23.2-65.el7.x86_64 54/56
Verifying : libmount-2.23.2-65.el7.x86_64 55/56
Verifying : 32:bind-license-9.11.4-26.P2.el7.noarch 56/56
Updated:
bind-license.noarch 32:9.11.4-26.P2.el7_9.7 centos-release.x86_64 0:7-9.2009.1.el7.centos
coreutils.x86_64 0:8.22-24.el7_9.2 curl.x86_64 0:7.29.0-59.el7_9.1
device-mapper.x86_64 7:1.02.170-6.el7_9.5 device-mapper-libs.x86_64 7:1.02.170-6.el7_9.5
glib2.x86_64 0:2.56.1-9.el7_9 glibc.x86_64 0:2.17-324.el7_9
glibc-common.x86_64 0:2.17-324.el7_9 kpartx.x86_64 0:0.4.9-135.el7_9
libblkid.x86_64 0:2.23.2-65.el7_9.1 libcurl.x86_64 0:7.29.0-59.el7_9.1
libmount.x86_64 0:2.23.2-65.el7_9.1 libsmartcols.x86_64 0:2.23.2-65.el7_9.1
libuuid.x86_64 0:2.23.2-65.el7_9.1 nss.x86_64 0:3.53.1-7.el7_9
nss-sysinit.x86_64 0:3.53.1-7.el7_9 nss-tools.x86_64 0:3.53.1-7.el7_9
openldap.x86_64 0:2.4.44-24.el7_9 openssl-libs.x86_64 1:1.0.2k-21.el7_9
python.x86_64 0:2.7.5-90.el7 python-libs.x86_64 0:2.7.5-90.el7
systemd.x86_64 0:219-78.el7_9.3 systemd-libs.x86_64 0:219-78.el7_9.3
tzdata.noarch 0:2021a-1.el7 util-linux.x86_64 0:2.23.2-65.el7_9.1
vim-minimal.x86_64 2:7.4.629-8.el7_9 zlib.x86_64 0:1.2.7-19.el7_9
Complete!
パッケージをいくつか導入する。
sudo の導入
[root@c1aad13a8e5c /]# yum install sudo
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirrors.cat.net
* extras: mirrors.cat.net
* updates: mirrors.cat.net
Resolving Dependencies
--> Running transaction check
---> Package sudo.x86_64 0:1.8.23-10.el7_9.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
sudo x86_64 1.8.23-10.el7_9.1 updates 843 k
Transaction Summary
========================================================================================================================
Install 1 Package
Total download size: 843 k
Installed size: 3.0 M
Is this ok [y/d/N]: y
Downloading packages:
sudo-1.8.23-10.el7_9.1.x86_64.rpm | 843 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : sudo-1.8.23-10.el7_9.1.x86_64 1/1
Verifying : sudo-1.8.23-10.el7_9.1.x86_64 1/1
Installed:
sudo.x86_64 0:1.8.23-10.el7_9.1
Complete!
wget の導入
[root@c1aad13a8e5c /]# yum install wget
(・・・中略・・・)
Installed:
wget.x86_64 0:1.14-18.el7_6.1
yu
Complete!
zip & unzip の導入
[root@c1aad13a8e5c /]# yum install zip unzip
(・・・中略・・・)
Installed:
unzip.x86_64 0:6.0-22.el7_9 zip.x86_64 0:3.0-11.el7
Complete!
MariaDB(MySQL) の導入
[root@c1aad13a8e5c /]# yum install mariadb mariadb-devel mariadb-libs
(・・・中略・・・)
---> Package perl-HTTP-Tiny.noarch 0:0.033-3.el7 will be installed
---> Package perl-parent.noarch 1:0.225-244.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
mariadb x86_64 1:5.5.68-1.el7 base 8.8 M
mariadb-devel x86_64 1:5.5.68-1.el7 base 757 k
mariadb-libs x86_64 1:5.5.68-1.el7 base 760 k
Installing for dependencies:
groff-base x86_64 1.22.2-8.el7 base 942 k
keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k
krb5-devel x86_64 1.15.1-50.el7 base 273 k
libcom_err-devel x86_64 1.42.9-19.el7 base 32 k
libkadm5 x86_64 1.15.1-50.el7 base 179 k
libselinux-devel x86_64 2.5-15.el7 base 187 k
libsepol-devel x86_64 2.5-10.el7 base 77 k
libverto-devel x86_64 0.2.5-4.el7 base 12 k
openssl-devel x86_64 1:1.0.2k-21.el7_9 updates 1.5 M
pcre-devel x86_64 8.32-17.el7 base 480 k
perl x86_64 4:5.16.3-299.el7_9 updates 8.0 M
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-3.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Pod-Escapes noarch 1:1.04-299.el7_9 updates 52 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-5.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-libs x86_64 4:5.16.3-299.el7_9 updates 690 k
perl-macros x86_64 4:5.16.3-299.el7_9 updates 44 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
zlib-devel x86_64 1.2.7-19.el7_9 updates 50 k
Transaction Summary
========================================================================================================================
Install 3 Packages (+38 Dependent packages)
Total download size: 25 M
Installed size: 102 M
Is this ok [y/d/N]: y
Downloading packages:
(1/41): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm | 37 kB 00:00:00
(2/41): libcom_err-devel-1.42.9-19.el7.x86_64.rpm | 32 kB 00:00:00
(3/41): krb5-devel-1.15.1-50.el7.x86_64.rpm | 273 kB 00:00:00
(・・・中略・・・)
Installed:
mariadb.x86_64 1:5.5.68-1.el7 mariadb-devel.x86_64 1:5.5.68-1.el7 mariadb-libs.x86_64 1:5.5.68-1.el7
Dependency Installed:
groff-base.x86_64 0:1.22.2-8.el7 keyutils-libs-devel.x86_64 0:1.5.8-3.el7
krb5-devel.x86_64 0:1.15.1-50.el7 libcom_err-devel.x86_64 0:1.42.9-19.el7
libkadm5.x86_64 0:1.15.1-50.el7 libselinux-devel.x86_64 0:2.5-15.el7
libsepol-devel.x86_64 0:2.5-10.el7 libverto-devel.x86_64 0:0.2.5-4.el7
openssl-devel.x86_64 1:1.0.2k-21.el7_9 pcre-devel.x86_64 0:8.32-17.el7
perl.x86_64 4:5.16.3-299.el7_9 perl-Carp.noarch 0:1.26-244.el7
perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7
perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7
perl-HTTP-Tiny.noarch 0:0.033-3.el7 perl-PathTools.x86_64 0:3.40-5.el7
perl-Pod-Escapes.noarch 1:1.04-299.el7_9 perl-Pod-Perldoc.noarch 0:3.20-4.el7
perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7
perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-5.el7
perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7
perl-constant.noarch 0:1.27-2.el7 perl-libs.x86_64 4:5.16.3-299.el7_9
perl-macros.x86_64 4:5.16.3-299.el7_9 perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7 zlib-devel.x86_64 0:1.2.7-19.el7_9
Complete!
anaconda の導入
yum
ではなく、公式のインストーラーを入手して、導入する。
anaconda はグローバルにインストールされるのではなく、各ユーザーごとにインストールされる。
ここでは開発用ユーザー ds_eng
を用意し、そのユーザーディレクトリにインストールを試みる。
$ mkdir ./src # ダウンロード用ディレクトリを作っておく
$ cd ./src
$ curl -O https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 544M 100 544M 0 0 17.2M 0 0:00:31 0:00:31 --:--:-- 17.3M
$ ll
total 557480
-rw-r--r-- 1 ds-eng ds-eng 570853747 Sep 14 17:43 Anaconda3-2021.05-Linux-x86_64.sh
それではインストーラーを実行する。
$ bash ./Anaconda3-2021.05-Linux-x86_64.sh
Welcome to Anaconda3 2021.05
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> (Enterを入力)
# 規約がズラーっと表示される
===================================
End User License Agreement - Anaconda Individual Edition
===================================
Copyright 2015-2021, Anaconda, Inc.
All rights reserved under the 3-clause BSD License:
This End User License Agreement (the "Agreement") is a legal agreement between you and Anaconda, Inc. ("Anaconda") and g
overns your use of Anaconda Individual Edition (which was formerly known as Anaconda Distribution).
Subject to the terms of this Agreement, Anaconda hereby grants you a non-exclusive, non-transferable license to:
* Install and use the Anaconda Individual Edition (which was formerly known as Anaconda Distribution),
* Modify and create derivative works of sample source code delivered in Anaconda Individual Edition from Anaconda's re
pository; and
* Redistribute code files in source (if provided to you by Anaconda as source) and binary forms, with or without modif
ication subject to the requirements set forth below.
Anaconda may, at its option, make available patches, workarounds or other updates to Anaconda Individual Edition. Unless
the updates are provided with their separate governing terms, they are deemed part of Anaconda Individual Edition licen
sed to you as provided in this Agreement. This Agreement does not entitle you to any support for Anaconda Individual Edi
tion.
(・・・中略・・・)
# ライセンスへの同意を求められるので `yes` と入力
Do you accept the license terms? [yes|no]
[no] >>> yes
# インストール先の確認
# 今回は ユーザーディレクトリにインストールするので、そのまま Enter で良い
Anaconda3 will now be installed into this location:
/home/ds_eng/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/home/ds_eng/anaconda3] >>> (Enter を入力)
# インストール処理の進捗が表示される
PREFIX=/home/ds_eng/anaconda3
Unpacking payload ...
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
environment location: /home/ds_eng/anaconda3
added / updated specs:
- _ipyw_jlab_nb_ext_conf==0.1.0=py38_0
- _libgcc_mutex==0.1=main
- alabaster==0.7.12=pyhd3eb1b0_0
- anaconda-client==1.7.2=py38_0
- anaconda-navigator==2.0.3=py38_0
- anaconda-project==0.9.1=pyhd3eb1b0_1
- anaconda==2021.05=py38_0
(・・・中略・・・)
- zope.interface==5.3.0=py38h27cfd23_0
- zope==1.0=py38_1
- zstd==1.4.5=h9ceee32_0
The following NEW packages will be INSTALLED:
_ipyw_jlab_nb_ext~ pkgs/main/linux-64::_ipyw_jlab_nb_ext_conf-0.1.0-py38_0
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
alabaster pkgs/main/noarch::alabaster-0.7.12-pyhd3eb1b0_0
anaconda pkgs/main/linux-64::anaconda-2021.05-py38_0
anaconda-client pkgs/main/linux-64::anaconda-client-1.7.2-py38_0
anaconda-navigator pkgs/main/linux-64::anaconda-navigator-2.0.3-py38_0
(・・・中略・・・)
zope.event pkgs/main/linux-64::zope.event-4.5.0-py38_0
zope.interface pkgs/main/linux-64::zope.interface-5.3.0-py38h27cfd23_0
zstd pkgs/main/linux-64::zstd-1.4.5-h9ceee32_0
Preparing transaction: done
Executing transaction: done
installation finished.
# 続いて初期化設定:初回インストールなので `yes` と入力
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>>
no change /home/ds_eng/anaconda3/condabin/conda
no change /home/ds_eng/anaconda3/bin/conda
no change /home/ds_eng/anaconda3/bin/conda-env
no change /home/ds_eng/anaconda3/bin/activate
no change /home/ds_eng/anaconda3/bin/deactivate
no change /home/ds_eng/anaconda3/etc/profile.d/conda.sh
no change /home/ds_eng/anaconda3/etc/fish/conf.d/conda.fish
no change /home/ds_eng/anaconda3/shell/condabin/Conda.psm1
no change /home/ds_eng/anaconda3/shell/condabin/conda-hook.ps1
no change /home/ds_eng/anaconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change /home/ds_eng/anaconda3/etc/profile.d/conda.csh
modified /home/ds_eng/.bashrc
==> For changes to take effect, close and re-open your current shell. <==
If you'd prefer that conda's base environment not be activated on startup,
set the auto_activate_base parameter to false:
conda config --set auto_activate_base false
Thank you for installing Anaconda3!
===========================================================================
Working with Python and Jupyter notebooks is a breeze with PyCharm Pro,
designed to be used with Anaconda. Download now and have the best data
tools at your fingertips.
PyCharm Pro for Anaconda is available at: https://www.anaconda.com/pycharm
カスタマイズしたコンテナのDoker Image を保存する
コンテナの初期設定(基礎的パッケージのインストールなど)が終わったら、そのコンテナのDocker Image を保存するとしたい。
機械学習、データ分析用・データエンジニアリング用の環境なので、env-ds-ml-eng
としておこう。
まず、カスタマイズ作業をしていたコンテナから exit
で抜け、コンテナが停止していることを確かめる。
[ds_eng@c1aad13a8e5c src]$ exit
exit
[root@c1aad13a8e5c src]# exit
exit
# コンテナを抜けたら、停止しているか確認
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11131abade26 centos:centos7 "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago centos7_background
c1aad13a8e5c centos:centos7 "/bin/bash" 2 weeks ago Exited (0) 13 seconds ago centos7_1st
8704bb047c87 hello-world "/hello" 2 weeks ago Exited (0) 2 weeks ago angry_gauss
b3f77379ed6a alpine/git "git clone https://g…" 2 weeks ago Exited (0) 2 weeks ago repo
docker image の保存は、docker commit
で行う。
書式は次の通り
docker commit (コンテナ名) (保存イメージ名)
環境をカスタマイズしていたコンテナは centos7_1st
である。
> docker commit centos7_1st env-ds-ml-eng
sha256:839c1689b52420f6912177aceb7f184cdef19dbf702c01e0cf71524dfa175722
Docker Image env-ds-ml-eng
が生成出来ていることが分かる。
なかなかのサイズである。
軽量化の方法は、別のエントリでまとめるとしよう。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
env-ds-ml-eng latest 839c1689b524 25 seconds ago 4.56GB
docker101tutorial latest c5ee10044f54 2 weeks ago 28.2MB
alpine/git latest b8f176fa3f0d 3 months ago 25.1MB
hello-world latest d1165f221234 6 months ago 13.3kB
centos centos7 8652b9f0cb4c 10 months ago 204MB
その他
Docker公式アイコン画像を使う際には、トレードマークポリシーに従った画像を使うようにとのこと。
公式のトレードマークポリシーのページはこちらになる。
参考資料
【入門】はじめての Docker Desktop for Windows のインストールと CentOS の仮想環境構築…
windows 10 より前の問題点Ctrl + C や Ctrl + V が使えないコマンドの結果をコピペしようとする…
コンテナを実行したままにしておきたい場合があります。日常的に使う便利なサービスを立ち上げていつでもアクセスできるようにし…