以安装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. Linux三剑客-AWK

    1.什么是awk AWK是一种处理文本文件的语言,是一个强大的文本分析工具.有统计和计算功能. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Br ...

  2. 利用filter替换字符串中的空格

    s = "abc def ghi xy" print(','.join(filter(lambda x: x, s.split(' '))))

  3. 配置DispatcherServlet应该写/还是/*

    相亲怎么做 web应用需要放在Tomcat容器中才能启动,Tomcat容器内有一个默认的web.xml文件,在自己项目中配置的XML文件都是继承自Tomcat中的全局XML文件并重写其中相应配置,这种 ...

  4. Rsync服务实战

    目录 1 安装rsync软件 2 配置 /etc/rsyncd.conf 3 创建用户(运行rsync服务的用户身份) 4 创建虚拟用户密码文件(客户端连接时候使用) 5启动 rsync 服务,并加入 ...

  5. 转载:遇到BITMAP CONVERSION TO ROWIDS 后解决与思考

    今天遇到一个案例,有点价值写下来,以后多看看 SQL: select t.order_id, t.spec_name, t.staff_code, t.staff_code as xxbStaffCo ...

  6. 自动化测试中依据元素实时截图,比较元素图片是否一致(selenium和appium通用)

    1.根据元素的上下左右的坐标进行截图 2.先安装pillow 3.下面是截图 4.下面是比较两张图片的值 5.截取两张图片,然后对两张图片比对,这种场景,可以在测试视频播放.图片显示页面做验证.

  7. 如何理解render: h => h(App)

    学习vuejs的时候对这句代码不理解 new Vue({ el: '#app', router, store, i18n, render: h => h(App) }) 查找了有关资料,以下为结 ...

  8. Intellij Idea 2017创建web项目及tomcat部署实战

    相关软件:Intellij Idea2017.jdk16.tomcat7 Intellij Idea直接安装(可根据需要选择自己设置的安装目录),jdk使用1.6/1.7/1.8都可以,主要是配置好系 ...

  9. BZOJ3561 DZY Loves Math VI 莫比乌斯反演

    传送门 看到\(gcd\)相关先推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^M (lcm(i ...

  10. 在Winform开发中使用FastReport创建报表

    FastReport.Net是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案.可用在Microsoft Visual Studio 2005到2015, ...