ので、ここでソロまとめ更新方法だ、ソロプロセスは常に疑問の更新が含ま使用してください。我々は、いくつかの助けに小さなパートナーを与えることを願っています。あなたの更新方法は、展開と主に懸念している、とあなたがでている場合はどのように選択するかdocker
、展開モード、あなたにもできることが可能docker
な方法を更新すること、これが推奨される展開の公式の比較です。それが通過された場合はjar
、パッケージまたはwar
パッケージを展開するために、同じアップデートの方法によって行われる必要があります。まあ話題にまとまりを終了します。
ドッキングウィンドウの更新を使用します
最初のステップ:最新のミラーを取得します。
docker pull b3log/solo:latest
結果は以下の通りである:
新しいバージョンの場合は、コマンドが自動的にダウンロードインターフェイスの端にある新しいミラーを、引っ張ってきます。自動更新ミラー。
現在のバージョンが最新である場合は、以下になりますたまたま、この時間は更新されません。
ステップ2:元の容器削除
コンテナは古い後に再配備された最新の画像を取得するためにかかわらず、最初の一歩を、私たちは現在展開、我々は削除する必要があります。
実行docker ps
現在のコンテナ操作の観点
ここに私の展開のコンテナ名のソロwww_solo
、あなたが底にコンテナを削除するときので、自分のソロコンテナ名に変更します
docker stop www_solo
docker rm www_solo
次のように実行結果は以下のとおりです。
第三段階:再配布ソロ容器
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost
--env JDBC_PASSWORD="123456"
:あなたがする必要が123456
あなたのmysqlのパスワードに変更します--server_host=localhost
:あなたがする必要がありlocalhost
、独自のドメイン名に変更します
結果は以下の通りである:
この時点でアップデートが完了ソロです
更新パッケージや戦争によってジャーパッケージ
このようにソース、再度インポート新しいソロソースコード、設定情報、及び再輸出に必要により展開されるように、一般的です。具体的な方法は、公式を参照することができ、ドキュメント、ここでは詳細に説明されていないと述べました。
通过脚本定期更新
首先,官方给了一个脚本用于更新或者重启,内容如下:
#!/bin/bash
#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
docker pull b3log/solo
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost
上述脚本说实话用于重启容器可以,但是用于定期更新脚本稍微有点不足,因为定期更新的脚本正常应该检查当前部署的版本是否是最新版本,如果不是才更新。而上边的脚本每次执行都会重新部署,显得开销优点大。下边我们对该脚本进行优化,使其更加合理。
因为docker没有命令直接来获取当前下载的镜像是否是最新版本,但是当我们通过pull
一个镜像时我们会发现:如果当前本地镜像是最新镜像那么docker就不会从云端下载镜像,运行之后会出现如下结果:
如果当前镜像不是新的会出现如下运行结果:
因此我们可以借助grep
,来实现一个更新脚本``
#!/bin/bash
#
# Solo docker 更新脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
isUpdate=$(docker pull b3log/solo|grep "Downloaded")
#如果有新版本或者没有安装才会进行更新
if [[ -z $isUpdate ]]
then
echo This is the latest version
else
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost
fi
使用方法:
sudo ./docker-update.sh
如果是最新版会出现如下运行结果:
如果不是最新版会执行容器删除重启等命令,出现如下运行结果:
关于这一点我也想官方发起了Pull request
希望组织能接受吧。
当然如果希望一劳永逸的解决该问题,我们可以通过crontab
实现定时更新
首先将docker-update.sh
文件放到root
目录(当然其他目录)也可以下:
其次执行crontab -e
进入编辑界面添加如下内容(每天早上1点整执行更新任务):
0 1 * * * bash /root/docker-update.sh
通过crontab -l
查看例行任务是否添加成功。
整个过程的执行结果如下图所示:
后记
当然可能个人水平有限,中间难免会出现一些错误,如若发现恳请指出,不胜赐教。如果大家有更好的更新方法或者上边有任何疑问都欢迎大家在留言区提出,谢谢!