doker介绍与操作Ⅰ

1 Docker简介

docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率。其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率。几乎所有的大企业都在使用docker,所以我们没有理由不去了解它,不去学习它。https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html (感觉还不错的docker电子书)

- 官网 www.docker.com

- 容器虚拟化,比传统的虚拟化轻量

- 使用go语言开发,基于apache2.0协议。

- 开源软件,项目代码在github维护。github  https://github.com/docker/docker.github.io

- docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式。

- https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html

- docker和传统的虚拟化比较

1. docker虚拟化

2. 传统的虚拟化

也就是说,让我们创建一个新的虚拟机的时候,如果使用Vmware,首先我们需要分配一定的硬件资源去运行虚拟出来的系统,如果一台电脑例如我的win7 配置一般,也就顶多可以跑10个centos,但是如果使用Docker就可以创建成千上百个centos系统,且每个系统都是独立的,隔离开来的,硬件资源也是隔离开来的。这就是根本区别!

- docker优势

1. 启动非常快,秒级实现

2. 资源利用率高,一台高配置服务器可以跑上千个docker容器

3. 更快的交付和部署,一次创建和配置后,可以在任意地方运行

4. 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率

5. 易迁移,平台依赖性不强

- Docker核心概念

1. 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。

2. 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。

3. 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)

2安装Docker

[[email protected] ~]#  curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo //下载docker的yum源
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1802  100  1802    0     0    772      0  0:00:02  0:00:02 --:--:--   772
[[email protected] ~]# yum install -y docker-ce //用yum源的版本安装docker,其实本机也是有的,但是本机的yum自带的源版本比较低,我们需要最新的稳定版来安装
[[email protected] ~]# systemctl start docker //启动docker
[[email protected] ~]# ps aux |grep docker
root      20090  0.4  1.7 428548 26808 ?        Ssl  01:39   0:00 /usr/bin/dockerd
root      20093  0.0  0.5 264032  7776 ?        Ssl  01:39   0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docke-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root      20414  0.0  0.0 112664   976 pts/0    R+   01:39   0:00 grep --color=auto docker
[[email protected] ~]# docker version //查看版本
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:23 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:49 2017
 OS/Arch:      linux/amd64
 Experimental: false
