以安装mysql为例
1.拉取镜像
docker pull mysql
这样写会拉区mysql的最新版本
错误的启动

[root@localhost ~]# docker run --name mysql01 -d mysql  //--name是给容器泣别名 -d是后台运行
42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846 mysql退出了
[root@localhost ~]# docker ps -a //显示正在运行的或者过去运行的镜像版本
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f09819908b mysql "docker-entrypoint.sh" seconds ago Exited () seconds ago mysql01
538bde63e500 tomcat "catalina.sh run" About an hour ago Exited () About an hour ago compassionate_
goldstine
c4f1ac60b3fc tomcat "catalina.sh run" About an hour ago Exited () About an hour ago lonely_fermi
81ec743a5271 tomcat "catalina.sh run" About an hour ago Exited () About an hour ago sick_ramanujan //错误日志
[root@localhost ~]# docker logs 42f09819908b //查看镜像的运行日志
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
正确的启动

[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD= -d mysql
b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b874c56bec49 mysql "docker-entrypoint.sh" seconds ago Up seconds /tcp
做了端口映射

[root@localhost ~]# docker run -p : --name mysql02 -e MYSQL_ROOT_PASSWORD= -d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker-entrypoint.sh" seconds ago Up seconds 0.0.0.0:->/tcp my

当关闭后想要再次启动 首先要知道你做了容器映射后的id  找到指定的id,就可以启动容器了

[root@localhost ~]# docker ps -a
/etc/sysconfig/docker: line : PTIONS: command not found
/etc/sysconfig/docker: line : /bin/bash:: No such file or directory
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
707b4adac44f mysql "docker-entrypoint..." About an hour ago Up minutes 0.0.0.0:->/tcp,
/tcp mysql02
e705dafeade2 mysql "docker-entrypoint..." About an hour ago Exited () About an hour ago
mysql01
67d6a8fe057e tomcat "catalina.sh run" hours ago Exited () hours ago
gracious_cray
72ea521cf5cc tomcat "catalina.sh run" hours ago Exited () hours ago
mytomcat

执行这一步操作后就可以连接navicate进行数据库操作了。

[root@localhost ~]# docker start 707b4adac44f087
/etc/sysconfig/docker: line : PTIONS: command not found
/etc/sysconfig/docker: line : /bin/bash:: No such file or directory
707b4adac44f087
[root@localhost ~]# docker ps
/etc/sysconfig/docker: line : PTIONS: command not found
/etc/sysconfig/docker: line : /bin/bash:: No such file or directory
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
707b4adac44f mysql "docker-entrypoint..." About an hour ago Up seconds 0.0.0.0:->/tcp, /tcp
mysql02

 Docker的镜像原理

镜像是一种轻量级的,可独立执行的软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件运行的所有内容,包括代码,运行时所需要的库,环境变量和配置文件。

为什么docker镜像文件会那么大

镜像是一个千层饼,采用了联合文件系统UnionFS (联合文件系统)Union文件系统是一种分层,轻量级并且高性能的文件系统,他在线hi吃对文件系统的修改作为一次提交来一层一层的叠加,同时可以将不同的目录挂载到

同一个虚拟文件系统下,Union文件系统是Docker镜像的基础。镜像是可以通过分层继承,基于基础镜像(没有父镜像),可以制作各种应用的镜像。

特性:一次加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把隔层文件叠加起来,这样最终的文件系统包含所有的底层的文件和目录

Docker镜像的加载原理

docker镜像实际上是由一层一层的文件系统组成bootfs(boot file system) 主要包含boot 和kernel ,bootloader 主要是引导加载kernel linux刚启动时会加载bootfs文件系统再docker 镜像的最底层就是bootfs.这一层与linux 、unix的文件系统是一样的包含boot加载器和(bootLoader)内核(kernel) 当boot加载完后整个内核就在内存中了,此时的内存使用权已由bootfs转交给内核 此时会卸载bootfs.

rootfs(root file system) 在bootfs之上,包含的就是典型linux系统中的/dev  /opt  /bin  /tmp  等标准的目录和文件 rootfs就是不同的各种操作系统的发行版比如:/Centos  /ubuntu 等等

我们平常安装到虚拟机的centos都有 1到几个GB  为什么docker 这里才200MB呢 对于一个精简的os  rootfs可以很小只需要包括最基本的命令,工具和程序库就可以了,因为底层直接使用Host 的kernel 自己只需要提供rootfs就可以了

由此可见不同的linux 的发行版本 他们的rootfs是一致的rootfs 是有差别的因此不同的发行版可以共用bootfs

为什么docker镜像要采用这种分层结构:

最大的一个好处就是资源共享,比如有好几个镜都是从相同的base镜像构建而来,那么宿主机中只需要保留一份base镜像就可以了,同时内存中也只需要加载一份base进镜像就可以了,就可以为所有容器服务了,而且镜像的每一次呢个都可以资源共享

特点:docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶层,这一层通常被称为容器层,容器层之下的都叫镜像层。

Docker容器数据卷:

数据卷是什么:简单说就是做数据持久化的磁盘,硬盘,u盘,或者类似于Redis的中的rdb aof 文件  主要做数据的持久化 和容器之间数据的共享。卷就是目录或者文件存在一个或者多个容器中由docker 挂在到容器,但户数与联合文件系统

因此能否绕过Union file system 提供一些的用于持久存储或者共享数据的特性卷设计的目的就是为了数据的持久化,完全独立于容器的生命周期因此docker不会再容器删除时删除其关在的数据卷。

数据卷的特点

1.数据卷可在容器之间共享或者重用数据

2.卷中的更改可以直接生效

3.数据卷的更改不会包含在镜像的更新中

4.数据卷的生命周期一直持续到没有容器使用他为止

5.数据卷也可以完成主机到容器或者容器到主机的数据共享

添加数据卷

容器中添加数据卷有两种办法第一种直接命令添加第二种使用dockerfile添加

命令添加:

待续:::

												

docker 操作镜像的基本操作的更多相关文章

  1. docker遇到的问题以及docker 操作镜像的基本操作

    root@localhost ~]# systemctl status docker.service ● docker.service - Docker Application Container E ...

  2. 3.Docker 操作镜像

    获取镜像 之前提到过,Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像. 从 Docker 镜像仓库获取镜像的命令是 docker pull.其命令格式为: doc ...

  3. Docker:镜像操作和容器操作

    镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...

  4. Docker 系列二(操作镜像).

    一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...

  5. docker 实践二:操作镜像

    本篇我们来详细介绍 docker 镜像的操作. 注:环境为 CentOS7,docker 19.03 之前已经说过,容器是 docker 的核心概念之一,所以对应的就需要知道它的使用方法,接下来我们就 ...

  6. Docker.[3].镜像操作.

    Docker.[3].镜像操作. 熟悉基础指令: 查看本地镜像 docker images 查看本地镜像 docker image list (和上面显示的结果一样.) 删除本地镜像 docker r ...

  7. Docker的镜像操作

    Docker镜像操作 一.查看镜像 docker images # 查看本地镜像 二.搜索镜像 docker search 镜像名字 docker search centos 三.下载(拉取)镜像 自 ...

  8. Docker的镜像理解以及容器的备份、恢复和迁移操作

    Docker的镜像理解以及容器的备份.恢复和迁移操作 这篇文章主要介绍了Docker的镜像理解以及容器的备份.恢复和迁移操作,覆盖很多原理知识以及容器的重要操作步骤,极力推荐!需要的朋友可以参考下 D ...

  9. 使用Nexus3构建Docker私有镜像仓库

    一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并 ...

