概述:
Docker简介:
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在原理和应用上和VM的差别还是很大的.并且docker的专业叫法是应用容器(Application Container)。
Docker的优点:
1.多 可以通过镜像一键部署多个应用,组成完整的架构环境。
2.快 docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间。
3.好 docker容器可以在几乎所有的环境中运行,物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。docker容器之间是隔离的,如果容器出现问题,可以通过镜像快速生成全新的容器保证正常访问。
4.省 在容器中不用搭建系统,只需要基本的运行环境就可以了,这样就省去了系统环境硬件的消耗。docker容器不需要 hypervisor ,他是内核级的虚拟化。
那么既然容器和VM这么类似为啥不用VM?docker容器相对于VM还是有很多优点的:
1.启动速度快,容器通常在一秒内可以启动.而VM要很久.
2.资源利用率高,一台普通服务器可以跑上千个容器,而跑VM就...
3.性能开销小,VM需要额外的CPU和内存来完成OS的功能,这一部分占据了额外的资源.
容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
Docker 镜像:
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器。每一个镜像由一系列的层 (layers) 组成。Docker 使用UnionFS(联合文件系统)来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
每个docker都有很多层次构成,docker使用 union file systems 将这些不同的层结合到一个image 中去。
例如:centos镜像中安装nginx,就成了nginx镜像”,其实在此时Docker镜像的层级概念就体现出来了。底层一个centos操作系统镜像,上面叠加一个ngnx层,就完成了一个nginx镜像的构建。层级概念就不难理解,此时我们一般centos操作系统镜像称为nginx镜像层的父镜像。
docker 仓库:
docker 仓库即所谓registry,实现了镜像的管理、分发,同时还包括用户的认证。dockerregistry仓库是一个无状态的、高可靠的服务器应用程序,
用来存储docker镜像。docker.io为docker官方的仓库,默认所有的pull均是从官方仓库拉取镜像。
公司内部平台应用如果使用docker镜像,则必须搭建私有仓库,使用docker的官方镜像Registry的最新版本2(目前是2.5),可以很方便的搭建私有仓库。
安装包:
注意:此安装包仅针对于7.3的镜像
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
1.搭建2048游戏
##安装docker及其依赖性
注意:我这里安装的docker版本的依赖性是针对7.3的镜像 docker版本越高对镜像的要求就越高
[root@foundation52 Desktop]# yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm -y
##开启docker
[root@foundation52 Desktop]# systemctl start docker
##显示Docker系统信息,包括镜像和容器数等
[root@foundation52 Desktop]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.745 GiB
Name: foundation52.ilt.example.com
ID: RMDI:RWAF:LM2Q:2JIQ:UI47:CH5F:NLVV:GYHV:FR5H:S43Q:5ME7:DELH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
##查看docker版本
[root@foundation52 Desktop]# docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Fri Mar 24 00:36:45 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Fri Mar 24 00:36:45 2017
OS/Arch: linux/amd64
Experimental: false
##下载镜像
lftp 172.25.254.251:/pub/docs/docker> get game2048.tar
57176576 bytes transferred in 112 seconds (497.7K/s)
##列出本地已有的所有镜像
[root@foundation52 Desktop]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@foundation52 Desktop]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
##将下载好的镜像导入到容器中
[root@foundation52 Desktop]# docker load -i game2048.tar
011b303988d2: Loading layer 5.05 MB/5.05 MB
36e9226e74f8: Loading layer 51.46 MB/51.46 MB
192e9fad2abc: Loading layer 3.584 kB/3.584 kB
6d7504772167: Loading layer 4.608 kB/4.608 kB
88fca8ae768a: Loading layer 629.8 kB/629.8 kB
Loaded image: game2048:latest
##查看到刚导入的镜像
[root@foundation52 Desktop]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 20 months ago 55.5 MB
##启动(运行)容器 -d 表示打入后台 --name 取名字(名字可任意取)
## run=create+start
[root@foundation52 Desktop]# docker run -d --name vm1 game2048
313dd4ef491c04c0561e89e50ab7538251b4f4eb1edd175b4f92a100ae043a18
##查看所有容器
[root@foundation52 Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
313dd4ef491c game2048 "/bin/sh -c 'sed -..." 7 minutes ago Up 7 minutes 80/tcp, 443/tcp vm1
##查看正在运行的容器
[root@foundation52 Desktop]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
313dd4ef491c game2048 "/bin/sh -c 'sed -..." 7 minutes ago Up 7 minutes 80/tcp, 443/tcp vm1
##查看到多出了一个docker0
[root@foundation52 Desktop]# ip addr
9: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:b4:84:27:f3 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:b4ff:fe84:27f3/64 scope link
valid_lft forever preferred_lft forever
##查看策略
[root@foundation52 Desktop]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination