左手指月

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

以上完成迁移全部过程,网站首页可以访问了

posted on 2020-07-15 01:21  yirgacheffe  阅读(1830)  评论(0)    收藏  举报