Docker容器虚拟化平台部署

Docker概述

1
2
1) Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。
2)Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。

LXC概述

1
2
1)LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
2)LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。

Docker官网

1
2
3
官网:				https://www.docker.com/
安装文章: https://docs.docker.com/install/linux/docker-ce/centos/
下载地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

Docker架构

iSN2q0.png

工作流程:

服务器A上运行docker Engine 服务,在docker Engine上启动很多容器container,从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。这样一个容器的实例就运行起来了。最后,通过Docker client 对docker 容器虚拟化平台进行控制。

Docker Hub概述

Docker Hub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过Docker Hub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。

地址:

1
https://hub.docker.com/

Docker核心技术

1
2
1)Namespace:实现Container的进程、网络、消息、文件系统和主机名的隔离。
2)Cgroup:实现对资源的配额和度量。比如指定实例使用的cpu个数,内存大小等等

Docker特性

1
2
3
4
5
6
1)文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
2)资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
3)网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
4)日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
5)变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
6)交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

Docker局限性

1
2
3
4
1)Docker用于应用程序时是最有用的,但并不包含数据。
2)日志,跟踪和数据库等通常应放在Docker容器外。
3)一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,ipsan,MFS等。
4)一句话:docker只用于计算,存储交给别人。

一、部署Docker容器虚拟化平台

1、卸载旧版本(如果有)
1
2
3
4
yum -y remove docker
yum -y remove docker-common
yum -y remove docker-selinux
yum -y remove docker-engine
2、开启路由转发功能,否则容器中的实例无法上网
1
echo 1 > /proc/sys/net/ipv4/ip_forward
3、rpm安装(也可以yum安装,配置好源就行)
1
yum -y install /a01/apps/apps_src/docker-ce-17.09.1.ce-1.el7.centos.x86_64.rpm
4、启动Docker
1
systemctl start docker
5、开机自启
1
systemctl enable docker
6、如果要升级,如下

下载新的软件包文件,然后使用yum -y upgrade+包路径,而不是yum -y install