随机推荐

  1. java实现随机四则运算

    使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个 ...

  2. C#中webbrowser与javascript(js)交互的方法

    今天在做一个项目的时候需要用c#搞一个webbrowser,然后有些地方还需要与js交互.所以就查了一下资料,发现很多博客提到了但是却没有说下具体的操作.所以我就写一下. 开发环境是Visual St ...

  3. 【转】编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  4. 五、Oracle 分组查询、视图

    一.分组函数1.avg:平均分2.sum:求和3.max:最大值4.min:最小值注意:前面四个必须针对数值字段,且参数只能是一个5.count:求个数 二.分组查询1.语法是 group by 分组 ...

  5. Python-网络爬虫模块-requests模块之响应-response

    当requests发送请求成功后,requests就会得到返回值,如果服务器响应正常,就会接收到响应数据: Response响应中的属性和方法 常用属性: status_code: 数据类型:int ...

  6. linux防火墙开放和禁用指定端口

    一.例如:开放8080端口 firewall-cmd --permanent --add-port=8080/tcp 二.重启使设置生效 systemctl restart firewalld.ser ...

  7. 初学Python——字符串相关操作

    基本字符串操作 Pyhton中字符串的格式化输出在前面已经总结了,接下来介绍一些常用的字符串操作 先定义一个字符变量,以下的操作都以此为例: name=" my name is china ...

  8. Java的错误类型

    程序的错误分为:编译期语法错误.运行期异常错误和运行期逻辑错误 (1)编译期语法错误可以借助Eclipse的帮助方便地定位错误,并进行修改 如: (2)运行期异常,即 没有语法错误,编译可以通过,但运 ...

  9. 计算机网络#关于HDLC#

    HDLC(High-Level Data Link Control,高级数据链路控制):面向比特型的协议 主站(发送命令).从站(响应命令).复合站(既可发送命令,也可响应命令) HDLC链路配置方式 ...

  10. 记一次 OutOfMemoryError: Java heap space 的排错

    1.情况概述 公司以前的某报名系统,项目启动后,在经过用户一段时间的使用之后,项目响应便开始变得极其缓慢,最后几乎毫无反应.日志里输出了一些似乎无关痛痒的异常,逐步修复,项目仍然出现这种情况,且 &q ...