docker 操作镜像的基本操作
以安装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 操作镜像的基本操作的更多相关文章
- docker遇到的问题以及docker 操作镜像的基本操作
root@localhost ~]# systemctl status docker.service ● docker.service - Docker Application Container E ...
- 3.Docker 操作镜像
获取镜像 之前提到过,Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像. 从 Docker 镜像仓库获取镜像的命令是 docker pull.其命令格式为: doc ...
- Docker:镜像操作和容器操作
镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...
- Docker 系列二(操作镜像).
一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...
- docker 实践二:操作镜像
本篇我们来详细介绍 docker 镜像的操作. 注:环境为 CentOS7,docker 19.03 之前已经说过,容器是 docker 的核心概念之一,所以对应的就需要知道它的使用方法,接下来我们就 ...
- Docker.[3].镜像操作.
Docker.[3].镜像操作. 熟悉基础指令: 查看本地镜像 docker images 查看本地镜像 docker image list (和上面显示的结果一样.) 删除本地镜像 docker r ...
- Docker的镜像操作
Docker镜像操作 一.查看镜像 docker images # 查看本地镜像 二.搜索镜像 docker search 镜像名字 docker search centos 三.下载(拉取)镜像 自 ...
- Docker的镜像理解以及容器的备份、恢复和迁移操作
Docker的镜像理解以及容器的备份.恢复和迁移操作 这篇文章主要介绍了Docker的镜像理解以及容器的备份.恢复和迁移操作,覆盖很多原理知识以及容器的重要操作步骤,极力推荐!需要的朋友可以参考下 D ...
- 使用Nexus3构建Docker私有镜像仓库
一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并 ...
随机推荐
- win10 激活(亲测可用)
转自http://www.ylmfwin100.com/ylmf/8643.html 1.以管理员身份运行命令行(这一步一定要做) 2.依次输入以下命令 slmgr.vbs /upk (此时弹出窗口显 ...
- SQL TOP 子句
TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...
- 选择数据库管理系统(DBMS)时主要考虑的因素
选择数据库管理系统时应从以下几个方面予以考虑: (1) 构造数据库的难易程度. 需要分析数据库管理系统有没有范式的要求,即是否必须按照系统所规定的数据模型分析现实世界,建立相应的模型:数据库管理语句是 ...
- 使用chrome远程调试设备及调试模拟器设备
使用chrome开发工具远程在Android上远程调试 准备工作 开始远程调试之前,需要做好如下准备: 在你电脑上安装Chrome 32 或者更新的版本 一根连接Android设备的USB线 手机系统 ...
- 爬取伯乐在线文章(五)itemloader
ItemLoader 在我们执行scrapy爬取字段中,会有大量的CSS或是Xpath代码,当要爬取的网站多了,要维护起来很麻烦,为解决这类问题,我们可以根据scrapy提供的loader机制. 导入 ...
- Python:Day43 抽屉
1.关于inline-block和float的理解 inline-block和float都可以实现块级标签放在同一行上,inline不好设置左右对齐,只能通过margin和padding调节.而flo ...
- (七)JavaScript 函数
带有返回值的函数 JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.
- 从零开始的ESP8266探索(1)-使用Server功能搭建Web Server
https://blog.csdn.net/Naisu_kun/article/details/80398667 文件系统 https://blog.csdn.net/solar_Lan/articl ...
- python:while循环、运算符、初始编码
while循环 while -- 关键字 while 条件: 缩进代码块 以上循环是(死循环) 终止循环的方法 1.break 跳出循环,并且把循环给干掉了 2.continue 跳出本次循环,继续下 ...
- 深入理解Proxy 及 使用Proxy实现vue数据双向绑定
阅读目录 1.什么是Proxy?它的作用是? 2.get(target, propKey, receiver) 3.set(target, propKey, value, receiver) 4.ha ...