以安装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. php面试题整理(三)

    判断是不是ie浏览器 1,1

  2. Openstack安装Dashboard之后,浏览器无法打开页面 500 Internal Server Error

    在手动部署Openstack时,按照官方文档安装Dashboard,并进行了配置后,发现用浏览器无法打开界面 页面显示: Internal Server Error The server encoun ...

  3. CentOS 7 安装telnet服务

    今天测试zabbix需要用到telnet服务,查询到Centos7下下载安装telnet服务的方法,特此整理记录! 一.通过yum下载安装telnet yum -y install xinetd te ...

  4. TortoiseHg 学习笔记

    0.前言     TortoiseHg是分布式的源代码管理工具Mercurial的GUIclient. mercurial 作为3大主流的分布式源代码管理工具.已经被广泛的使用.比如 googleco ...

  5. 小a的子序列 (线性dp)

    思路:设dp[i][j]表示最大数为j,i为第i的位置的萌值.那么推导过程就是两种情况:1.第i位数不放数字,则结果就是dp[i-1][j]; 2.第i位放数字,则结果就是前面的萌值sum+dp[i- ...

  6. Linux:Day8(上) 文件系统挂载和管理工具

    文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载: 解除此关联关系的过程称之为卸载: 把设备关联挂载点:Mount Point ...

  7. mysql概述

    MySql大致分为三层结构: 第一层:客户端并非MySql所独有,例如:连接处理.授权认证.安全等功能均在这一层处理 第二层:核心服务包括查询解析.分析.优化.缓存.内置函数(比如 : 时间.数学.加 ...

  8. linux配置PS1

    自己常用的格式: vi ~/.bashrc export PS1="\[\e[31;1m\]\u@\[\e[34;1m\]\h \[\e[36;1m\]\W $\[\e[37;1m\] &q ...

  9. Ambari 使用 Hive View 异常处理

    异常:进入Hive View提示user home check fail 详细日志:Service 'userhome' check failed: java.io.FileNotFoundExcep ...

  10. ML.NET 示例:回归之销售预测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...