memo

Docker

docker コマンド

イメージ

コンテナ

マウント・ボリューム

ビルド

コンテナの移行

コンテナをイメージ化して移行

save/load

移行元
移行先

export/import

(例)

移行元
移行先

コンテナをディレクトリ丸ごと移行(SSH + tar で)

  1. 移行元で docker サービスを停止
    sudo systemctl stop docker
  2. 移行先で docker サービスを停止
    sudo systemctl stop docker
  3. 移行先で ssh コマンドを使って移行元の /var/lib/docker ディレクトリで tar で固めた内容を標準出力に出力し、そのまま移行元側で解凍
    cd /var/lib/
    ssh <移行先IP> -- sudo tar -C /var/lib/ -cvf - docker/ | sudo tar xf -
    

(参考) Dockerのイメージ/コンテナを他マシンへ移設するに最終的に”うりゃ!”っとしたはなし

ネットワーク

Docker Compose

docker-machine

Docker インストール

Ubuntu

※Vagrant/VirtualBox 環境で upgrade すると、addtional tools が使えなくなってネットワークや共有フォルダで問題が出る可能性があるので、簡単なテストをして確認しておいた方がよさそう。
まずは upgrade した環境で小さなコンテナを立ててネットワーク接続を確認するなど(例: curl https://www.xxxx.co.jp/。

  1. sudo apt update
  2. sudo apt upgrade
  3. sudo apt install docker.io
  4. docker -v
  5. sudo usermod -aG docker $USER
    => 再ログイン後に反映

CentOS

  1. sudo yum remove docker docker-common docker-selinux docker-engine
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. sudo yum makecache fast
  5. yum list docker-ce.x86_64 –showduplicates | sort -r
    表示された一覧からインストールするバージョンを選択
    docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
    (中略)
    docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
    
  6. sudo yum install docker-ce-19.03.2-3.el7
  7. sudo systemctl enable docker
  8. sudo systemctl start docker
  9. docker -v

インストール後

# バージョン確認
docker -v
# セキュリティリスクを認識した上でログインユーザーを docker グループに追加
sudo usermod -aG docker $USER
# いったんログアウントすると反映される
exit
# 再ログイン後に docker コマンドを実行できることを確認
docker images

Mac

podman desktop

brew install podman-desktop

brew でインストール後に /Applications/Podman Desktop.app を起動して CLI をインストール。

docker-compose

curl -L https://github.com/docker/compose/releases/download/<バージョン>/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Release docker/compose

応用

Docker で NFSサーバー

vi Dockerfile

FROM centos:centos7

LABEL maintainer="Hoge<hoge@xxx.com>"

# Overwrite MOUNTPOINT by using --env at "docker run"
ENV MOUNTPOINT="/tmp"

RUN mkdir -p ${MOUNTPOINT} && chmod 777 ${MOUNTPOINT}

# Install reequired packages
RUN yum install -y nfs-utils

# Place s6-overlay to enable services
ADD https://github.com/just-containers/s6-overlay/releases/download/v1.21.4.0/s6-overlay-amd64.tar.gz /tmp/
RUN tar xzf /tmp/s6-overlay-amd64.tar.gz -C / --exclude="./bin"
RUN tar xzf /tmp/s6-overlay-amd64.tar.gz -C /usr ./bin

RUN mkdir -p /etc/cont-init.d \
    && printf "#!/usr/bin/with-contenv sh\nexportfs -r" >> /etc/cont-init.d/00-config

RUN mkdir -p /etc/services.d/rpcbind \
    && printf "#!/usr/bin/with-contenv sh\nrpcbind -f" >> /etc/services.d/rpcbind/run \
    && chmod 755 /etc/services.d/rpcbind/run \
    && cat /etc/services.d/rpcbind/run

RUN mkdir -p /etc/services.d/mountd \
    && printf "#!/usr/bin/execlineb  -P\nforeground { rpc.nfsd -N 2 -N 3 }\nrpc.mountd -F -N 2 -N 3" >> /etc/services.d/mountd/run \
    && chmod 755 /etc/services.d/mountd/run \
    && cat /etc/services.d/mountd/run

# Expose ports for NFS
EXPOSE 111/udp 111/tcp 2049/udp 2049/tcp

RUN echo "${MOUNTPOINT} *(ro,fsid=0,root_squash,no_subtree_check,insecure)" >> /etc/exports
RUN ls -la /etc/services.d/mountd

# Kick init script of s6-overlay
ENTRYPOINT /init
docker build -t nfs-server1 .
docker run -it --rm --net host --privileged nfs-server1

※docker-machine だとエラーが発生(Unable to access /proc/fs/nfsd)。Ubunt 18.04 では成功。

(参考) Dockerコンテナ同士のNFSのサーバ・クライアント疎通サンプル

Docker Desktop で Redmine + SQLite

各OSのコンテナ起動

Tips

その他