19: 2020-09-20 (日) 10:21:26 iseki |
現: 2023-05-05 (金) 10:17:58 iseki |
| *Docker 備忘録 [#y5b36a8f] | | *Docker 備忘録 [#y5b36a8f] |
| *** see also [#i9ed634e] | | *** see also [#i9ed634e] |
- | -- [[Docker]] | + | - [[Docker]] |
- | -- [[Docker Compose]] | + | - [[Docker Compose]] |
- | -- [[Docker Network]] | + | - [[Docker Network]] |
- | -- [[Docker Swarm]] | + | - [[Docker Swarm]] |
- | -- [[Kubernetes]] | + | - [[Kubernetes]] |
| + | - [[Podman]] |
| #br | | #br |
| | | |
| | | |
| ** Install [#db912155] | | ** Install [#db912155] |
| + | *** CentOS 8 (2021 7/25) [#e8e9cdfb] |
| + | # dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
| + | # dnf -y install docker-ce docker-ce-cli containerd.io --nobest --allowerasing |
| + | #br |
| + | |
| + | *** CentOS8 入れ直し(21 7/3) [#q7821cf8] |
| + | **** リポジトリがあるようなので,それから入れなおす. [#ff55bfe5] |
| + | - # rpm -e docker-ce-3:19.03.15 |
| + | - # rpm -e containerd.io-1.2.6 --force |
| + | -- 依存関係が複雑なので,dnf を使う |
| + | - # dnf erase containerd.io-1.2.6 |
| + | |
| + | # dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
| + | # dnf -y install docker-ce docker-ce-cli containerd.io |
| + | #br |
| | | |
| *** For CentOS8 [#ja91b0de] | | *** For CentOS8 [#ja91b0de] |
| -- CentOS8 では [[nftables]] が使用されている | | -- CentOS8 では [[nftables]] が使用されている |
| | | |
- | - %%下記方法とは別に ''dnf module install container-tools'' でインストールされるようだ? (2020 8/29 未確認)%% | + | - %%下記方法とは別に ''dnf module install container-tools'' でもインストールできる場合がある.%% |
| #br | | #br |
| | | |
| # rpm -e buildah | | # rpm -e buildah |
| # rpm -e cockpit-podman | | # rpm -e cockpit-podman |
| + | # rpm -e toolbox |
| # rpm -e podman | | # rpm -e podman |
| + | # rpm -e containers-common-1-2.module_el8.5.0+890+6b136101.noarch (必要なら) |
| # rpm -e runc | | # rpm -e runc |
| # rpm -ihv containerd.io-1.2.6-3.3.el7.x86_64.rpm | | # rpm -ihv containerd.io-1.2.6-3.3.el7.x86_64.rpm |
| + | - Install & Getting Start へ |
| + | #br |
| | | |
- | - もし podman が必要なら containerd.io をインストール後に,入れ直す. | + | **** 2023 1/17 CentOS8 の update で Docker が動かなくなったので上記の方法で入れ直し.(containerd.io が runc と競合する場合) [#hee294de] |
- | # yum install podman | + | |
- | # yum install cockpit-podman | + | #br |
- | # yum install buildah | + | |
| + | **** もし podman が必要なら containerd.io をインストール後に,入れ直す. [#y6d1a036] |
| + | # yum install podman -y |
| + | # yum install toolbox -y |
| + | # yum install cockpit-podman -y |
| + | # yum install buildah -y |
| | | |
| #br | | #br |
| # systemctl start docker | | # systemctl start docker |
| # docker run hello-world | | # docker run hello-world |
| + | #br |
| + | |
| + | *** CentOS6 [#za65a6da] |
| + | - yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm |
| + | -- chkconfig --level 3 docker on |
| + | |
| + | - 注)ipv6 が OFF だと bridge.ko の読み込みで,シンボル(ipv6_dev_get_saddr)未定義のエラーを起こす. |
| + | -- Error starting daemon: Error initializing network controller: Error creating default \"bridge\" network: package not installed |
| + | -- NSLでは /etc/modprobe.d/dist.conf の最終行をチェック <-- ここで ipv6 を止めている. |
| #br | | #br |
| | | |
| ** Getting Start [#fedb2239] | | ** Getting Start [#fedb2239] |
- | *** CentOSを使ってみる [#e8e57f9e] | + | |
| + | *** 使ってみる [#fbf5e0d3] |
| + | |
| + | **** Hello World [#u91eb055] |
| + | # docker run hello-world |
| + | #br |
| + | |
| + | **** CentOSを使ってみる [#e8e57f9e] |
| # docker pull centos | | # docker pull centos |
| # docker images | | # docker images |
| # docker run -i -t centos /bin/bash | | # docker run -i -t centos /bin/bash |
| (DockerBash)# | | (DockerBash)# |
| + | #br |
| + | |
| + | **** CentOSを使ってみる2 [#m1ae3f38] |
| + | # docker pull centos:centos7 |
| + | # docker run -ti -d --name centos7 centos:centos7 |
| + | # docker exec -it centos7 /bin/bash |
| + | [root@fbd5aeb4046a /]# |
| + | #br |
| + | |
| + | ** [[Local Registry>./Registry]] [#jc169974] |
| #br | | #br |
| | | |
| ** コマンド [#f867895b] | | ** コマンド [#f867895b] |
| + | |
| *** 操作 [#p0316f54] | | *** 操作 [#p0316f54] |
| **** コンテナ [#o6820680] | | **** コンテナ [#o6820680] |
| - コンテナへの接続を再開する | | - コンテナへの接続を再開する |
| -- docker attach コンテナID(またはコンテナ名) | | -- docker attach コンテナID(またはコンテナ名) |
| + | --- コンテナ内でシェルが動いていないとダメ.exit で抜けるとコンテナが停止する. |
| + | -- docker exec -it コンテナID(またはコンテナ名) bash |
| + | --- コンテナでPID=1のプロセスを実行する. exit で抜けてもコンテナは停止しない. |
| + | |
| - コンテナの削除 | | - コンテナの削除 |
| -- docker rm コンテナID(またはコンテナ名) | | -- docker rm コンテナID(またはコンテナ名) |
| -- docker logs コンテナID(またはコンテナ名) | | -- docker logs コンテナID(またはコンテナ名) |
| #br | | #br |
| + | |
| **** ボリューム(永続ストレージ) [#r22a6562] | | **** ボリューム(永続ストレージ) [#r22a6562] |
| - ボリューム一覧 | | - ボリューム一覧 |
| - イメージ一覧 | | - イメージ一覧 |
| -- docker images | | -- docker images |
| + | - ダウンロード または 更新 |
| + | -- docker pull イメージ名(:TAG) |
| + | |
| - イメージ削除 | | - イメージ削除 |
| -- docker rmi イメージ名 | | -- docker rmi イメージ名 |
| + | - イメージ名の変更(A->B タグの付け替え) |
| + | -- # docker tag A B |
| + | -- # docker rmi A |
| + | - イメージを保存 |
| + | -- docker stop コンテナ名 |
| + | -- docker commit イメージ名 |
| + | |
| #br | | #br |
| + | |
| **** 退避と復元 [#y5f89442] | | **** 退避と復元 [#y5f89442] |
| - ファイルシステムの書き出し | | - ファイルシステムの書き出し |
| -- tar 形式のイメージを標準入力から入力 | | -- tar 形式のイメージを標準入力から入力 |
| -- 例)tar -C rootfs -c . | docker load | | -- 例)tar -C rootfs -c . | docker load |
| + | #br |
| + | **** 使用していない(孤立した)リソースの削除 [#z50def7b] |
| + | - システム: docker system prune |
| + | - イメージ: docker image prune |
| + | - コンテナ: docker container prune --filter "until=24h" |
| + | - ボリューム: docker volume prune --filter "label!=keep" |
| #br | | #br |
| | | |
| ** Tips [#bc9ce347] | | ** Tips [#bc9ce347] |
| + | *** ファイル(Volume)共有 [#u078f1a8] |
| + | - volume : /var/lib/docker/volumes |
| + | -- Podman : /var/lib/containers/storage/volumes |
| + | |
| + | - DB: /var/lib/docker/volumes/metadata.db (PC毎に持つ必要がある) |
| + | -- POdman(特殊ファイル): /var/lib/containers/storage/volumes/backingFsBlockDev 特に処理する必要はない(と思う) |
| + | #br |
| + | |
| + | *** none タグのイメージの名前(表示)を消す. [#e82b979d] |
| + | - 同じ名前のタグ付きイメージ名を作成し,それを消す. |
| + | docker tag 7fe93d9d7854 jupyterhub/singleuser:del (jupyterhub/singleuser:<none> の場合) |
| + | docker rmi jupyterhub/singleuser:del |
| + | #br |
| + | - 名前も none の場合は,docker tag で指定する名前は何でもよい. |
| + | #br |
| + | |
| + | *** 現在の環境が Docker のコンテナなのかを確認する. [#gd6a458a] |
| + | - '' /.dockerenv'' の存在をチェックする. |
| + | #br |
| + | |
| *** cockpit-docker [#wae1c7a6] | | *** cockpit-docker [#wae1c7a6] |
| - https://pkgs.org/download/cockpit-docker | | - https://pkgs.org/download/cockpit-docker |
| **** Networkの初期化スクリプト [#pc3401bc] | | **** Networkの初期化スクリプト [#pc3401bc] |
| #!/bin/sh | | #!/bin/sh |
- | | |
- | SQLFL=/var/lib/jupyterhub/jupyterhub.sqlite | |
- | [ -f $SQLFL ] && rm $SQLFL | |
- | | |
| rm -r /var/lib/docker/network/files/* | | rm -r /var/lib/docker/network/files/* |
| systemctl restart docker | | systemctl restart docker |
| #br | | #br |
| | | |
- | ** Trouble Shooting [#gfc999c1] | + | *** Dockerデーモン(dockerd) のリモート操作 [#zb6259d4] |
| + | **** 最善策 [#bd380800] |
| + | - リモートとローカルの unix ソケットファイルを ssh でつなぐ. |
| + | -- Docker の動いているマシンで,グループ docker に属するユーザを作成(例えば docker). |
| + | --- パスワードを設定しておく.起動シェルは要らない. |
| + | ---- # adduser docker -u 105 -g docker -d /var/lib/docker -s /sbin/nologin |
| + | ---- # asswd docker |
| + | -- ローカルマシンで以下のコマンドを実行. |
| + | --- ssh -fNL /var/run/mdlds.sock:/var/run/docker.sock docker@202.26.150.55 |
| + | --- chgrp apache /var/run/mdlds.sock |
| + | --- chmod g+rw /var/run/mdlds.sock |
| + | --- コマンド実行時は DOCKER_HOST=unix:///var/run/xxx.sock または docker -H unix:///var/run/mdlds.sock ps |
| + | --- [[docker_rsock.sh>./docker_rsock.sh]] |
| + | #br |
| + | |
| + | ***** ''ボツ'' %%SSH ポートフォワードを使用する.%% [#h0ef173d] |
| + | - 202.26.150.55で動いている場合 |
| + | # ssh -fNL localhost:9099:/var/run/docker.sock root@202.26.150.55 (rootログインがセキュリティ的に弱い) |
| + | # export DOCKER_HOST=localhost:9099 |
| + | # docker volume ls |
| + | - %%Docker の実効ユーザを root 以外にしておく.%% ムリポ. Rootlessモードは何か違う. |
| + | - ローカルマシンでは,Dockerデーモンは不要.クライアントのみで可. |
| + | |
| + | - ログイン相手を docker グループのユーザにする. |
| + | -- でもローカルポートにアクセス可能なら,結局''やばい状況になる''..ネ. |
| + | #br |
| + | |
| + | ***** ''ボツ'' %%docker の通信機能を使用する%% [#g41b437e] |
| + | - /usr/lib/systemd/system/docker.service |
| + | -- ex.) ExecStart=/usr/bin/dockerd -H fd:// -H tcp://202.26.150.55:9099 --containerd=/run/containerd/containerd.sock |
| + | -- systemctl daemon-reload |
| + | -- systemctl restart docker |
| + | - ssh:// を指定するとエラー.man でも -H に ssh は載っていない. |
| + | - よく考えれば,リモートからは無条件でコマンドを受け入れる.''やばいです''. |
| + | #br |
| + | |
| + | *** Dcoker 内から DNSが引けない (その他のサービスも同様) [#h55e8064] |
| + | - ホストの firewall の影響 |
| + | - ホストのfirewalld を止めてからイメージを実行 |
| + | -- ホストの firewall の条件を調べること |
| + | - Docker イメージが動いている最中に止めて駄目,=> Dockerを再起動 |
| + | #br |
| + | |
| + | *** /etc/resolv.conf [#vce388d5] |
| + | - Docker 内の /etc/resolv.conf は特殊なファイルなので mv できない. |
| + | #br |
| + | |
| + | ** Jupyter [#u471de3a] |
| + | *** Docker Images [#uf21b4ef] |
| + | **** jupyterhub/singleuser [#k5b135c9] |
| + | - https://hub.docker.com/r/jupyterhub/singleuser/ |
| + | #br |
| + | |
| + | **** jupyter/datascience-notebook [#rabcf16e] |
| + | - https://hub.docker.com/r/jupyter/datascience-notebook/ |
| + | #br |
| + | |
| + | **** jupyter/tensorflow-notebook [#h63a2e3c] |
| + | - https://hub.docker.com/r/jupyter/tensorflow-notebook/ |
| + | #br |
| + | |
| + | **** rattydave/jupyterhub [#p536b876] |
| + | - C++, Java, Python, Tensorflow, Julia, SQL, NodeJS, Bash and more |
| + | - https://hub.docker.com/r/rattydave/jupyterhub |
| + | - 重い(10G).非力マシンではタイムアウト(30s)する. |
| + | #br |
| + | |
| + | **** joequant/bitstation:latest [#m40761fc] |
| + | - C++ |
| + | - https://hub.docker.com/r/joequant/bitstation/tags?page=1&ordering=last_updated |
| + | - これもタイムアウト |
| + | #br |
| + | |
| + | *** jupyterhub/singleuser [#k62bfe82] |
| + | /opt/conda/bin/conda update --prefix /opt/conda --all -y |
| + | apt-get update -y |
| + | apt-get upgrade -y |
| + | apt-get install vim -y |
| + | apt-get install subversion -y |
| + | apt-get install make -y |
| + | apt-get install automake -y |
| + | apt-get install gcc -y |
| + | apt-get install zlib1g-dev -y |
| + | apt-get install mlocate -y |
| + | |
| + | *** docker commit すると,起動時のオプション(arguments)まで保存する. [#v7d65576] |
| + | - 次回起動すると,オプションが 2重になる.なんてこったい! docker build では大丈夫(そもそも起動していない) |
| + | - 起動時のオプションは,イメージ(/var/lib/docker/image/overlay2/imagedb/....)に Cmd[ ] に値として保存されている. |
| + | - イメージファイルはテキスト(!?)なので,Cmd[ ] に何が書いてあるかわかる. |
| + | -- "Cmd":["start-notebook.sh","--ip=0.0.0.0","--port=8888","--notebook-dir=/home/teacher/iseki/jupyter","--SingleUserNotebookApp.default_url=/lab"] |
| + | --- しっかりコマンドが入っている. |
| + | -- 流石に直接編集するのは躊躇われる.(一回やってみる?) |
| + | --- エディタで直接編集したら,Docker から見えなくなった.まあ予想通り. |
| + | |
| + | - ちゃんと動くやつの Cmd[ ] を確認して,docker commit 起動時に -C オプションで変更可! |
| + | -- jupyter の場合:'' docker commit -c 'CMD ["start-notebook.sh"]' jupyter_old jupyter_new'' |
| + | --- /etc/passwd と /etc/group も元に戻しておく |
| + | |
| + | #br |
| + | |
| + | *** Trouble [#k8d6e393] |
| **** Jupyter で色々やっていたらコンテナが続々と自動生成->消滅 を繰り返している [#x94b45ca] | | **** Jupyter で色々やっていたらコンテナが続々と自動生成->消滅 を繰り返している [#x94b45ca] |
| - 何をどうやってもコマンドレベルでは停止しない | | - 何をどうやってもコマンドレベルでは停止しない |
| # docker swarm leave --force | | # docker swarm leave --force |
| #br | | #br |
| + | |
| + | ** Trouble Shooting [#gfc999c1] |
| + | *** 良く分かっていなかった頃のエラーなので,勘違いしているかもしれない [#te98f8c5] |
| | | |
| **** docker run実行時のiptablesエラー [#y95fbc1b] | | **** docker run実行時のiptablesエラー [#y95fbc1b] |
| # systemctl restart docker | | # systemctl restart docker |
| #br | | #br |
| + | |
| **** Dockerfile による RUNで,pipがNewConnectionError を出す. [#y7ea0619] | | **** Dockerfile による RUNで,pipがNewConnectionError を出す. [#y7ea0619] |
| - CentOS8 固有のエラーらしい.CentOS8 は Docker 未サポートだからな~ | | - CentOS8 固有のエラーらしい.CentOS8 は Docker 未サポートだからな~ |