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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
[root@chy ~]
# 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
[root@chy ~]
# yum install -y docker-ce //用yum源的版本安装docker,其实本机也是有的,但是本机的yum自带的源版本比较低,我们需要最新的稳定版来安装
[root@chy ~]
# systemctl start docker //启动docker
[root@chy ~]
# 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
[root@chy ~]
# 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
[root@chy ~]
# 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加速器
|
1
2
3
4
5
6
7
|
[root@chy ~]
# vi /etc/docker/daemon.json
{
"registry-mirrors"
: [
"https://dhq9bx4f.mirror.aliyuncs.com"
]
}
说明:这个url为加速器地址,我们也可以直接到阿里云去申请也可以拿来这个使用。
[root@chy ~]
# systemctl restart docker //加速配置完成后需要重启
[root@chy ~]
# docker pull centos //从docker.com获取centos镜像(这时用了加速器的速度会很快)
|
- docker镜像管理的基本操作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@chy ~]
# docker images //查看本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest d123f4e55e12 9 days ago 197MB
[root@chy ~]
# docker search jumpserver//搜索镜像,其中jumpserver是关键词
[root@chy ~]
# docker tag centos chylinux//为镜像设置标签chylinux
[root@chy ~]
# 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的一样,类似于更换一个新名字再次展现出来
[root@chy ~]
# docker tag centos chylinux:chy //或者一步到位:(直接修改容器为chylinux,tag为chy)
[root@chy ~]
# 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
[root@chy ~]
# docker run -itd centos //启动centos的容器(-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面)
6605c26e980579af355bd38cb1e45fa61d44e0a472f649be2e7bf8a322a1ac68
[root@chy ~]
# 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
[root@chy ~]
# docker rmi chylinux //用来删除指定镜像其中后面的参数可以是tag,如果是tag时,实际上是删除该tag(这里需要注意一下如果删除时用的默认tag latest时用如上的方式可以删除但是如果删除时用的不是默认的tag必须要加tag的名称,如下所示的删除例子)。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除
Untagged: chylinux:latest
[root@chy ~]
# docker rmi chylinux:chy
Untagged: chylinux:chy
|
4 通过容器创建镜像
- 刚刚只是说到了如何删除修改一些基础的操作,一旦镜像搭建好了,如何才能通过命令行进入系统呢?
|
1
|
[root@chy ~]
# docker exec -it 6605c2 bash//其中6605c2为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端
|
- 进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
|
1
2
3
4
5
6
7
8
9
10
|
[root@6605c26e9805 /]
# yum install -y net-tools//在镜像中安装net-tools
[root@6605c26e9805 /]
# 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
|
- 把我们刚刚制作的镜像保存成一个新的镜像,下次我们再次需要的时候就可以直接使用(不需要再次安装我们已经安装过的服务!)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@chy ~]
# docker commit -m "install net-tools" -a "chenhaiying" 6605c26e9805 centos_with_net //这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息 6605c26e9805这一串为容器id,再后面为新镜像的名字
sha256:87dde0ff7187ea314deed8b1b934c0d3e4a75e24ad2a94ee9bdcf11acd0e8b41
[root@chy ~]
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_with_net latest 87dde0ff7187 17 seconds ago 277MB
centos latest d123f4e55e12 9 days ago 197MB
[root@chy ~]
# docker run -itd centos_with_net bash //运行docker
8b1dc20b6c75c85e29145e667ff96ccf93cdf9587d4584872b3c072392c1796d
[root@chy ~]
# 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
|



