从CentOS存储库迁移到Docker公司存储库中的docker-engine
我想用一个Dockerfile创建几个不同版本的镜像。在进行了各种调查后,似乎可以在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无法读取的问题。
为了能够使用远程 API,我已在/etc/sysconfig/docker文件中指定了守护进程套接字选项,但没有生效。套接字选项设置为’-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
按照公式文件的指示,尝试下面的方法后,一切顺利。
# 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
無事に反映された