flagflag  If you want to see English page, please click "English" Button at Left.
ページ内コンテンツ

Docker 備忘録 anchor.png

Page Top

どんなものか anchor.png

  • https://www.docker.com/
  • 解説:https://tech-lab.sios.jp/archives/18811
     
    Wiki曰く、「Dockerはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。」らしい。
    ミドルウェア以上のものをコンテナと呼ばれるもので仮想化する。
    よく活用されている場面としては以下に記す。
     1.開発アプリケーションのバージョンアップや開発のとき
       ⇒現在のアプリケーション郡をコンテナに収容し、それをコピーすることで同じ環境で自由に触れる環境が出来上がる
         出来上がった環境をcommit?することで、本番環境へ切り替えも可能?
     2.運用中のサーバプログラムの更新
       ⇒現在動作中のサーバプログラム類をコンテナ化して、それをコピーしてパッチ、バージョンアップを検証できる

  • RHEL8(Red Hat Enterprise Linux 8)および CentOS8 からは Docker の代わりに Podman の使用が推奨されている.
 
Page Top

Install anchor.png

Page Top

CentOS 8 (2021 7/25) anchor.png

# 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
 
Page Top

CentOS8 入れ直し(21 7/3) anchor.png

Page Top
リポジトリがあるようなので,それから入れなおす. anchor.png
  • # 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
 
Page Top

For CentOS8 anchor.png

  • CentOS8では未サポート
    • Docker はネットワークのフィルタリングに iptables を使う
    • CentOS8 では nftables が使用されている
  • 下記方法とは別に dnf module install container-tools でもインストールできる場合がある.
     
Page Top
CentOS8 の場合の事前準備 (2020 8/15) anchor.png
  • 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
Page Top
2023 1/17 CentOS8 の update で Docker が動かなくなったので上記の方法で入れ直し.(containerd.io が runc と競合する場合) anchor.png
 
Page Top
もし podman が必要なら containerd.io をインストール後に,入れ直す. anchor.png
# yum install podman -y
# yum install toolbox -y
# yum install cockpit-podman -y
# yum install buildah -y
 
Page Top
本体の Install & Getting Start anchor.png
# 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
 
Page Top

CentOS6 anchor.png

  • 注)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 を止めている.
       
Page Top

Getting Start anchor.png

Page Top

使ってみる anchor.png

Page Top
Hello World anchor.png
# docker run hello-world
 
Page Top
CentOSを使ってみる anchor.png
# docker pull centos
# docker images
# docker run -i -t centos /bin/bash
(DockerBash)#
 
Page Top
CentOSを使ってみる2 anchor.png
# docker pull centos:centos7
# docker run -ti -d --name centos7 centos:centos7
# docker exec -it centos7 /bin/bash
[root@fbd5aeb4046a /]#
 
Page Top

コマンド anchor.png

Page Top

操作 anchor.png

Page Top
コンテナ anchor.png
  • コンテナ状況確認
    • 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(またはコンテナ名)
       
Page Top
ボリューム(永続ストレージ) anchor.png
  • ボリューム一覧
    • docker volume ls
  • ボリュームの削除
    • docker volume rm ボリューム名
    • 強制削除には --force を使用する
       
Page Top
イメージ anchor.png
  • イメージ一覧
    • docker images
  • ダウンロード または 更新
    • docker pull イメージ名(:TAG)
  • イメージ削除
    • docker rmi イメージ名
  • イメージ名の変更(A->B タグの付け替え)
    • # docker tag A B
    • # docker rmi A
  • イメージを保存
    • docker stop コンテナ名
    • docker commit イメージ名
 
Page Top
退避と復元 anchor.png
  • ファイルシステムの書き出し
    • 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
       
Page Top
使用していない(孤立した)リソースの削除 anchor.png
  • システム: docker system prune
  • イメージ: docker image prune
  • コンテナ: docker container prune --filter "until=24h"
  • ボリューム: docker volume prune --filter "label!=keep"
     
Page Top

 Tips anchor.png

Page Top

ファイル(Volume)共有 anchor.png

  • 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 特に処理する必要はない(と思う)
       
Page Top

