flagflag  
3: 2019-12-17 (Tue) 11:36:01 iseki source Cur: 2023-05-05 (Fri) 10:17:58 iseki source
Line 1: Line 1:
*Docker 備忘録 [#y5b36a8f] *Docker 備忘録 [#y5b36a8f]
 +*** see also [#i9ed634e]
 +- [[Docker]]
 +- [[Docker Compose]]
 +- [[Docker Network]]
 +- [[Docker Swarm]]
 +- [[Kubernetes]]
 +- [[Podman]]
 +#br
**どんなものか [#m8214aa2] **どんなものか [#m8214aa2]
 +- https://www.docker.com/
 +- 解説:https://tech-lab.sios.jp/archives/18811
 +#br
Wiki曰く、「Dockerはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。」らしい。~ Wiki曰く、「Dockerはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。」らしい。~
ミドルウェア以上のものをコンテナと呼ばれるもので仮想化する。~ ミドルウェア以上のものをコンテナと呼ばれるもので仮想化する。~
Line 11: Line 22:
   ⇒現在動作中のサーバプログラム類をコンテナ化して、それをコピーしてパッチ、バージョンアップを検証できる~    ⇒現在動作中のサーバプログラム類をコンテナ化して、それをコピーしてパッチ、バージョンアップを検証できる~
~ ~
 +- RHEL8(Red Hat Enterprise Linux 8)および CentOS8 からは Docker の代わりに [[Podman]] の使用が推奨されている.
-**導入 [#qdfa05a8]+ 
 +#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  # wget -qO- https://get.docker.com/ | sh
 + ..............
 + # systemctl enable docker
 # systemctl start docker  # systemctl start docker
 # docker run hello-world  # docker run hello-world
 +or
 + # dnf install docker-ce
 + # systemctl enable docker
 + # systemctl start docker
 + # docker run hello-world
 +#br
-**CentOSで使ってみる [#e8e57f9e]+*** 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 pull centos
- # sudo 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
 +
 +** コマンド [#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 サーバを立てると良いみたい 
- # docker ps + # yum install squid -y 
-コンテナ状況確認(過去の終了したものも含む) + # systemctl enable squid 
- # docker ps -+ # systemctl start squid 
-コンテナを終了せずに抜ける場合 + # firewall-cmd --add-port 3128/tcp --permanent 
- Ctrl+p, Ctrl+q + # filewall-cmd --reload 
-コンテナへの接続を再開する場合 + # vi Dockerfile  (pip にオプション --proxy=IPアドレス:3128 を追加) 
- # docker attach コンテナID+- Dockerfile 内の名前解決については以下のRUNコマンドで確認可能 
 +-- python -c "import socket; print(socket.gethostbyname('security.ubu​ntu.com'))" 
 +#br


Front page   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthMay 2024Next Month
Su Mo Tu We Th Fr Sa
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
Today

Who's Online

30 user(s) are online (1 user(s) are browsing xpwiki)

Members: 0
Guests: 30

more...

Access Counter

Today : 4436443644364436
Yesterday : 8599859985998599
Total : 2365144223651442236514422365144223651442236514422365144223651442
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com