您的位置:首页 > 运维架构 > Docker

docker容器管理、仓库管理、数据管理、数据卷备份与恢复

2020-03-13 07:41 856 查看

文章目录

docker容器管理

通过镜像创建容器:

[root@linux01 ~]# docker images #查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_net          latest              f9dba795f884        23 hours ago        261MB
centos              latest              0f3e07c0138f        3 months ago        220MB

[root@linux01 ~]# docker create -it centos   #通过镜像创建容器
70258aa8d970f74ae6091b5bdd6b903d10ffc04f00ec017721080dee824ca27f

[root@linux01 ~]# docker ps -a   #新创建的容器未启动,需要使用-a参数查看
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
70258aa8d970        centos              "/bin/bash"         9 seconds ago        Created                                 crazy_spence
5de45f45421c        centos              "bash"              About a minute ago   Up About a minute                       heuristic_burnell

启动容器:

[root@linux01 ~]# docker start 70258aa8d970
70258aa8d970

启动容器后即可通过docker ps查看:

[root@linux01 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
70258aa8d970        centos              "/bin/bash"         11 minutes ago      Up 18 seconds                           crazy_spence
5de45f45421c        centos              "bash"              12 minutes ago      Up 12 minutes                           heuristic_burnell

说明:前两步创建+启动容器,相当于docker run直接启动镜像为容器的操作

启动镜像为容器时,自定义容器名test:

[root@linux01 ~]# docker run --name test -itd centos
78428f0ce95caf4ccfd64d63b9c30347356c9183b4d09e9ca5301565028355ae
[root@linux01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
78428f0ce95c        centos              "/bin/bash"         2 seconds ago       Up 1 second                             test
70258aa8d970        centos              "/bin/bash"         18 minutes ago      Up 7 minutes                            crazy_spence
5de45f45421c        centos              "bash"              19 minutes ago      Up 19 minutes                           heuristic_burnell

#最后一列names容器名已生效

通过docker run -d可以指定容器在后台运行命令:

[root@linux01 ~]# docker run -d centos bash -c "echo 12345"
194012d0499b1ef87d51aeb50fc0a2caa3cf5a5ada9092de0bfae87da0b0a659
[root@linux01 ~]# docker logs 194012d
12345

#docker logs 加容器id 即可查看容器执行的命令,执行完后自动关闭

执行完命令后直接删除容器:

[root@linux01 ~]# docker run --rm -it centos bash -c "sleep 30"

进入容器:

[root@linux01 ~]# docker attach 78428f0ce95c

#最后面为容器id,以这种方式进入容器后,exit退出会直接关闭容器,如退出时不想关闭容器先按ctrl+p,再按ctrl+q的方式退出即可

进入容器的第二种方式:

[root@linux01 ~]# docker exec -it 78428f0ce95c bash

#以这种方式进入容器后,exit退出后,容器依然在运行,不会关闭

删除容器:

[root@linux01 ~]# docker rm -f 78428f0ce95c

#删除正在运行的容器,需要使用-f参数强制删除,未运行的容器直接使用rm即可

导出容器:

[root@linux01 ~]# docker export 70258aa8d970 > test.tar

导入容器:

[root@linux01 ~]# cat test.tar |docker import - test
sha256:711b6c0f252950c19ad6dfb48c66385f6a2066584ec11271add77186a61b2bfc
[root@linux01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              711b6c0f2529        8 seconds ago       220MB
centos_net          latest              f9dba795f884        24 hours ago        261MB
centos              latest              0f3e07c0138f        3 months ago        220MB

#导入后变为镜像,test为自定义镜像名称

docker私有仓库搭建

下载registry 镜像:

[root@linux01 ~]# docker pull registry

以registry镜像启动容器:

[root@linux01 ~]# docker run -d -p 5000:5001 registry

#-p参数:将容器的5001端口映射到宿主机的5000端口,其他机器访问宿主机的5000端口即可访问到私有仓库(端口为自定义,只需要与宿主机映射即可)

上传镜像到私有仓库前需要更改镜像名:

[root@linux01 ~]# docker tag centos 192.168.234.128:5000/centos
[root@linux01 ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
centos_net                    latest              f9dba795f884        25 hours ago        261MB
192.168.234.128:5000/centos   latest              0f3e07c0138f        3 months ago        220MB
centos                        latest              0f3e07c0138f        3 months ago        220MB
registry                      latest              f32a97de94e1        10 months ago       25.8MB

#命名方式:宿主机+端口+镜像名

编辑配置文件:

[root@linux01 ~]# vi /etc/docker/daemon.json

配置文件内容:

{
"registry-mirrors": ["https://jmnbijcd.mirror.aliyuncs.com"],
"insecure-registries":["192.168.234.128:5000"]
}

#指定宿主机ip和端口,如果没有配置阿里云加速器,直接添加{ “insecure-registries”:[“192.168.234.128:5000”] }即可

重启docker服务并启动所有容器:

[root@linux01 ~]# systemctl restart docker && docker start $(docker ps -a -q)

推送镜像到私有仓库:

[root@linux01 ~]# docker push 192.168.234.128:5000/centos

查看私有仓库中的镜像:

[root@linux01 ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["centos"]}

#推送的centos已显示

在其他主机拉取镜像,需要先编辑配置文件:

[root@linux02 ~]# vi /etc/docker/daemon.json

配置文件内容:

{ "insecure-registries":["192.168.234.128:5000"] }

重启docker服务:

[root@linux02 ~]# systemctl restart docker

拉取私有仓库镜像:

[root@linux02 ~]# docker pull 192.168.234.128:5000/centos
[root@linux02 ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
192.168.234.128:5000/centos   latest              0f3e07c0138f        3 months ago        220MB

docker数据管理

挂载本地的目录到容器中:

[root@linux01 ~]# docker run -itd -v /data/docker_data/:/data --name test centos bash

说明:以centos镜像创建启动一个容器test,将宿主机/data/docker_data目录挂载到容器中的/data目录,这样在宿主机或者容器中对目录做修改,都会同步,在未做挂载的情况下,容器关闭数据就会丢失,该容器可以称为数据卷容器

挂载数据卷:

[root@linux01 ~]# docker run -itd --volumes-from test centos bash

说明:此步操作的意思就是以centos镜像一个新的容器,该容器挂载上一步创建的名为test容器的/data目录,类似linux中的NFS,将test容器的/data目录共享,映射到新创建的容器的/data目录

单独建立数据卷容器:

[root@linux01 ~]# docker run -itd -v /data --name a1 centos bash
ddc0ed075684367242df708899e92512ed8f2975cadcbf21411f5a787b089972

#将容器的/data目录设为共享的

挂载数据卷:

[root@linux01 ~]# docker run -itd --volumes-from a1 centos bash
d1786f388963e2dd2818b3d7415cbfa5e8d3fe612c557e804b3fbe1cc386e470

#以centos镜像创建一个新容器,将上一步创建的数据卷容器的共享目录/data映射到该容器的/data目录

数据卷备份与恢复

当数据卷容器挂载了宿主机目录时,不需要进行备份,只需要单独备份宿主机对应的挂载目录即可,但是当容器为独立的数据卷时,需要对其进行备份

备份

假设已经创建好了一个独立数据卷容器名为t1,备份该容器的数据卷目录(data):

1.在宿主机创建备份文件存放目录:

mkdir /data/backup

2.备份:

docker run --volumes-from t1 -v /data/backup/:/backup centos tar cvf /backup/data.tar /data/

说明:执行该命令即可开始备份,意思是以centos镜像创建一个新的容器,新的容器映射到数据卷容器t1,实现t1的数据目录(data)共享,并且宿主机的/data/backup目录已经挂载到新容器的/backup目录,所以新容器打包/data目录到/backup下,即可实现同步数据卷容器的共享目录到宿主机的备份目录

示意图:

恢复
创建数据卷容器t2,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包

新建数据卷容器:

docker run -itd -v /data/ --name t2 centos bash

新建容器挂载数据卷,并解包:

docker run --volumes-from t2 -v /data/backup/:/backup centos tar xf /backup/data.tar

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
Asnfy 发布了116 篇原创文章 · 获赞 925 · 访问量 12万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: