flagflag  
Table of contents

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'))"
       

Front page   Freeze Diff Backup Copy Rename Reload   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)
Counter: 2081, today: 4, yesterday: 3
Last-modified: 2023-05-05 (Fri) 10:17:58 (JST) (357d) by iseki

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthApr 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
Today

Who's Online

93 user(s) are online (4 user(s) are browsing xpwiki)

Members: 0
Guests: 93

more...

Access Counter

Today : 1778617786177861778617786
Yesterday : 1406514065140651406514065
Total : 2335880823358808233588082335880823358808233588082335880823358808
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com