docker网站迁移记录
花了两天时间将个人网站改成docker,现在记录一下使用docker以后,网站迁移的过程,主要是要记录docker数据卷容器的使用,这个过程比较坑,还是亲自动手后才体会到原理。比较坑的点在于,跟想象的不一样,迁移后数据卷目录是空的,需要事先备份出来,再还原。可以引入临时容器配合备份和还原,下面记录过程:
一、备份数据
(一)生成容器bk(配合备份)
1、原网站容器(数据卷容器)生成过程
# 以下是宿主机操作:
ubuntu@yet:/data/images$ sudo docker run -d -p 80:29718 -p 33221:5432 --name blog -v /DATA/dat --restart=always blog:2.3.1
ec85c1bc15305ea7c74bd9321cff0c208c74545d8363acaa4851422417377fb1
可以看到是数据卷容器,名为blog,这里是数据卷: -v /DATA/dat
2、生成容器bk(配合备份)
# 以下是宿主机操作:
ubuntu@yet:/data/images$ sudo docker run -d --name bk --volumes-from blog -v $(pwd):/DATA blog:2.3.1
a76f2188197175d8c9a558f6415b074858be58789a45f51920017d525d3f42b6
ubuntu@yet:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e8493047abd blog:2.3.1 "/run.sh" 5 minutes ago Up 5 minutes 22/tcp, 5432/tcp, 29718/tcp bk
ec85c1bc1530 blog:2.3.1 "/run.sh" 13 minutes ago Up 13 minutes 22/tcp, 0.0.0.0:33221->5432/tcp, 0.0.0.0:80->29718/tcp blog
3、容器bk中备份数据
# 以下是宿主机操作:
ubuntu@yet:~$ cd /DATA
ubuntu@yet:/DATA$ ls
dat
ubuntu@yet:/DATA$ cd dat
ubuntu@yet:/DATA/dat$ ls
blog pgdata
ubuntu@yet:/DATA/dat$ sudo docker exec -it bk bash
# 以下是容器bk操作:
[root@6e8493047abd ~]# cd /DATA
[root@6e8493047abd DATA]# ls
dat
[root@6e8493047abd DATA]# cd dat
[root@6e8493047abd dat]# ls
blog pgdata
[root@6e8493047abd dat]# cd ..
[root@6e8493047abd DATA]# tar zcvf dat20200627.tgz dat
[root@6e8493047abd DATA]# ls
dat dat20200627.tgz
# 以上的dat20200627.tgz是容器bk内备份完成的
# 以下是宿主机操作,可以看到宿主机上也得到了dat20200627.tgz:
ubuntu@yet:/DATA$ ls
dat dat20200627.tgz
备份完成!
4、blog容器提交为镜像(非必须,根据实际情况)
# 以下是宿主机操作:
ubuntu@yet:~$ sudo docker commit -m '配置好的http://yet.ren网站,目前镜像不自动拉起应用' -a 'Expresso' blog blog:2.3.2
sha256:e76e264f1c5b6c807d8037e5823c16032132aac6b5d200a35eaede7e74ea42e2
ubuntu@yet:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
blog 2.3.2 e76e264f1c5b 8 seconds ago 2.59GB
blog 2.3.1 b85d9c03374d 2 hours ago 2.34GB
postgres 11.8 fa768ba1f7e3 27 hours ago 282MB
这里为了检验,把镜像导出本地,并删除已导入的镜像:
# 以下是宿主机操作:
ubuntu@yet:~$ sudo docker save -o /data/images/blog2.3.2.tgz blog:2.3.2
ubuntu@yet:~$
ubuntu@yet:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
blog 2.3.2 e76e264f1c5b 8 minutes ago 2.59GB
blog 2.3.1 b85d9c03374d 3 hours ago 2.34GB
postgres 11.8 fa768ba1f7e3 27 hours ago 282MB
ubuntu@yet:~$ sudo docker rmi blog:2.3.1
Error response from daemon: conflict: unable to remove repository reference "blog:2.3.1" (must force) - container ec85c1bc1530 is using its referenced image b85d9c03374d
ubuntu@yet:~$ sudo docker rmi -f blog:2.3.1
Untagged: blog:2.3.1
Deleted: sha256:b85d9c03374d8fb3cfa54b6bb78ef068bb7e7278a9eb462cfd7ff443bfac4ab8
Deleted: sha256:4f371401661c8a0dd367380da7378db02f2fcd160ad948323ca87f79762909a9
Deleted: sha256:35049c863a18762e94f9fe629ccadb6351223b08c8a925dfd14f1a0c5702a576
Deleted: sha256:1af27d69c87689f3d2f40c5f663ac7cc7a65ba0c74d0c1bd5616d32a5946418a
Deleted: sha256:23d87e8d6361ecf93b26461f68c779f07175a6ac75a2c140852b512d0f85b9ed
Deleted: sha256:e2b5c401c6997c369a569396a10a49f2204a28030d3678b2f536ba4290a71bbc
Deleted: sha256:527baef50143dc1a0f2c823af2b7e602c731b1342ae7f23bec8e87cd02dcea4f
Deleted: sha256:1ad975c59a374c10813114dc71cc847e486026ea8f23fe226c52bafc2227b861
Deleted: sha256:958270765318fb4d8b3ac38aed9151b523895bc196686b61ff79eefd1552a38f
Deleted: sha256:76c07a1cac1c97850c9fecd2b7d2df9bea4e4170012d812aeb4b95b3b406eee6
Deleted: sha256:cd59c470c3a4721e70bf5ae16935f9fbd7dd64812589e79fe95fc434394e71a4
Deleted: sha256:fc85f877626647ce1b186e403dddf9017c3e4df20d4dbba5cddb7246aa51e20d
Deleted: sha256:6dc910bb9b88d455a3f2da90508f7d544c4417fdb591da3a5771f3650281bf0d
Deleted: sha256:bc29ddd4562227f3ca60b63483e7d364ee9662ba3b91aeaa6c9875ffc5a7bb71
Deleted: sha256:a02f019207b381de66344d8adf0513c62042e779a2e267ab1eb89d463a45bede
Deleted: sha256:38992e8f491f44f2149c18307155ded4fc9c684a13bfa400aa2dbbcf9e78fe09
Deleted: sha256:edf3aa290fb3c255a84fe836109093fbfeef65c08544f655fad8d6afb53868ba
ubuntu@yet:~$ sudo docker rmi -f blog:2.3.2
Untagged: blog:2.3.2
Deleted: sha256:e76e264f1c5b6c807d8037e5823c16032132aac6b5d200a35eaede7e74ea42e2
Deleted: sha256:8750e40d03fc3c79e4d494317ca48b5832ad321e76620d4e348b0e90333871d4
ubuntu@yet:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e8493047abd b85d9c03374d "/run.sh" 2 hours ago Up 2 hours 22/tcp, 5432/tcp, 29718/tcp bk
ec85c1bc1530 b85d9c03374d "/run.sh" 2 hours ago Up 2 hours 22/tcp, 0.0.0.0:33221->5432/tcp, 0.0.0.0:80->29718/tcp blog
ubuntu@yet:~$ sudo docker rm -f blog
blog
ubuntu@yet:~$ sudo docker rm -f bk
bk
ubuntu@yet:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ubuntu@yet:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 11.8 fa768ba1f7e3 28 hours ago 282MB
这样的话,我们把网站删除了,下面开始迁移演示
二、迁移
(一)导入镜像
# 以下是宿主机操作:
ubuntu@yet:~$ cd /data/images/
ubuntu@yet:/data/images$ ls
blog2.3.1.tgz blog2.3.2.tgz
ubuntu@yet:/data/images$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 11.8 fa768ba1f7e3 28 hours ago 282MB
ubuntu@yet:/data/images$ sudo chown ubuntu blog2.3.2.tgz
ubuntu@yet:/data/images$ sudo docker load < blog2.3.2.tgz
edf3aa290fb3: Loading layer [==================================================>] 211.1MB/211.1MB
44f635f6833b: Loading layer [==================================================>] 4.096kB/4.096kB
7a70dda68836: Loading layer [==================================================>] 2.048kB/2.048kB
91053797f2e6: Loading layer [==================================================>] 3.072kB/3.072kB
e9a73891d495: Loading layer [==================================================>] 18.43kB/18.43kB
7721d11916c6: Loading layer [==================================================>] 2.048kB/2.048kB
48c2c22d9cd3: Loading layer [==================================================>] 130.8MB/130.8MB
1f02704c86dd: Loading layer [==================================================>] 510.4MB/510.4MB
65d446bcce3f: Loading layer [==================================================>] 978.1MB/978.1MB
e417b3f40845: Loading layer [==================================================>] 12.04MB/12.04MB
01ef89715cbb: Loading layer [==================================================>] 419.3kB/419.3kB
7e054f4c9815: Loading layer [==================================================>] 368.5MB/368.5MB
db98d1d3b746: Loading layer [==================================================>] 224.9MB/224.9MB
b7d58ef3d4e3: Loading layer [==================================================>] 358.9kB/358.9kB
4e9927c4020b: Loading layer [==================================================>] 7.168kB/7.168kB
dab398dfd73e: Loading layer [==================================================>] 306.7kB/306.7kB
79bdbc36b1df: Loading layer [==================================================>] 262.8MB/262.8MB
Loaded image: blog:2.3.2
ubuntu@yet:/data/images$
(二)恢复数据
1、生成blog网站容器(数据卷容器)
下面的步骤其实同上文 一(一)1、的步骤
# 以下是宿主机操作:
ubuntu@yet:/data/images$ sudo docker run -d -p 80:29718 -p 33221:5432 --name blog -v /DATA/dat --restart=always blog:2.3.2
5edf17e66322d969dead8dd03c3ea12b1280a909b0b1ecca3a24554e313985a1
2、生成bk1容器(配合迁移)
# 以下是宿主机操作:
ubuntu@yet:/DATA$ cd
# 必须到这个目录,与下文容器bk1的生成命令呼应
ubuntu@yet:~$ cd /DATA
# 备份的数据dat20200627.tgz在这
ubuntu@yet:/DATA$ ls
dat dat20200627.tgz
ubuntu@yet:/DATA$ sudo docker run -d --name bk1 --volumes-from blog -v $(pwd):/DATA blog:2.3.2
a81cfead946e31ca6aed5f250502238f58fd5eb0516376040e2d1354f441d57f
ubuntu@yet:/DATA$ sudo docker exec -ti bk1 bash
# 以下是容器bk1内的操作:
[root@a81cfead946e /]# cd /DATA
# 可以看到容器内拿到了数据dat20200627.tgz
[root@a81cfead946e DATA]# ls
dat dat20200627.tgz
[root@a81cfead946e DATA]# tar zxvf dat20200627.tgz
dat/pgdata/base/1/2608_fsm
dat/pgdata/base/1/2601
...
dat/pgdata/pg_commit_ts/
数据恢复完成,我们可以到blog容器去确认一下:
# 以下是宿主机操作:
ubuntu@yet:~$ sudo docker exec -it blog bash
[root@5edf17e66322 /]# cd /DATA/dat
[root@5edf17e66322 dat]# ls
blog pgdata
以上可以看到blog容器拿到数据了(dat下有了数据目录),数据迁移完成!
3、启动应用
# 可以删掉无用的bk1容器
# 以下是宿主机操作:
ubuntu@yet:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81cfead946e blog:2.3.2 "/run.sh" 6 minutes ago Up 6 minutes 22/tcp, 5432/tcp, 29718/tcp bk1
5edf17e66322 blog:2.3.2 "/run.sh" 17 minutes ago Up 17 minutes 22/tcp, 0.0.0.0:33221->5432/tcp, 0.0.0.0:80->29718/tcp blog
ubuntu@yet:~$ sudo docker rm -f bk1
bk1
ubuntu@yet:~$ sudo docker exec -it blog bash
[root@5edf17e66322 /]# cat /start.sh
su - postgres -c "/DATA/pgsql11.8/sbin/psql.sh restart"
su - blog -c "/DATA/blog/nginx/sbin/restart.sh"
[root@5edf17e66322 /]# /start.sh
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
waiting ...
[uWSGI] getting INI configuration from /DATA/blog/uwsgi/etc/uwsgi.ini
以上完成迁移全部过程,网站首页可以访问了
浙公网安备 33010602011771号