[Docker核心之容器、数据库文件的导入导出]

使用 Docker 容器

在 Docker 中,真正对外提供服务的还是容器,容器是对外提供服务的实例,容器的本质是进程。

运行一个容器


  1. docker run [参数] [镜像名称|ID] [启动容器执行的命令]
  2. 参数:使用什么参数在添加什么参数。
  3. 镜像名称|ID:可以使用镜像名称,也可以使用镜像ID
  4. 启动命令:不指定则执行默认的启动命令,指定则执行指定的命令。
  5. docker容器启动的前提
  6. 至少有一个应用进程运行在前台。
  7. 启动流程
  8. 1、检查本地是否存在需要被使用的镜像,如果存在则直接使用,如果不存在则去公网下载。
  9. 2、根据镜像来创建容器
  10. docker run 参数
  11. -d : 以守护进程方式运行 # 通俗说就是后台运行
  12. -p : (固定)端口映射 # 把容器里面的端口映射到宿主主机,可以通过访问主机端口访问容器端口
  13. -P : (随机)端口映射 # 小p可以设置宿主主机的端口,大P随机一个宿主主机端口映射
  14. -i : 保持标准输入打开
  15. -t : 创建一个伪终端 # 一般都是 -it 一块使用,创建了一个可以输入的伪终端,约等于终端
  16. -v : 将宿主主机上的目录映射到容器中 # 两者类似硬链接关系,在任意一方操作,两者都生效此操作。可以理解为磁盘挂载了宿主本机的目录和容器里面的目录,修改宿主本机的目录内容或者修改容器里面的目录内容都是在修改这个磁盘的文件内容。
  17. --rm : 当容器的生命周期结束时立即删除容器 # 容器生命周期结束会保存容器,docker ps -a 可以查到,这个设置是容器生命周期结束会立即删除,docker ps -a 里面查不到,即立即删除不存在。
  18. --name : 将容器自定义一个容器名称, 将容器的名称加入DNS解析 # 给容器起个名字,不能重复
  19. -e : 设置容器内部的环境变量 # 有的容器需要设置一些环境变量才可以启动。比如 mysql
  20. -h : 设置容器内部的主机名 #

docker create + docker start = docker run


  1. docker create (镜像)
  2. 根据镜像创建一个容器,容器的状态是 Created 。如果镜像不存在,和run一样会下载,但是run下载之后会启动镜像,生成一个容器并且运行。create只会下载,创建一个容器,状态 Created ,不会运行。
  3. docker start (容器)
  4. 启动容器,这个容器可以是创建的,也可以是一个之前已经运行结束的。
  5. docker run (镜像)
  6. 根据镜像创建一个容器,存在则直接运行。如果镜像不存在,下载,然后运行。
  7. 以上几个运行镜像(容器)都可以运行几个,空格隔开
  8. docker create|start|run 镜像(容器)1 镜像(容器)2 镜像(容器)3

容器复制


  1. 1、将文件复制到容器内
  2. docker cp [宿主主机文件路径] [容器名称|ID]:[容器内路径]
  3. 2、将容器内文件复制到宿主主机
  4. docker cp [容器名称|ID]:[容器内路径] [宿主主机文件路径]

停止容器


  1. docker stop 容器ID|容器名
  2. docker stop 容器(ID|名)1 容器(ID|名)2 容器(ID|名)3 # 批量停止容器
  3. docker stop ` docker ps -q ` # 停止所有的容器

关于容器和虚拟机网络小记


  1. 127.0.0.1
  2. # 回环网络,谁用指定的就是谁,容器使用,指向的就是容器,虚拟机(宿主)使用,就是指向的虚拟机(宿主)本机
  3. 172.16.1.100
  4. # 内部网络,也就是局域网。 docker 开启的几个容器可以理解为同一个局域网内开了几个电脑,而 docke 启动就会在宿主机虚拟一个 Docker 容器网桥(docker0)Docker 启动一个容器时会 根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。几个容器就是连接 docker 这个网关的几个电脑。后面详细介绍。
  5. 192.168.177.100
  6. # 对外的ip地址,表示的就是宿主(虚拟机)主机的 IP ,任何人都能访问

docker ps 展示容器列表


  1. docker ps # 默认情况下展示当前系统上所有的正在运行的容器
  2. -a : 展示所有的容器
  3. -q : 仅仅展示容器的ID
  4. 解释:
  5. CONTAINER ID:容器ID
  6. IMAGE :镜像ID|镜像名称
  7. COMMAND :容器启动执行的命令
  8. CREATED :创建距离现在的时间
  9. STATUS :状态
  10. PORTS :端口信息
  11. NAMES :容器的名称

