Dockerメモ
この記事は古い内容です。最新情報は こちら を参照してください。
目次
- 環境
- Dockerとは
- Docker CE をインストールする
- イメージを管理する
- コンテナを管理する
- コンテナに接続する
- ホストのディレクトリをマウントする
- ホストの8080ポートをコンテナの80にマッピングする
- ループバックデバイスの警告を抑止する
- コンテナログイン時にCtrl-Pを二度押さないと効かないのを改善する
- コンテナにログインした際にvimで日本語が文字化けするのを改善する
- リンク
環境
- 実施日: 2019年8月18日
- ホストOS: Windows 10
- ゲストOS: CentOS 7.2
- ハイパーバイザ: VirtualBox 6.0
- Docker: Docker 1.9.1
Dockerとは
- Docker社が開発している、Linux をターゲットとするコンテナ管理基盤です。
- VirtualBox, VMware, Hyper-V などのハイパーバイザ型仮想化がホストOS上でゲストOSを仮想的に起動させるのに対し、コンテナ型仮想化では、ホストOSとゲストコンテナでOSを共有し、ファイルシステムやプロセス空間、ネットワーク空間等のみを仮想化し、プロセスのみを起動します。
- ハイパーバイザ型に対して、起動が早い、サイズが小さいなどの利点を持ちます。
- 通常、ひとつのコンテナでひとつのプロセスのみを起動します。
- ハイパーバイザ型は仮想OSを動かすもの、コンテナ型はプロセス固有のファイルシステム等をまとったプロセスを動かすものだと考えれば理解が早いと思います。
- 無償版の「Docker CE(Community Edition)」や有償版の「Docker EE(Enterprise Edition)」などがあります。
- 最近では Mac や Windows でも Docker を動かせるようになってきました。
- コンテナ内部のボリューム(ファイルシステム/ディレクトリ/ファイル)は基本的に揮発性です。コンテナが削除された時点で、コンテナ内のプロセスが書き込んだログファイルなどもすべて消えてしまいます。永続ボリュームを使用するには、run コマンドの -v オプションを使用します。
Docker CE をインストールする
CentOS 7
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install -y docker-ce docker-ce-cli containerd.io
# systemctl enable docker
# systemctl start docker
# docker version
# docker info
イメージを管理する
DockerHub からイメージを検索する # docker search centos イメージをダウンロードする # docker pull centos:7 ダウンロード済みのイメージ一覧を表示する # docker images イメージを削除する # docker rmi centos:7
コンテナを管理する
コンテナを起動する # docker run -d -it --name test1 centos:7 コンテナの一覧を表示する (-a は停止中もすべて) # docker ps -a コンテナを開始・停止・再起動・削除・リネームする # docker start test1 # docker stop test1 # docker restart test1 # docker rm test1 # docker rename test1 test2
コンテナ起動(run)時には下記などのオプションを指定することができます。
オプション | 説明 |
---|---|
-d | コンテナのメインプロセスを端末からデタッチします。 |
-i | コンテナの標準入力を開いたままにします。 |
-t | 端末を割り当てたままにします。 |
--name 名前 | コンテナ名を指定します。 |
-p hPort:cPort | ホストOSのポート番号(hPort)を、コンテナ内のポート番号(cPort)にバインドします。(例: -p 8080:80) |
-v hVolume:cVolume | ホストのボリューム(hVolume)を、コンテナ内のボリューム(cVolume)にバインドします。(例: -v /var/test1/app:/opt/app) |
--rm | コンテナのメインプロセス終了時にコンテナを自動的に削除します。 |
コンテナに接続する
centos イメージなど、起動時に -it オプションをつけ、メインプロセスが /bin/bash 等であるコンテナに対しては、メインプロセスに直接アタッチすることができます。この場合、exit や Ctrl-D 等でぬけると、メインプロセス(=コンテナ)自体が終了してしまします。
コンテナのメインプロセスにアタッチする # docker attach test1 [root@db80ea8860ff /]# Ctrl-P Ctrl-Q デタッチするには Ctrl-P Ctrl-Q を押す
httpd イメージなど、メインプロセスが httpd 等のコンテナの場合、メインプロセスとは別に、もう一つ別の /bin/bash 等を起動して、それにアタッチすることも可能です。この場合、exit や Ctrl-D で抜けても /bin/bash が終了するのみで、メインプロセス(=コンテナ)は終了しません。
コンテナにもうひとつ別の /bin/bash を起動して接続する
# docker exec -it test1 /bin/bash
[root@db80ea8860ff /]# exit
ホストのディレクトリをマウントする
SELinuxを無効化する # vi /etc/selinux/config SELINUX=disabled # setenforce 0 -vオプションでホストの /mnt/test1 をコンテナの /mnt にマウントする # docker run -dit -h test1 --name test1 -v /mnt/test1:/mnt centos:centos6
ホストの8080ポートをコンテナの80にマッピングする
# docker run -dit -h test1 --name test1 -p 8080:80 centos:centos6
ループバックデバイスの警告を抑止する
コンテナ起動時に下記の警告が表示される場合は...
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
Dockerストレージの起動オプションに下記を加える
# vi /etc/sysconfig/docker-storage DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true" # systemctl restart docker
コンテナログイン時にCtrl-Pを二度押さないと効かないのを改善する
Ctrl-P は、コンテナからデタッチする際のキーとして割り当てられているため、ホストOS側でこれを変更します。
# mkdir ~/.docker # cat > ~/.docker/config.json <<EOF { "detachKeys": "ctrl-\\" } EOF
コンテナにログインした際にvimで日本語が文字化けするのを改善する
コンテナ側で環境変数LANGを設定します。
# cat >> ~/.bashrc <<EOF export LANG=en_US.UTF-8 EOF
リンク
Copyright (C) 2016-2019 杜甫々
初版:2016年6月4日 最終更新:2019年8月18日
https://www.tohoho-web.com/ex/docker.html