docker (1) ---简介,使用
一、docker简介:
容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者 在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运 行一千个 Docker 容器,这已成为现实 Docker 的目标 Build,Ship and Run Any App,Anywhere— 即通过对 应用组件的封装 (Packaging), 发布(Distribution), 运行 (runing) 等生命周期的管理 , 达到应用组件级别的”一 次封装 , 到处运行”
二、docker特点:
优点:
1、 启动快,资源占用小 , 资源利用高,快速构建标准化运行环境
2、创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理 局限:
局限:
1、 Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用
2、 LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是 linux
3、 隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库
4、 管理相对简单,主要是基于 namespace 隔离
5、cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量 ( 所以 dotcloud 主要是按内存收费 )
6、docker 对 disk 的管理比较有限
7、container 随着用户进程的停止而销毁,container 中的 log 等用户数据不便收集
三、docker与虚拟机比较
docker的特点启动快比虚拟机 , 可以秒级启动 对资源占用小 , 宿主机上可运行千台容器 方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低 通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效 率 Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 , 尽量减小系统开销
四、docker相关网站
https://hub.docker.com/
https://docs.docker.com/
http://docs.docker-cn.com/ docker
五、docker安装:
1、 yum install docker -y
2、 二进制安装
六、docker 镜像
镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本 能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务 器中的仓科)下载。
(1) 下载镜像
下载镜像: #docker pull NAME:TAG 下载某个被打上了某个标签的叫 ×× 名字 的镜像
eg:
docker pull ubuntu:latest 若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像
例
1、进入docker 官方镜像仓库
也可以直接进入(网址:https://hub.docker.com/ )
2、选择一个镜像
3、选择一个镜像 下载
docker pull nginx
(2) 查看本地镜像
docker images
(3)搜索一个镜像
docker search mysql
(4) 删除本地镜像
docker rmi nginx : latest
七、docker镜像分层
docker镜像的分层结构:支持通过扩展现有镜像,创建新的镜像
新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
分层结构的优势:
&1、共享资源:
有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
&2、可写的容器层:
当容器启动时,一个新的可写层被 加载到镜像的顶部。这一层通常被 称作“容器层” , “容器层”之下 的都叫“镜像层” 。 所有对容器的改动。
- 无论添加、删除、还是修改文件都只会发生在容器层中。 只有容器层是可写的,容器层下面的所有镜像层都是只读的。
这个特性。
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。 如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a, 也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠 加之后的文件系统。
1、添加文件
在容器中创建文件时,新文件被添加到容器层中。
2、读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文 件。一旦找到,打开并读入内存。
3、修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
4、删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。 找到后,会在容器层中记录下此删除操作。
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
八、docker镜像的创建
创建镜像的三种方法
(1)基于修改后的容器创建:docker commit 命令
(2)基于本地模板导入
(3)基于 Dockerfile 文件创建
(1) 基于修改后的容器创建:
1、下载一个centos 镜像
docker pull centos
2、创建并启动一个镜像为 centos 的容器
docker run -it centos:latest /bin/bash ( /bin/bash 环境变量)
3、退出容器
exit
4、查看所有的 容器
docker ps -a ( 查看正在运行的容器,docker -ps )
5、重新唤醒 刚才启动的容器
docker start CONTAINER ID
6、进入容器 并创建一个文件
# 进入容器
docker exec -it CONTAINERID /bin/bash
# 创建一个文件
7、退出容器到命令行界面
此时容器较镜像已经发生改变,我们以此生成新镜像
8、生成新的镜像
docker commit f0decea12ae centos7.:latest
9、查看本地镜像
docker images
生成了一个新的镜像!
(2)基于本地模板导入
1、导出:将镜像保存为本地文件
docker save -o centos.tar centos7.:latest ( 也可以 centios.tar.gz )
2、删除 centos7.1 镜像
docker rmi centos7.: latest
3、导入:将压缩包文件导入到本地镜像列表
docker load -i centos7..tar
(3)基于 Dockerfile 文件创建
Dockerfile 是一个文本文件,用来配置 image,记录了镜像构建的所有步骤。
Docker 根据 该文件生成二进制的 image 文件
1、创建目录dockerfile 并切换至此目录
mkdir dockerfile
cd dockerfile
2、创建并编辑文件 dockerfile
# 创建
vim dockerfile
# 编辑内容如下
FROM centos:
RUN yum install -y vim
3、创建镜像
docker build -t centostest .
build:创建镜像
-t:为镜像指定名字
注:
下面列出了 Dockerfile 中最常用的指令
FROM:指定 base 镜像。
MAINTAINER:设置镜像的作者,可以是任意字符串。
COPY:将文件从 build context 复制到镜像。
COPY 支持两种形式:
COPY src dest
COPY ["src", "dest"]
注意:src 只能指定 build context 中的文件或目录。
ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会
被自动解压到 dest。
ENV:设置环境变量,环境变量可被后面的指令使用。
EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
VOLUME:将文件或目录声明为 volume。
WORKDIR:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。
CMD:容器启动时运行指定的命令。 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。
ENTRYPOINT:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。 Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
九、docker的使用
1、创建容器,create命令是创建并不启动容器 (不常用)
docker create -it centos7.:latest
2、停止一个容器
docker stop CONTAINER ID (kill)
3、启动停止的容器
docker start CONTAINER ID (重启 restart)
注:非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态
4、运行一个容器
# docker run -ti centos:latest /bin/bash
创建并运行一个容器 ,此时你会直接被切换到容器中
#ctrl+d//exit退出,并且容器也退出
#ctrl+p+q退出容器,并且保持容器up的状态
-t 分配一个伪终端
-i 让容器的标准输入持续打开
用/bin/bash环境显示
5、以后台守护进程(Daemonized)形态运行
6、删除一个容器
docker rm CONTAINER ID
-f 强制删除处于运行中的容器
-l 删除链接,保留容器
-v 删除挂载的数据卷
7、进入容器
# 1
docker attach直接进入容器 启动命令的终端,不会启动新的进程.
docker attach CONTAINER ID
&
docker run -d centos /bin/bash -c "while true;do sleep 1;echo I_am_docker;done"
&
#2 docker exec则是在容器中打开新的终端,并且可以启动新的进程
docker exec -it CONTAINER ID /bin/bash
8、导出容器:导出一个已经创建的容器到文件,不管容器是否运行
docker export CONTAINER ID > centos7..tar
9、将容器导入系统成为镜像
cat centos7..tar | docker import - test
10、查看容器日志 (显示容器启动进程的控制台输出)
docker logs -f CONTAINER ID
11、暂停容器
docker pause CONTAINER ID
12、取消暂停 继续运行容器
docker unpause CONTAINER ID
十、docker镜像的仓库 --- repository的创建
仓库分为公共仓库和私有仓库
DockerHub的官方仓库 https://hub.docker.com
DockerPool社区仓库 https://dl.dockerpool.com
Dockern Pool (http://dockerpool.com)是国内专业的Docker社区,目前 也提供了官方镜像的下载管理服务
1、下载 registry 镜像
2、利用容器启用私有仓库
docker run -d -p : -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:
3、客户端修改配置文件 /etc/docker/daemon.json
# vim /etc/docker/daemon.json
# 添加以下内容
"insecure-registries": ["192.168.226.147:5000"],
4、客户端: 重启 docker
systemctl restart docker
5、客户端:对镜像进行改名
# docker tag nginx:latest 192.168.226.147:/nginx:latest
6、客户端:上传镜像
docker push 192.168.226.147:/nginx:latest
7、客户端:删除已有镜像
docker rmi 192.168.226.147:/nginx:latest
docker rmi nginx
8、客户端:下载镜像
docker pull 192.168.226.147:/nginx:latest
下载成功,证明私有仓库可用!
docker (1) ---简介,使用的更多相关文章
- Docker 容器简介与部署
关于Docker容器技术 参考文献:<docker 从入门到精通> Docker容器简介 Docker的构想是要实现 "Build,Ship and Run Any App,An ...
- Docker的简介以及Dockerfile编写与使用
Docker的简介 Docker是在容器的基础上,进行了进一步的封装,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便.快捷. 下面是两张对比图. 可以看到传统虚拟机技术是虚拟出 ...
- docker 概念简介、简单入门
1.docker 简介 Docker 是一个开源项目,这个项目旨在通过把应用程序打包为可移植的.自给自足的容器(引用语) DocKer一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer ...
- Docker(一) 简介
简介 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...
- Docker入门简介
Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们的应用和依赖包到一个可一直的容器中,然后 ...
- Docker Machine 简介
Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在 ...
- Docker学习笔记 - Docker的简介
传统硬件虚拟化:虚拟硬件,事先分配资源,在虚拟的硬件上安装操作系统,虚拟机启动起来以后资源就会被完全占用. 操作系统虚拟化:docker是操作系统虚拟化,借助操作系统内核特性(命名空间.cgroups ...
- Docker Compose 简介
Compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用.使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建 ...
- Docker网络简介
Docker允许通过外部访问容器或则容器互联的方式来提供网络服务. 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或则-P参数来指定断开映射.当使用 -P 标记时, ...
随机推荐
- $("[lay-id='"+this.id+"']")
$("[lay-id='"+this.id+"']") $("[lay-id='"+this.id+"'] .layui-tabl ...
- B2. Concurrent 线程池(Executor)
[概述] 与数据库连接管理类似,线程的创建和销毁会耗费较大的开销,使用 “池化技术” 来更好地利用当前线程资源,减少因线程创建和销毁带来的开销,这就是线程池产生的原因. [无限创建线程的不足] 在生产 ...
- java混淆工具Jocky和Proguard
java混淆工具有很多种,这里介绍Jocky和Proguard 一:Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC).原本是方便Apusic 应用服务器的开发,现在开放出来,供大家 ...
- pep8摘要
https://www.python.org/dev/peps/pep-0008/ #!/usr/bin/python # -*- coding:utf- -*- # @filename: pep_s ...
- centos6 用户登陆管理
查看当前登陆有哪些用户,在做什么 [root@web01 ~]# w :: up :, users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGI ...
- CSS——可视化格式模型
CSS的可视化格式模型 CSS中规定每一个元素都有自己的盒子模型(相当一规定了这个元素如何显示): 然后可视化格式模型则是把这些盒子模型按照规则摆放到页面上,也就是如何布局: 换句话说,盒子模型规定了 ...
- Python之元祖
Python之元祖 tuple ( ) 元组和列表是一样的.但是,也有区别. 元组只能有读操作.没有修改删除操作. 列表是用中括号 [ ] 表示. 元组是用小括号 ( ) 表示. dir() 把传入的 ...
- 配置Django+mysql+pydev(x64)
mysqldb需要安装64位的(http://ishare.iask.sina.com.cn/f/21839771.html),否则出现 import _mysql ImportError: DLL ...
- 前端跳转处理--房天下的访问页面部分ip自动跳转到登录页面的解决办法(xjl456852原创)
朋友说自己在访问房天下的页面时,他们页面进行了跳转,跳转到登录页面,说是前端跳转.让我也看看,我看我的机器没有进行跳转. 后来就发现有的机器在访问页面会自动跳转到登录页面.有的不会进行跳转. 比如访问 ...
- 添物不花钱学JavaEE(基础篇)-综述
JavaEE由一堆基础标准组成.JavaEE开发一般需要如下工具和掌握如下内容: Java环境 Eclipse或其他开发工具 Tomcat容器或类似软件 Jsp/Servlet/Web/JDBC的掌握 ...