一、Docker技术介绍

docker是一个基于LXC技术之上构建的container容器引擎,通过内核虚拟化技术(namespace及cgroups)来提供容器的资源隔离与安全保障,KVM是通过硬件实现的虚拟化技术,它是通过系统来实现资源隔离与安全保障,占用系统资源比较小

官方网站:https://www.docker.com/

Docker组成:客户端与服务端

Docker组件:

镜像

容器

仓库

二、Docker与Openstack对比



Docker与Openstack对比



三、Docker 的优点

1)简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,在Docker容器的处理下,只需要数秒就能完成。

2)多样性:Docker 帮你打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3)节省开支:云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

四、Docker的应用场景

1)需要简化配置(测试环境与生产环境不同)

2)代码管理(代码上传与下载)

3)提升开发效率(开发环境配置的安装和openstack kvm相同)

4)应用隔离

5)服务器整合

6)调试

7)多终端、多租户

8)需要快速部署与环境一致性

五、Docker安装与配置

安装Docker服务

root@centos7 ~]# yum install docker -y

[root@centos7 ~]# systemctl start docker

下载镜像文件

[root@centos7 ~]# docker pull centos:latest

Trying to pull repository docker.io/library/centos ...

centos7: Pulling from docker.io/library/centos

93857f76ae30: Pull complete

Digest:sha256:4eda692c08e0a065ae91d74e82fff4af3da307b4341ad61fa61771cc4659af60

[root@centos7 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZ

Edocker.io/centos centos7 a8493f5f50ff 3 days ago 192.5 MB

删除镜像

[root@centos7 ~]# docker rmi a8493f5f50ff ##容器ID

六、Docker容器创建与管理

1)创建容器

方法一:

[root@centos7 ~]# docker run centos /bin/echo "nihao" ##创建容器nihao

[root@centos7 ~]# docker ps -a ##查看所有容器CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3c113f9a4f1b centos "/bin/echo nihao" 43 seconds ago Exited (0) 41 seconds ago boring_liskov

这里没有指定容器名称,自动命名,状态是自动退出

方法二:创建一个自定义名称的容器

[root@centos7 ~]# docker run --name mgg -t -i centos /bin/bash

#名称分配伪终端 -i 处于打开状态

[root@2db7f1389dbd /]# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 22:46 ? 00:00:00 /bin/bash

root 13 1 0 22:49 ? 00:00:00 ps -ef

[root@centos7 ~]# docker ps

CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES2db7f1389dbd centos "/bin/bash" 4 minutes ago Up 4 minutes mgg

docker ps -a是显示所有容器包括没有运行的(同virsh list --all)

2)进入、退出、启动容器

[root@2db7f1389dbd /]# exit##退出容器

exit

[root@centos7 ~]# docker start 2db7f1389dbd##启动容器

2db7f1389dbd

[root@centos7 ~]# docker attach 2db7f1389dbd##进入容器(必须是启动状态下

[root@2db7f1389dbd /]# hostname

2db7f1389dbd

这种进入方式,退出后容器就进入Down状态,如下

[root@2db7f1389dbd /]# exit

exit

[root@centos7 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3)使用nsenter命令进入容器

[root@centos7 ~]# nsenter --help

Usage:

nsenter [options] [...]

Run a program with namespaces of other processes.

Options:

-t, --target target process to get namespaces from

-m, --mount[=] enter mount namespace

-u, --uts[=] enter UTS namespace (hostname etc)

-i, --ipc[=] enter System V IPC namespace

-n, --net[=] enter network namespace

-p, --pid[=] enter pid namespace

-U, --user[=] enter user namespace

-S, --setuid set uid in entered namespace

-G, --setgid set gid in entered namespace

--preserve-credentials do not touch uids or gids

-r, --root[=

-w, --wd[=

-F, --no-fork do not fork before exec'ing

-Z, --follow-context set SELinux context according to --target PID

-h, --help display this help and exit

-V, --version output version information and exit

获取容器的PID

[root@centos7 ~]# docker inspect --format "{{.State.Pid}}" 2db7f1389dbd

4580

[root@centos7 ~]# nsenter -t 4580 -u -i -n -p

[root@2db7f1389dbd ~]# hostname

2db7f1389dbd

[root@2db7f1389dbd ~]# exitlogout

[root@centos7 ~]# docker ps

CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES2db7f1389dbd centos "/bin/bash" 22 minutes ago Up 7 minutes mgg

4)删除容器

[root@centos7 ~]# docker ps -a

CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES

2db7f1389dbd centos "/bin/bash" 31 minutes ago Up 16 minutes mgg

3c113f9a4f1b centos "/bin/echo nihao" 38 minutes ago Exited (0) 38 minutes ago boring_liskov

[root@centos7 ~]# docker rm 3c113f9a4f1b ##接名称也可以,删除一个停止的容器

3c113f9a4f1b

[root@centos7 ~]# docker rm -f 3c113f9a4f1b ##删除一个正在运行的容器

[root@centos7 ~]# docker ps -a

CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES

2db7f1389dbd centos "/bin/bash" 31 minutes ago Up 16 minutes mgg

[root@centos7 ~]# docker run --rm centos /bin/echo "hello" ##创建时自动删除,用于测试

[root@centos7 ~]#docker --kill $(docker ps -a -q) ##删除正在运行的容器