Docker学习笔记(二)-常用操作、数据管理

0x00 前言

docker已经学过一部分了,继续学习下面的部分

0x01 docker常用操作

之前已经学习了容器操作和镜像操作等,但其中常见操作不太方便看
于是这里先归纳之前所学的常用操作并加以补充:

1、镜像的操作

docker search 镜像名 #查询镜像
docker history 镜像名 #查询历史镜像
docker pull 镜像名[:tag] #拉取镜像到本地
docker images #查看本地全部镜像
docker rmi 镜像id #删除本地镜像,id可以只写前几位
docker save -o 导出的路径 镜像id #将本地镜像导出
docker load -i 镜像文件 #加载本地镜像文件
docker tag 镜像id 镜像名:版本 #修改镜像名称
#镜像文件加载后,镜像的REPOSITORY和TAG为none。通过此命令,REPOSITORY为镜像名,TAG为版本
docker commit -a '镜像作者' -m '镜像构建信息' 容器名/容器id 构建镜像名#通过容器构建镜像,-p不暂停正在运行的容器
docker build -t='镜像名' . #通过Dockerfile文件构建镜像。先创建Dockerfile文件,然后执行命令构建
docker push 镜像名[:tag] #推送镜像

2、容器的操作

#运行容器,简单操作
docker run 镜像id/镜像名[:tag]
#运行守护式容器
docker run -d -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 --name 容器名称 镜像id/镜像名[:tag]
#-d 代表后台运行容器
#-p 宿主机端口:容器端口 为了端口映射
#-v 宿主机目录:容器目录 为了目录映射
#--name 指定容器名
#-e 指定一个环境名,如MySQL容器指定MySQL密码:-e MYSQL_ROOT_PASSWORD=123456
#运行交互式容器
docker run -it 镜像id/镜像名[:tag] /bin/bash
退出交互式bash(这样容器就会在后台运行):Ctrl+P Ctrl+Q
#-i 以交互模式运行容器
#-t 为创建的容器分配一个伪tty终端
docker run 镜像id/镜像名[:tag] apt-get install -y app_name #在容器安装新的程序
docker attach 容器id/容器名 #进入容器,交互式

docker ps [-qal] #查看正在运行的容器
#-a 查看全部容器,包括没有运行的
#-q 只查看容器的标识
#-l 列出最近一次启动的容器

docker logs -f 容器id/容器名 #查看容器日志
#-f 可以滚动查看日志的最后几行
docker diff 容器id/容器名 #查看容器修改操作
docker top 容器id/容器名 #查看容器内进程
docker inspect 容器id/容器名 #获取容器信息,如容器内部ip

docker exec -it 容器id/容器名 /bin/bash #进入到容器内部
#也可写成docker exec -it 容器id/容器名 bash
#-i 以交互模式运行容器
#-t 为创建的容器分配一个伪tty终端

docker stop 容器id/容器名 #停止指定容器
docker stop $(docker ps -qa) #停止所有容器
docker kill 容器id/容器名 #杀死指定容器
docker start 容器id/容器名 #启动容器
docker restart 容器id/容器名 #重启容器

docker rm 容器id/容器名 #删除容器(删除前,需停止容器)
docker rm $(docker ps -qa) #删除所有容器(删除前,需停止容器)

docker cp 文件名 容器id/容器名:容器内部路径 #将宿主机的内容复制到容器内部

3、远程访问

参考之前我写的博客:Docker学习笔记(一)-容器、镜像和客户端与守护进程

0x02 Docker容器的数据管理

1、Docker容器的数据卷

1.数据卷
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
数据卷设计目的,在于数据的永久化,它完全独立于容器的生存周期。
2.数据卷的特点

  • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
    • 数据卷可以在容器之间共享或重用数据
    • 可以对数据卷的内容直接进行修改
    • 数据卷的变化不会影响镜像的更新
    • 卷会一直存在,即使挂载数据卷的容器已经被删除

3.数据卷基本操作

数据卷:将宿主机的一个目录映射到容器的一个目录中
可以在宿主机中操作目录中的内容,那么容器内部映射的文件也会跟着一起改变

(1)创建数据卷

docker volume create 数据卷名
#创建后,默认会存放在/var/lib/docker/volumes/数据卷名/_data

(2)查看数据卷详细信息

docker volume inspect 数据卷名

(3)查看全部数据卷

docker volume ls

(4)删除数据卷

docker volume rm 数据卷名

(5)应用数据卷

#当映射数据卷时,若数据卷不存在,Docker会自动创建。会将容器内部自带文件存储在数据卷默认路径
docker run -v 数据卷名:容器内部路径 镜像id
#直接指定一个路径作为数据卷的存放位置。指定路径下是空的,不会把容器内的文件带出来
docker run -v 路径:容器内部路径 镜像id

4.数据卷的使用
(1)为容器添加数据卷

docker run --name dvt1 -v ~/container_data:/data -it ubuntu /bin/bash

在这里插入图片描述
在这里插入图片描述
(2)为数据卷添加访问权限

docker run --name dvt2 -v ~/datavolume:/data:ro -it ubuntu /bin/bash
#ro 容器内只读

在这里插入图片描述
在这里插入图片描述
(3)使用Dockerfile构建包含数据卷的镜像

FROM ubuntu:latest
VOLUME ["/datavolume1","/datavolume2"]
CMD /bin/bash

构建镜像

docker build -t='qwzf/dvt' .

运行镜像并查看镜像中指定目录

docker run --name dvt3 -it qwzf/dvt
docker inspect dvt3

在这里插入图片描述
在这里插入图片描述

2、Docker的数据卷容器

1.数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫数据卷容器。
2.使用数据卷容器
挂载数据卷容器的方法

docker run -it --name 其他容器 --volumes-from 数据卷容器名 镜像名 /bin/bash

例:

docker run -it --name dvt4 qwzf/dvt #启动数据卷容器
docker run -it --name dvt5 --volumes-from dvt4 ubuntu /bin/bash #挂载数据卷容器
#1、数据卷虚拟机开启或者关闭对共享无影响
#2、数据卷虚拟机多次作为共享目录,也可以做共享
#3、数据卷多次挂在,有重复名字,则以最后一个--volumes-from的为最后结果
#4、如果已经挂载数据卷容器的容器,删除数据卷容器对其无影响

在这里插入图片描述

3、Docker数据卷的备份和还原

1.数据备份

在这里插入图片描述

docker run --volumes-from 需要备份的容器名 -v ~/backup:/backup ubuntu tar cvf /backup/backup.tar 需要备份的目录

例:

docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt11 ubuntu tar cvf /backup/dvt5.tar /datavolume1

在这里插入图片描述

2.数据还原

docker run -v 需要还原的目录 --volumes-from 需要还原的容器名 -v ~/backup:/backup ubuntu tar xvf /backup/backup.tar

例:

docker run -v /datavolume1 --name dvt12 --volumes-from dvt5 -v ~/backup:/backup ubuntu tar xvf /backup/dvt5.tar

在这里插入图片描述

0x03 后记

docker相关的基础知识又学了一些。本篇博客记录了镜像和容器的常用操作docker容器的数据卷和数据卷容器


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qwzf1024@qq.com

×

喜欢就点赞,疼爱就打赏