flagflag  If you want to see English page, please click "English" Button at Left.
1: 2016-01-02 (土) 13:56:38 macsatou ソース 現: 2023-05-05 (金) 10:17:58 iseki ソース
Line 1: Line 1:
-*Docker備忘録 [#y5b36a8f]+*Docker 備忘録 [#y5b36a8f] 
 +*** see also [#i9ed634e] 
 +- [[Docker]] 
 +- [[Docker Compose]] 
 +- [[Docker Network]] 
 +- [[Docker Swarm]] 
 +- [[Kubernetes]] 
 +- [[Podman]] 
 +#br 
 + 
 +**どんなものか [#m8214aa2] 
 +- https://www.docker.com/ 
 +- 解説:https://tech-lab.sios.jp/archives/18811 ​
 +#br 
 +Wiki曰く、「Dockerはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。」らしい。~ 
 +ミドルウェア以上のものをコンテナと呼ばれるもので仮想化する。~ 
 +よく活用されている場面としては以下に記す。~ 
 + 1.開発アプリケーションのバージョンアップや開発のとき~ 
 +   ⇒現在のアプリケーション郡をコンテナに収容し、それをコピーすることで同じ環境で自由に触れる環境が出来上がる~ 
 +     出来上がった環境をcommit?することで、本番環境へ切り替えも可能?~ 
 + 2.運用中のサーバプログラムの更新~ 
 +   ⇒現在動作中のサーバプログラム類をコンテナ化して、それをコピーしてパッチ、バージョンアップを検証できる~ 
 +
 +- RHEL8(Red Hat Enterprise Linux 8)および CentOS8 からは Docker の代わりに [[Podman]] の使用が推奨されている. 
 + 
 + 
 +#br 
 + 
 +** 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] 
 +- CentOS8では未サポート 
 +-- Docker はネットワークのフィルタリングに [[iptables]] を使う 
 +-- CentOS8 では [[nftables]] が使用されている 
 + 
 +- %%下記方法とは別に ''dnf module install container-tools'' でもインストールできる場合がある.%% 
 +#br 
 + 
 +**** CentOS8 の場合の事前準備 (2020 8/15) [#u8e9f2bb] 
 +- CentOS8のcontainerd.io のバージンが古いので RPM で直接入れる 
 + # dnf install container-selinux 
 + # wget https://download.docker.com/linux/centos​/7/x86_64/stable/Packages/containerd.io-​1.2.6-3.3.el7.x86_64.rpm 
 + # rpm -ih containerd.io-1.2.6-3.3.el7.x86_64.rpm 
 + 
 +- containerd.io が runc と競合する場合は 
 +- runc は containerd.io と被る(同等?)の様 
 + # rpm -e buildah 
 + # rpm -e cockpit-podman 
 + # rpm -e toolbox 
 + # rpm -e podman 
 + # rpm -e containers-common-1-2.module_el8.5.0+890​+6b136101.noarch  (必要なら) 
 + # rpm -e runc 
 + # rpm -ihv containerd.io-1.2.6-3.3.el7.x86_64.rpm 
 +- Install & Getting Start へ 
 + #br 
 + 
 +**** 2023 1/17 CentOS8 の update で Docker が動かなくなったので上記の方法で入れ直し.(containerd.io が runc と競合する場合) [#hee294de] 
 + 
 +#br 
 + 
 +**** もし podman が必要なら containerd.io をインストール後に,入れ直す. [#y6d1a036] 
 + # yum install podman -y 
 + # yum install toolbox -y 
 + # yum install cockpit-podman -y 
 + # yum install buildah -y 
 + 
 +#br 
 + 
 +**** 本体の Install & Getting Start [#nae22c6e] 
 + # wget -qO- https://get.docker.com/ | sh 
 + .............. 
 + # systemctl enable docker 
 + # systemctl start docker 
 + # docker run hello-world 
 +or 
 + # dnf install docker-ce 
 + # systemctl enable docker 
 + # systemctl start docker 
 + # 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 
 + 
 +** Getting Start [#fedb2239] 
 + 
 +*** 使ってみる [#fbf5e0d3] 
 + 
 +**** Hello World [#u91eb055] 
 + # docker run hello-world 
 +#br 
 + 
 +**** CentOSを使ってみる [#e8e57f9e] 
 + # docker pull centos 
 + # docker images 
 + # docker run -i -t centos /bin/bash 
 + (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 
 + 
 +** コマンド [#f867895b] 
 + 
 +*** 操作 [#p0316f54] 
 +**** コンテナ [#o6820680] 
 +- コンテナ状況確認 
 +-- docker ps 
 +- コンテナ状況確認(過去の終了したものも含む) 
 +-- docker ps -a 
 +- コンテナから抜ける 
 +-- Ctrl+p, Ctrl+q 
 +- コンテナへの接続を再開する 
 +-- docker attach コンテナID(またはコンテナ名) 
 +--- コンテナ内でシェルが動いていないとダメ.exit で抜けるとコンテナが停止する. 
 +-- docker exec -it  コンテナID(またはコンテナ名)  bash 
 +--- コンテナでPID=1のプロセスを実行する. exit で抜けてもコンテナは停止しない. 
 + 
 +- コンテナの削除 
 +-- docker rm コンテナID(またはコンテナ名) 
 +- コンテナを止める 
 +-- docker stop コンテナID(またはコンテナ名) 
 +- 止まっているコンテナを動かす 
 +-- docker start  コンテナID(またはコンテナ名) 
 +- コンテナのログを表示 
 +-- docker logs コンテナID(またはコンテナ名) 
 +#br 
 + 
 +**** ボリューム(永続ストレージ) [#r22a6562] 
 +- ボリューム一覧 
 +-- docker volume ls 
 +- ボリュームの削除 
 +-- docker volume rm ボリューム名 
 +-- 強制削除には --force を使用する 
 +#br 
 +**** イメージ [#a7c2bb26] 
 +- イメージ一覧 
 +-- docker images 
 +- ダウンロード または 更新 
 +-- docker pull イメージ名(:TAG) 
 + 
 +- イメージ削除 
 +-- docker rmi イメージ名 
 +- イメージ名の変更(A->B タグの付け替え) 
 +-- # docker tag A B 
 +-- # docker rmi A 
 +- イメージを保存 
 +-- docker stop コンテナ名 
 +-- docker commit  イメージ名 
 + 
 +#br 
 + 
 +**** 退避と復元 [#y5f89442] 
 +- ファイルシステムの書き出し 
 +-- docker export コンテナID(またはコンテナ名) 
 +-- tar 形式で標準出力に出力される. 
 +-- 例) docker export vyos_netp | ( cd rootfs; tar xfvp -) 
 +- ファイルシステムの読み込み 
 +-- docker import ファイル名(tar形式)  イメージ名 
 +-- 例)tar -C rootfs -c . | docker import - vyos_netp:200920 
 +- イメージの保存 
 +-- docker save コンテナID(またはコンテナ名) 
 +-- tar 形式で標準出力に出力される. 
 +-- 例) docker save vyos_netp | ( cd rootfs; tar xfvp -) 
 +- イメージの読み込み 
 +-- docker load 
 +-- tar 形式のイメージを標準入力から入力 
 +-- 例)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 
 + 
 +** 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/back​ingFsBlockDev  特に処理する必要はない(と思う) 
 +#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] 
 +- https://pkgs.org/download/cockpit-docker​ 
 +- CentOS8 用は無いが,CentOS7用が使える(要 Python2) 
 +#br 
 +*** Tools [#pecf29e0] 
 +**** Networkの初期化スクリプト [#pc3401bc] 
 + #!/bin/sh 
 + rm -r /var/lib/docker/network/files/* 
 + systemctl restart docker 
 +#br 
 + 
 +*** 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/sing​leuser/ 
 +#br 
 + 
 +**** jupyter/datascience-notebook [#rabcf16e] 
 +- https://hub.docker.com/r/jupyter/datasci​ence-notebook/ 
 +#br 
 + 
 +**** jupyter/tensorflow-notebook [#h63a2e3c] 
 +- https://hub.docker.com/r/jupyter/tensorf​low-notebook/ 
 +#br 
 + 
 +**** rattydave/jupyterhub [#p536b876] 
 +- C++, Java, Python, Tensorflow, Julia, SQL, NodeJS, Bash and more 
 +- https://hub.docker.com/r/rattydave/jupyt​erhub 
 +- 重い(10G).非力マシンではタイムアウト(30s)する. 
 +#br 
 + 
 +**** joequant/bitstation:latest [#m40761fc] 
 +- C++ 
 +- https://hub.docker.com/r/joequant/bitsta​tion/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/jupyt​er","--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] 
 +- 何をどうやってもコマンドレベルでは停止しない 
 + # systemctl stop docker 
 + # mv /var/lib/docker /var/lib/docker- 
 + # reboot 
 +- Docker Swarm のせいかも.Swarm から強制離脱すればよかった模様 
 + # docker swarm leave --force 
 +#br 
 + 
 +** Trouble Shooting [#gfc999c1] 
 +*** 良く分かっていなかった頃のエラーなので,勘違いしているかもしれない [#te98f8c5] 
 + 
 +**** docker run実行時のiptablesエラー [#y95fbc1b] 
 +- ネットワーク設定を削除し,docker を再起動する 
 + # \rm -r /var/lib/docker/network/files/* 
 + # systemctl restart docker 
 +#br 
 + 
 +**** Dockerfile による RUNで,pipがNewConnectionError を出す. [#y7ea0619] 
 +- CentOS8 固有のエラーらしい.CentOS8 は Docker 未サポートだからな~ 
 +-- Docker は iptables を操作するが,CentOS8では iptables ではなくて nftablesを利用しているのが原因のよう. 
 +-- Docker の iptables のコマンドが一部失敗している. 
 +-- https://qiita.com/DaichiSasak1/items/116​87a3c613c8811350c 
 + 
 +- 一つの解決法として Proxy サーバを立てると良いみたい 
 + # yum install squid -y 
 + # systemctl enable squid 
 + # systemctl start squid 
 + # firewall-cmd --add-port 3128/tcp --permanent 
 + # filewall-cmd --reload 
 + # vi Dockerfile  (pip にオプション --proxy=IPアドレス:3128 を追加) 
 +- Dockerfile 内の名前解決については以下のRUNコマンドで確認可能 
 +-- python -c "import socket; print(socket.gethostbyname('security.ubu​ntu.com'))" 
 +#br


トップ   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 5月翌月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
<今日>

オンライン状況

87 人のユーザが現在オンラインです。 (17 人のユーザが xpwiki を参照しています。)

登録ユーザ: 0
ゲスト: 87

もっと...

アクセスカウンタ

今日 : 3225322532253225
昨日 : 1753317533175331753317533
総計 : 2346636823466368234663682346636823466368234663682346636823466368
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com