none タグのイメージの名前(表示)を消す. anchor.png

  • 同じ名前のタグ付きイメージ名を作成し,それを消す.
    docker tag  7fe93d9d7854  jupyterhub/singleuser:del     (jupyterhub/singleuser:<none> の場合)
    docker rmi jupyterhub/singleuser:del
     
  • 名前も none の場合は,docker tag で指定する名前は何でもよい.
     
Page Top

現在の環境が Docker のコンテナなのかを確認する. anchor.png

  • /.dockerenv の存在をチェックする.
     
Page Top

cockpit-docker anchor.png

Page Top

Tools anchor.png

Page Top
Networkの初期化スクリプト anchor.png
#!/bin/sh
rm -r /var/lib/docker/network/files/*
systemctl restart docker
 
Page Top

Dockerデーモン(dockerd) のリモート操作 anchor.png

Page Top
最善策 anchor.png
  • リモートとローカルの 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
         
Page Top
ボツ SSH ポートフォワードを使用する. anchor.png
  • 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 グループのユーザにする.
    • でもローカルポートにアクセス可能なら,結局やばい状況になる..ネ.
       
Page Top
ボツ docker の通信機能を使用する anchor.png
  • /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 は載っていない.
  • よく考えれば,リモートからは無条件でコマンドを受け入れる.やばいです
     
Page Top

Dcoker 内から DNSが引けない (その他のサービスも同様) anchor.png

  • ホストの firewall の影響
  • ホストのfirewalld を止めてからイメージを実行
    • ホストの firewall の条件を調べること
  • Docker イメージが動いている最中に止めて駄目,=> Dockerを再起動
     
Page Top

/etc/resolv.conf anchor.png

  • Docker 内の /etc/resolv.conf は特殊なファイルなので mv できない.
     
Page Top

Jupyter anchor.png

Page Top

Docker Images anchor.png

Page Top
rattydave/jupyterhub anchor.png
Page Top
joequant/bitstation:latest anchor.png
Page Top

jupyterhub/singleuser anchor.png

/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
Page Top

docker commit すると,起動時のオプション(arguments)まで保存する. anchor.png

  • 次回起動すると,オプションが 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/te​acher/iseki/jupyter","--SingleUserNotebo​okApp.default_url=/lab"]
      • しっかりコマンドが入っている.
    • 流石に直接編集するのは躊躇われる.(一回やってみる?)
      • エディタで直接編集したら,Docker から見えなくなった.まあ予想通り.
  • ちゃんと動くやつの Cmd[ ] を確認して,docker commit 起動時に -C オプションで変更可!
    • jupyter の場合: docker commit -c 'CMD ["start-notebook.sh"]' jupyter_old jupyter_new
      • /etc/passwd と /etc/group も元に戻しておく
 
Page Top

Trouble anchor.png

Page Top
Jupyter で色々やっていたらコンテナが続々と自動生成->消滅 を繰り返している anchor.png
  • 何をどうやってもコマンドレベルでは停止しない
    # systemctl stop docker
    # mv /var/lib/docker /var/lib/docker-
    # reboot
  • Docker Swarm のせいかも.Swarm から強制離脱すればよかった模様
    # docker swarm leave --force
     
Page Top

Trouble Shooting anchor.png

Page Top

良く分かっていなかった頃のエラーなので,勘違いしているかもしれない anchor.png

Page Top
docker run実行時のiptablesエラー anchor.png
  • ネットワーク設定を削除し,docker を再起動する
    # \rm -r /var/lib/docker/network/files/*
    # systemctl restart docker
     
Page Top
Dockerfile による RUNで,pipがNewConnectionError を出す. anchor.png
  • CentOS8 固有のエラーらしい.CentOS8 は Docker 未サポートだからな~
  • 一つの解決法として 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'))"
       

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom
Counter: 2046, today: 1, yesterday: 0
最終更新: 2023-05-05 (金) 10:17:58 (JST) (328d) by iseki

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 3月翌月
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
<今日>

オンライン状況

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

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

もっと...

アクセスカウンタ

今日 : 264264264
昨日 : 6869686968696869
総計 : 2317454723174547231745472317454723174547231745472317454723174547
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com