7、docker的镜像记忆一些数据都是在/var/lib/docker/目录下
1
2
3
4
5
6
7
8
9
10
11
12
du -sh /var/lib/docker/*

16K /var/lib/docker/builder
0 /var/lib/docker/containers
4.0K /var/lib/docker/image
32K /var/lib/docker/network
0 /var/lib/docker/overlay
0 /var/lib/docker/plugins
0 /var/lib/docker/swarm
0 /var/lib/docker/tmp
0 /var/lib/docker/trust
24K /var/lib/docker/volumes

二、Docker基本使用方法

1、查看Docker版本信息
1
docker version

iSNfaT.png

2、查看镜像和容器数等信息
1
docker info

iSNhIU.png

3、搜索images
1
docker search nginx

iSN5iF.png

说明:

1
2
3
4
NAME			##名字
DESCRIPTION ##描述
STARS ##受欢迎程度
OFFICIAL ##是否为官方提供,如果是[OK],说明是官方的,可以放心使用
4、images的下载,导入,导出、删除
方法一:从公网Docker Hub拉取(下载)images,使用push命令
1
docker pull nginx

iSNIG4.png

方法二:如果之前别的机器有下载好的images,直接导入images即可

先在别的机器上查看现在系统有哪些镜像

1
docker images

iSNoRJ.png

导出该镜像

1
docker save nginx > /a01/apps/docker/images/nginx.tar.gz

将上边导出的镜像上传到现在的服务器上,然后就可以导入了

1
docker load -i /a01/apps/docker/images/nginx.tar.gz

删除镜像

1
docker rmi 7b300fc04099
1
2
3
4
5
6
7
8
Untagged: centos:httpd
Deleted: sha256:7b300fc040997b8d117059d7a185412dc5f2b7ae306d0767fbee48c6718f4669
Deleted: sha256:f1eb27389c5e172df6b9dfbb95e709e6ff28e26568347f0d6fc701fc596345df
Deleted: sha256:335bfd91dd18f666e94f6cec464c09602bdea9d30d15ead36705d1605ac388d2
Deleted: sha256:e7774fee9781f66df4154b81a89bb6ca729c6055273830606dd40df975fcc8a2
Deleted: sha256:9c2b043e399769805e44d836b013c57f353561a44eae840ea77b623942dc3b53
Deleted: sha256:d8b33a1ae510706ee9313b10e270a04ea066a91802c998a0e053b46ea4a42091
Deleted: sha256:04e1c26ba7ab4660ce347c43f4d3f17fd6c37895368b7d18fa4b1ca7b868a4ca
5、生成一个容器
1
2
[root@test01centos7 ~]# docker run -i -t nginx /bin/bash
root@7be60754adce:/#
1
2
3
-i			##以交互模式运行容器,通常与-t同时使用
-t ##为容器重新分配一个伪终端,通常与-i同时使用
-d ##后台运行容器,并返回容器ID

退出容器:

1
root@7be60754adce:/# exit
6、查看正在运行的容器
1
docker ps

iSNzJe.png

7、列出所有容器(包含沉睡/退出状态的容器)
1
docker ps -a

iSUkeP.png

8、停止、启动、杀死、重启容器

先查看容器的ID:

1
docker ps -a

iSU1e0.png

停止容器:

1
docker stop 1c0aee11189f

iSUBex.png

启动容器:

1
docker start 1c0aee11189f

iSUDw6.png

杀死容器:

1
docker kill 1c0aee11189f

iSUyFO.png

重启容器:

1
docker restart 1c0aee11189f
9、删除指定容器
1
docker rm 1c0aee11189f
1
Error response from daemon: You cannot remove a running container 1c0aee11189f5fc7888f4ead14ad1b8112ca54297893578b2835a560aa68f196. Stop the container before attempting removal or force remove

解决:可以先把容器关闭,然后再删除,或者加-f强制删除

1
docker rm -f 1c0aee11189f
10、进入容器

在使用-d参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach命令或nsenter工具,docker exec命令等

attach是Docker自带的命令,但是使用该命令有时候并不方便,当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个端口因命令阻塞时,其它窗口也无法执行操作了

三、Docker Images(镜像)的两种制作方法

1
2
1、docker commit	    ##保存容器的当前状态到images后,然后生成对应的images
2、docker build ##使用Dockerfile自动化制作images

方法一:使用docker commit制作

我先下载一个centos的镜像

1
docker pull centos

使用该镜像创建一个容器

1
docker run -it centos /bin/bash

在容器中安装一个nmap软件包

1
yum -y install nmap-ncat

根据容器当前状态做一个images(创建一个安装了nmap-ncat工具的centos镜像)

1
2
docker ps -a
docker commit 1d3563200047 centos:nmap

查看新创建的镜像

1
docker images

方法二:使用docker build制作(Dockerfile自动化制作images)

注:Dockerfile有点像源码编译时./configure后产生的Makefile

下边我们来创建一个基于centos的nginx web服务器镜像

1、在宿主机上创建目录
1
mkdir docker-build
2、创建Dockerfile文件
1
2
3
cd docker-build/
touch Dockerfile
(make自动化编译时需要Makefile文件,自动化创建docker镜像时,需要Dockerfile文件)
3、编辑Dockerfile
1
2
3
4
5
6
7
8
9
10
vim Dockerfile

FROM centos #基于哪个镜像
MAINTAINER nongkaige 1012405802@qq.com #镜像创建者
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum -y install nginx #RUN执行命令
ADD index.html /usr/share/nginx/html/index.html
RUN echo "daemon off;" >>/etc/nginx/nginx.conf
EXPOSE 80
CMD ['/usr/sbin/nginx']
1
2
3
#ADD将文件<src>拷贝到新产生的镜像的文件系统对应的路径<dest>。所有拷贝到新镜像中的文件和文件夹权限为0755,uid和gid为0
#EXPOSE命令向外部开放端口
#CMD命令容器启动后运行的程序
4、创建nginx默认首页文件(在当前目录下创建)
1
echo "hehe" >index.html
5、使用命令build来创建新的image

语法:

1
docker build -t  父镜像名:自己定义的镜像名 Dockerfile文件所在路径
1
docker build -t centos:nginx .

注:一点. 表示当前目录,另外你的当前目录下要有Dockerfile,使用命令build来创建新的image,并命名为centos:httpd

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
Sending build context to Docker daemon  3.072kB
Step 1/8 : FROM centos
---> e934aafc2206
Step 2/8 : MAINTAINER nongkaige 1012405802@qq.com
---> Running in 4ebe9f127844
---> db13dd4597b7
Removing intermediate container 4ebe9f127844
Step 3/8 : RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
---> Running in 8f80f7059dba
Retrieving http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
Preparing... ########################################
Updating / installing...
epel-release-7-11 ########################################
---> c282ed647512
Removing intermediate container 8f80f7059dba
Step 4/8 : RUN yum -y install nginx
---> Running in b6cb1499321c
Loaded plugins: fastestmirror, ovl
…...
……
Complete!
---> da814cdf0387
Removing intermediate container b6cb1499321c
Step 5/8 : ADD index.html /usr/share/nginx/html/index.html
---> 48d4f85b8acb
Step 6/8 : RUN echo "daemon off;" >>/etc/nginx/nginx.conf
---> Running in e890876023a4
---> 1c8018f30eb3
Removing intermediate container e890876023a4
Step 7/8 : EXPOSE 80
---> Running in 860e3dd400e2
---> e3104297b4bd
Removing intermediate container 860e3dd400e2
Step 8/8 : CMD ['/usr/sbin/nginx']
---> Running in f4f5cc63efb5
---> f69ef33fc5b2
Removing intermediate container f4f5cc63efb5
Successfully built f69ef33fc5b2
Successfully tagged centos:nginx
6、查看images列表

iSU2SH.png

四、容器的端口映射

下面来执行这么一个操作,使用刚刚创建的镜像启动一个容器,把容器中的80端口映射到物理机上的83端口,并启动nginx服务

1
docker run -d -p 83:80 centos:nginx /usr/sbin/nginx

查看启动中的容器

1
docker -ps

iSUW6A.png

在宿主机上查看83端口是否已经监听

iSU4mt.png

开启宿主机防火墙83端口

1
2
firewall-cmd --add-port=80/tcp --permanent
systemctl reload firewalld

使用浏览器访问宿主机IP的83端口,看看是否能访问到我们启动的容器的nginx网站内容

iSU50P.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%