LoginSignup
10
13

More than 5 years have passed since last update.

CentOSリポジトリの docker から Docker社リポジトリの docker-engine に移行する

Last updated at Posted at 2015-12-11

1つの Dockerfile を使って、バージョンの違うイメージをいくつか作りたかった。
いろいろ調べていると build-time argumentsの利用 が docker 1.9 からできるらしい。

CentOS 7.1.1503 の最新の docker は 1.8 でどうしたものかと思っていたが、
公式サイトに Docker Repository を追加する方法が載っていた。
こちらの方が最新版をすぐ使えそうなので、さっそく移行してみた。

Docker 停止
# systemctl stop docker

CentOSリポの Docker 削除
# yum remove docker docker-selinux
 docker.x86_64 0:1.8.2-7.el7.centos
 docker-selinux.x86_64 0:1.8.2-7.el7.centos

# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Dockerリポからインストール
# yum install docker-engine
 docker-engine.x86_64 0:1.9.1-1.el7.centos
 docker-engine-selinux.noarch 0:1.9.1-1.el7.centos

# systemctl start docker

これだけでイメージやコンテナが失われず移行できてしまった。

/etc/sysconfig/docker が読まれてない問題(追記)

Remote API を使えるようにするため
/etc/sysconfig/docker に Daemon socket option を指定していたが効いていなかった。
OPTIONS='-H tcp://0.0.0.0:2375'

公式マニュアル Custom Docker daemon options に従ってやってみたら効くようになった。

ようは、Systemdの設定ファイルで /etc/sysconfig/docker を読み込むようになっていない様子。

# cat /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

公式ドキュメントに従って下記のようにやってみたらOKだった。

# systemctl show docker | grep Env
出力なしなので、Custom Docker daemon options の設定をする

# mkdir /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/docker.conf <<EOF
[Service]
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// \$OPTIONS \\
          \$DOCKER_STORAGE_OPTIONS \\
          \$DOCKER_NETWORK_OPTIONS \\
          \$BLOCK_REGISTRY \\
          \$INSECURE_REGISTRY
EOF
# systemctl restart docker
Warning: Unit file of docker.service changed on disk, 'systemctl daemon-reload' recommended.
# systemctl show docker | grep Env
出力なしだったので、Warning を試す

# systemctl daemon-reload
# systemctl show docker | grep Env
EnvironmentFile=/etc/sysconfig/docker (ignore_errors=yes)
EnvironmentFile=/etc/sysconfig/docker-storage (ignore_errors=yes)
EnvironmentFile=/etc/sysconfig/docker-network (ignore_errors=yes)
設定ファイルが読まれるようになったことが確認できた

# ps -ef | grep docker
root     10000     1  0 01:20 ?        00:00:00 /usr/bin/docker daemon -H fd://
この時点ではまだ反映されていない

# systemctl restart docker
# ps -ef | grep docker
root     10071     1  4 01:21 ?        00:00:00 /usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
無事に反映された
10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13