删除容器


  1. docker rm [容器的名称|ID]
  2. 参数:
  3. -f : 强制删除 # 运行中的也能删除
  4. docker rm -f $(docker ps -a -q) # 删除所有容器
  5. docker rm -f ` docker ps -a -q ` # 删除所有容器

进入容器

1、attach进入容器


  1. docker attach 容器名|容器ID
  2. 建立一个宿主主机到容器中pid1的进程上的一个管道,但是一旦attach断开连接,docker容器随即退出。
  3. 如果有一个容器在后台运行,而 attach 方法就是通过某些手段连接 容器 pid 1 的进程,进入容器来操作。而 attach 操作使用的容器 pid 1 的进程在 attach 退出之后,pid 进程 1 也就关闭,docker容器只有一个pid1的进程,现在因为attach退出而关闭容器内pid1的进程而导致容器中没有进程存在,容器就会也跟着退出结束。

2、exec进入容器(推荐)


  1. docker exec -it relaxed_bhabha bash(也可以是其他指令)
  2. 使用 exec 可以在宿主主机上执行一个容器内部的命令,比如ls啊之类的,也可以执行一个 bash 命令达到进入容器的效果。# ————> 区别在下图可以看,原理就是下面这段。
  3. 原理就是新建一个进程连接容器,进入容器之后,来执行一些命令操作容器。这个进程由于是新建的,不会影响到容器内 pid 1 的进程,命令执行结束退出容器也只是新建的进程消失,不会影响到容器的正常运行。

3、nsenter进入容器


  1. 建立一个宿主主机和容器之间的一个管道,和exec一样,也是容器内新建了一个进程,连接容器内新进程操作容器。
  2. 需要配合 docker inspect 来使用(早期没有 exec 命令时,企业当中最长用的方式之一),Docker 是用 golang 语言开发,所以它也支持 go 语言的模版语法。
  3. nsenter --target $( docker inspect -f {{.State.Pid}} elegant_margulis ) --mount --uts --ipc --net --pid
  4. # {{.State.Pid}} elegant_margulis : 获取当前容器(elegant_margulis)的 ID

4、ssh进入容器

  1. ???
  2. # 暂时没接触

进入容器的几种方式小结


  1. docker run -it 镜像 bash ,直接启动镜像运行容器(容器启动后默认会有一个 pid 1 的进程),就生成了一个伪终端,而我们所有在伪终端上的操作就是在基于 pid 1 进程 操作这个镜像,如果退出,进程消失,则容器也结束。
  2. attach 就是操作的容器pid1的进程。
  3. exec nsenter 一样,exec 可以看作是 nsenter 的升级版本,他们进入容器的方式都是先在容器中创建了新的进程,然后连接容器的新进程从而进行容器的内部指令操作。
  4. 大概可以这么理解:# 明白进入容器的方式就不要看这段,刘鹏飞觉得理解起来不太合适。
  5. 你做了一个蛋糕,而 -it + bash 则表示,你做好之后直接执行一些命令,比如可以做好蛋糕之后直接执行吃了它的命令。而 -d 表示后台运行,也就是说,蛋糕做好之后,可以先放在别的地方,比如放在了冰箱,想用的时候再拿来用。如果我们现在想拿出来蛋糕吃,用 attach 方法,就是直接暴力给冰箱开了个口,把冰箱拆了,拿到了蛋糕,蛋糕只能一次吃完,吃不完也没有冰箱再存放了,这就等于 attach 进入容器内,执行了命令,只能把工作做完,一旦退出,容器就结束了。但是 nsenter exec 方法,就是以柔和的手段正常打开冰箱,拿了蛋糕,切了一块拿来吃,没有吃完还能放回去,不影响冰箱的继续运行,等于说 nsenter exec 方法 进入容器之后,不执行命令了,可以先退出,容器会继续在后台运行,不受到影响。

添加数据库用户


  1. # 创建用户并授权
  2. GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
  3. # 刷新权限
  4. FLUSH PRIVILEGES;

m

mysql数据库source命令导出数据库、导入sql文件

  1. mysql导出所有数据库
  2. cmd终端中输入: # ↓ 这是导出所有 可指定数据库名
  3. mysqldump -uroot -p123456 --all-databases > /home/aa.sql
  4. # 固定写法 用户名 密码 指定导出的数据库 导出至那个文件夹
  5. -----------------------------------------------------------------------------------
  6. 在导入大的sql文件时,使用可视化工具导入往往效率极低,此时,我们常常使用在cmd中执行source命令的方式、将整个文件导入
  7. 第一步,打开cmd命令窗口,进入数据库
  8. # 可在linux下使用 用法一样 进入mysql即可按如下操作
  9. mysql  -u用户名  -p
  10. 输入密码
  11.  
  12. 第二步,切换数据库 # 想将文件导入那个库下指定那个即可
  13. mysql> use test;  (其中test为要导入的数据库名)
  14.  
  15. 第三步,导入sql文件
  16. mysql> source E:/pro_sql/test.sql   source后边为sql文件存放位置)
  17. # 注意 文件必须为sql结尾
  18.  
  19. 操作完以上步骤,等待命令运行完成即可
  20. ————————————————

