Dockerはrootで動かすイメージが強いのですがlxcと同じように非特権モードでも動きます。lxcがベースになってるから当たり前のことですが、調べてみてもなかなか事例が見つからなかったのでまとめてみました。
まずsubuidとsubgidを編集します。linux mintを使っているのでほかのディストリビューションはわかりませんが似たような構成になっていると思います。
# cat /etc/subuid
user1:100000:65536 lxd:165536:65536 root:165536:65536
# cat /etc/subgid
user1:100000:65536 lxd:165536:65536 root:165536:65536
Dockerの設定を追加します。(例:user1)
# cat /etc/docker/daemon.json
{ "userns-remap": "user1" }
起動ファイルを編集します。
# cat /etc/init.d/docker
DOCKER_OPTS="--userns-remap=default"
Dockerを再起動します。
# systemctl restart docker
これで非特権モードが使えるようになります。
Dockerの基本コマンド集
コマンドが覚えきれないのでよく使うコマンドのチートシートを作ってみました。
Dockerのイメージサーチ
docker search IMAGE eg) docker search debian
Dockerイメージのダウンロード
docker pull IMAGE
Dockerのイメージリスト
docker images OR docker image list
コンテナの起動
docker run -t -i IMAGE /bin/bash # コンテナをデーモンモードで起動する docker run -d -t -i IMAGE /bin/bash # コンテナ名を指定して起動する docker run -t -i --name NAME IMAGE /bin/bash # ホスト名を指定して起動する docker run -t -i -h HOST NAME --name NAME IMAGE /bin/bash # コンテナを終了時に破棄する指定で起動する docker run --rm -t -i IMAGE /bin/bash # ホストのポートを割り当てて起動する docker run -d -p 80:80 --name NAME IMAGE Note: HOST port:CONTAINER port # ホスト/etcをコンテナの/root/etcにマッピングして起動する docker run -v /etc:/root/etc -t -i IMAGE # CPUを割り当てて起動する docker run -c 200 -i -t IAMGE /bin/bash # メモリを割り当てて起動する docker run -m 512m -i -t IMAGE /bin/bash # 自動起動 docker run -dit --restart unless-stopped redis
コンテナ操作
# コンテナにアタッチする docker attach CONTAINER ID or CONTAINER NAME # initでコンテナを起動している場合にアクセスする docker exec -t -i CONTAINER ID or CONTAINER NAME bash # コンテナをスタートする docker start CONTAINER ID or CONTAINER NAME # コンテナをアタッチしてスタートする docker start -a CONTAINER ID or CONTAINER NAME # コンテナを終了する docker stop CONTAINER ID or CONTAINER NAME # コンテナを強制終了する docker kill CONTAINER ID or CONTAINER NAME
Dockerの情報
# 起動しているコンテナのリスト表示する docker ps # 起動していないコンテナ含めてのリスト表示する docker ps -a # 直前に終了したコンテナの表示する docker ps -l -q # コンテナのプロセスを表示する docker top CONTAINER # コンテナのログを表示する docker logs -f CONTAINER # コンテナ情報を表示する docker inspect CONTAINER # イメージ情報を表示する docker inspect IMAGE # Dockerのバージョンを表示する docker version # 動作中のDockerの情報を表示する docker info
削除
# コンテナを削除する docker rm CONTAINER ID or CONTAINER NAME # イメージを削除する docker rmi IMAGE
イメージ操作
# コンテナからイメージを作成する docker commit CONTAINER ID or CONTAINER NAME NEW IMAGE # イメージをファイルに保存する docker save IMAGE > /tmp/IMAGE.tar # イメージを呼びこむ docker load < /tmp/IMAGE.tar # dockerfileからイメージをビルドする docker build # キャッシュを無効にしてビルドする docker build --no-cache=true # コンテナからtar fileを作成する docker export CONTAINER > filename.tar
ネットワーク
# ネットワークブリッジを作成する docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 --opt "com.docker.network.bridge.name"="docker1" server # ネットワークブリッジの情報を表示する docker network inspect docker1 # ネットワークブリッジにコンテナをアタッチする docker network connect docker1 CONTAINER ID or CONTAINER NAME