[[email protected] ~]# iptables -nvL
Chain INPUT (policy ACCEPT 150 packets, 10819 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0          
当我们配置完毕后,会自动帮我们创建如上的一些IPtables 规则,其目的就是不影响docker虚拟机的正常运行。(每次重启docker服务会自动把iptables规则添加上,所以不用担心删除)

3 镜像管理

- docker 由于在国外,国内限制比较大,所以我们一般会使用阿里云的加速器去下载一个镜像

- 配置docker加速器

[[email protected] ~]# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
说明:这个url为加速器地址,我们也可以直接到阿里云去申请也可以拿来这个使用。
[[email protected] ~]# systemctl restart docker  //加速配置完成后需要重启
[[email protected] ~]# docker pull centos //从docker.com获取centos镜像(这时用了加速器的速度会很快)

- docker镜像管理的基本操作

[[email protected] ~]# docker images //查看本地镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
[[email protected] ~]# docker search jumpserver//搜索镜像,其中jumpserver是关键词
[[email protected] ~]# docker tag centos chylinux//为镜像设置标签chylinux
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
查看设置的标签会发现改行的image id和centos的一样,类似于更换一个新名字再次展现出来
[[email protected] ~]# docker tag centos chylinux:chy //或者一步到位:(直接修改容器为chylinux,tag为chy)
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            chy                 d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
[[email protected] ~]# docker run -itd centos //启动centos的容器(-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面)
6605c26e980579af355bd38cb1e45fa61d44e0a472f649be2e7bf8a322a1ac68
[[email protected] ~]# docker ps -a //查看运行的容器,加上-a选项后可以查看所有容器,包括未运行的(不加-a是查看启动的容器)
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
6605c26e9805        centos              "/bin/bash"         About a minute ago   Up About a minute                       sad_brahmagupta
[[email protected] ~]# docker rmi chylinux //用来删除指定镜像其中后面的参数可以是tag,如果是tag时,实际上是删除该tag(这里需要注意一下如果删除时用的默认tag latest时用如上的方式可以删除但是如果删除时用的不是默认的tag必须要加tag的名称,如下所示的删除例子)。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除
Untagged: chylinux:latest
[[email protected] ~]# docker rmi chylinux:chy 
Untagged: chylinux:chy

4 通过容器创建镜像

- 刚刚只是说到了如何删除修改一些基础的操作,一旦镜像搭建好了,如何才能通过命令行进入系统呢?

[[email protected] ~]# docker exec -it 6605c2 bash//其中6605c2为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端

- 进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像

[[email protected] /]# yum install -y net-tools//在镜像中安装net-tools
[[email protected] /]# ifconfig //查看虚拟ip 而且在外部的虚拟主机我们也是可以看到这个网卡的!
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 3184  bytes 10678749 (10.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2838  bytes 156894 (153.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
退出是ctrl+d

- 把我们刚刚制作的镜像保存成一个新的镜像,下次我们再次需要的时候就可以直接使用(不需要再次安装我们已经安装过的服务!)

[[email protected] ~]# docker commit -m "install net-tools" -a "chenhaiying" 6605c26e9805 centos_with_net //这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息  6605c26e9805这一串为容器id,再后面为新镜像的名字
sha256:87dde0ff7187ea314deed8b1b934c0d3e4a75e24ad2a94ee9bdcf11acd0e8b41
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              87dde0ff7187        17 seconds ago      277MB
centos              latest              d123f4e55e12        9 days ago          197MB
[[email protected] ~]# docker run -itd centos_with_net bash //运行docker
8b1dc20b6c75c85e29145e667ff96ccf93cdf9587d4584872b3c072392c1796d
[[email protected] ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8b1dc20b6c75        centos_with_net     "bash"              3 seconds ago       Up 1 second                             compassionate_mestorf
6605c26e9805        centos              "/bin/bash"         28 minutes ago      Up 28 minutes                           sad_brahmagupta

希望看过的童鞋多多指教,谢谢!

时间: 2024-07-30 15:00:04

doker介绍与操作Ⅰ的相关文章

Docker基本介绍和操作

Docker基本介绍和操作 Docker基本介绍 什么是Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护.Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类

以太坊虚拟机介绍2-栈操作指令

上一篇文章对EVM和它的指令集进行了简单介绍,本文将介绍POP指令.PUSHx系列指令.DUPx系列指令.SWAPx系列指令.这些指令只对EVM栈进行单纯的操作,它们的操作码分布如下图所示: POP指令POP指令(操作码0x50)从栈顶弹出一个元素.下面是POP指令的操作示意图(白色表示元素即将发生变动): PUSHx指令PUSH系列指令把紧跟在指令后面的N(1 - 32)字节元素推入栈顶.PUSH系列指令一共有32条,从PUSH1(操作码0x60)一直到PUSH32(操作码0x7A).EVM是

SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

--索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数据表或者视图的字段上,生成索引页,存放于数据库中.--分类:在SQL Server中,根据索引的作用和存储方式的不同,将索引分为聚集索引和非聚集索引两类. 1)聚集索引 :指数据库的物理顺序与被创建索引的字段顺序完全相同.同一个数据表最多只能创建一个聚集索引.默认情况下主键自动被创建为聚集索引.聚集

mysql数据库的基本介绍与操作(第二篇)

1.创建表: 格式: create table 表名( 列名  类型  是否可以为空, 列名  类型  是否可以为空, ) engine=innodb default charset=utf8; 例子: create table t_article (    article_id INT (11) NOT NULL auto_increment,    article_name VARCHAR (200) NOT NULL,    article_author VARCHAR (100) NOT

mysql数据库的基本介绍与操作(第三篇)

最近朋友问了我一个问题:怎样将2000万数据从一个mysql数据库A1的表B实时累加同步到另外一个mysql库A2表B? 这个问题我没遇到过,因此根据自己查看掌握的sql进行了这方面的性能测试,并且积累记录了sql优化的一些基础知识. 前提条件:以上说的库表A1与A2的表结构都一摸一样,两张表的主键为ID,具有自动递增属性. 同步思路很简单,如下: 第一步:创建源库A1与目标库A2的连接,对应的连接分别为源库连接a1conn与目标库连接a2conn. 第二步:通过目标库a2conn查询获取到A2

(数字类型,进制转换,字符串,列表)介绍和操作

数字类型 整型 用途:记录年龄.等级.号码等 定义方式如 age = 18 本质 # age = int(18) 整型只能存一个值而且是不可变类型 int()方法能将字符串转为整型 需要注意的是使用int只能转纯数字的字符串,有小数点也不行 浮点型 用途:记录身高.体重.薪资等 定义方式如 height= 185.1 本质 # height= float(185.1) 浮点型只能存一个值而且是不可变类型 float()方法能将字符串和整型转为浮点型 需要注意的是使用float方法只能转纯数字的字

2019.10.15 MySQL 事务介绍及操作演示

一.数据库事务的概念 事务是一种机制.一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么不都执行. 事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元. 事务适用于多用户同时操作的数据库系统的场景,如银行.保险公司及证券交易系统等等.通过事务的完整性以保证数据的一致性. 二.事务的ACID特点事务具有四个属性:ACID原子性(Atomicity)一致性(Consistency)隔高

数据库的一些简单介绍和操作

databases(数据库) 一个按照一定的组织方式存储数据的容器 数据库分为关系型数据库和非关系型数据库 mysql:关系型数据库 (用在商城.论坛.app等) mongoDB:非关系型数据库(微博等) 下面是mysql的一些操作和说明: sql:操作数据库的命令 操作mysql: sql语句: ①想要使用数据库,就要先开启数据库 进入数据库 :  mysql  -u  -root  -p ②退出数据库:\q ③显示数据库: show databases: ④创建数据库:create data

PDO进行sql报表编制结果集介绍及操作(两)

<span style="font-size:18px;">一个:运行准备好的语句和绑定参数insert try { $pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456"); }catch(PDOException $e){ echo $e->getMessage(); } /* pdo中有两种占位符号 * * ? 參数 --