容器和镜像的导入与导出

容器的导出


  1. docker export -o [打包的文件名] [容器ID或名称]
  2. docker export -o django.tar elegant_margulis
  3. # 一个容器里面安装了自己需要的一些包,不想下次启动再重新安装包,就可以通过容器的导出方式来保存。只要下次使用的时候导入 之前打包好的容器文件 ,就可以继上次操作继续使用 而不需要再安装包。

容器的导入


  1. docker import [文件名] [镜像名及版本号]
  2. docker import django.tar django:v1

镜像的导出


  1. docker save -o [打包的文件名1] 镜像名称及版本号 镜像名称2及版本号
  2. docker save > [打包的文件名1] 镜像名称及版本号 镜像名称2及版本号
  3. docker save -o python.tar python:3.6.8 alvinos/django:v3

镜像的导入


  1. docker load -i [打包的文件名]
  2. docker load < [打包的文件名]
  3. docker load < python.tar

容器和镜像导入导出的区别


  1. 1、容器 import 导入可以自定义镜像名称,镜像 load 导入则不行
  2. 2、镜像 save 导出可以同时保存多个镜像,容器 export 导出则不能一次保存多个容器
  3. 3、镜像 save 导出保存的镜像体积要大于容器 export 导出保存的镜像体积
  4. 4、两者之间互不能导入

[Docker核心之容器、数据库文件的导入导出、容器镜像的导入导出]的更多相关文章

  1. Oracle12cr1新特性之容器数据库(CDB)和可插拔数据库(PDB) 的启动和关闭

    Oracle12c中引入的多宿主选项(multitenant option)允许一个容器数据库容纳多个独立的可插拔数据库(PDB).本文将说明如何启动和关闭容器数据库(CDB)和可插拔数据库(PDB) ...

  2. docker核心概念(镜像、容器、仓库)及基本操作

    概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...

  3. Docker最全教程——数据库容器化之持久保存数据(十一)

    上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...

  4. Docker最全教程——数据库容器化(十)

    终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...

  5. docker容器和镜像的导入和导出

    镜像的保存 [root@wxtest1607 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat8 3.0 90457edaf6 ...

  6. docker容器 - 导入容器、导出容器、查看容器

    实验环境 CentOS 7.5 容器 容器是镜像的运行实例.不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层:同时,容器中的应用进程处于运行状态. 导入和导出容器 实现容器的迁移. 导 ...

  7. mysql 导入数据库文件到指定数据库

    i:\mysql\bin>mysql  -u  用户名 -p  数据库名  <   i:/test.sql // (source "c:\adsense.sql" ) ...

  8. 如何在oracle中导入dmp数据库文件

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...

  9. Ado.Net小练习01(数据库文件导出,导入)

    数据库文件导出主要程序: <span style="font-family: Arial, Helvetica, sans-serif;"><span style ...

随机推荐

  1. mysql.data.entityframeworkcore 已弃用

    转官网有方案: https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html General R ...

  2. IO系列测试源码

    //IO系列测试源码(需要自取) using System; using System.CodeDom; using System.Collections.Generic; using System. ...

  3. SE_Work0_回顾与展望

    项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:阅读推荐博客并回答问题 热身作业阅读部分要求 我在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个 ...

  4. Pytorch_Part5_迭代训练

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  5. [刷题] 435 Non-overlapping Intervals

    要求 贪心算法与动态规划的关系 给定一组区间,最少删除多少个区间,可以让这些区间之间互相不重叠 给定区间的起始点永远小于终止点 示例 [[1,2],[2,3],[3,4],[1,3]], 返回1 [[ ...

  6. tigervnc报错

    tigervnc报错

  7. centos国内镜像下载

    国内镜像下载 http://mirrors.aliyun.com/centos/6/isos/x86_64/ 如果需要下载centos 7 版本进入对应7的/isos/x86_64/ 选择minima ...

  8. http协议工作原理及工作流程

    什么是url ? url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html http : 超文本传输协议 https: 安全套接字协议 HTT ...

  9. Redis 为什么使用跳跃表

    引言 跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的. 什么是跳跃表 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个 ...

  10. .NET6系列:Visual Studio 2022 线路图

    系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...