Docker容器——Docker的介绍与部署 Posted 2022-02-22 软件测试自动化测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker容器——Docker的介绍与部署相关的知识,希望对你有一定的参考价值。
(1).Docker概述
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心运行。最重要的是,不依赖于任何语言、框架或包装系统。Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
沙箱也叫沙盒,英文名sandbox。在计算机领域指一种虚拟技术,且多用于计算机安全技术,是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。LXC在资源管理方面依赖于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。
Namespace(命名空间)——实现Container的进程、网络、消息、文件系统和主机名的隔离。
Cgroup——实现对资源的配额和度量。注意:Cgroup的配额,可以指定实例使用的cpu个数,内存大小等。
官网:Empowering App Development for Developers | Docker
(2).Docker容器技术与虚拟机对比
下图是虚拟机的结构,从下到上分别是:
Infrastructure(基础设施),它可以是个人电脑、数据中心的服务器或者云主机;
Host Operating System(主机操作系统),在Infrastructure(基础设施)之上,运行的可能是MacOS、Windows或者某个Linux发行版;
Hypervisor(虚拟机管理系统),利用Hypervisor(虚拟机管理系统)可以在主操作系统之上运行多个不同的从操作系统,例如:类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM,类型2的Hypervisor有VirtualBox和VMWare;
Guest Operating System(虚拟操作系统),假设你需要运行3个相互隔离的应用,则需要使用Hypervisor(虚拟机管理系统)启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存;
BINS/LIBS是各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库;
APP是应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。
下图是Docker容器的结构,从下到上分别是:
Infrastructure(基础设施),它可以是个人电脑、数据中心的服务器或者云主机;
Host Operating System(主机操作系统),所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker;
Docker Daemon(Docker守护进程),Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器;
BINS/LIBS是各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的;
APP是应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。
相同点:Docker容器技术和虚拟机技术都是虚拟化技术
不同点:1.启动时间:Docker容器秒级启动,虚拟机分钟级启动;2.占用空间:Docker容器镜像大小通常以M为单位,虚拟机以G为单位;3.性能:Docker容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,性能基本接近物理机。虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好;4.安全性:Docker容器由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,Docker容器具有一定权限访问宿主机内核,存在一定安全隐患;5.使用要求:虚拟机基于硬件的虚拟化,需要硬件CPU虚拟化技术支持。Docker容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。
(3).Docker运行流程
服务器上运行Docker Engine服务,该服务上存在许多容器Container。从外网DockerHub上下载系统镜像image,放到容器Container中运行。最后通过客户端Docker Client对Docker容器虚拟化平台进行控制。
DockerHub是docker官方的镜像存储站点,其中提供了徆多常用的镜像供用户下载, 如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要 注册一个账号,在网站上创建一个 docker 仓库。
(4).Dorcker的特点和优缺点
特点:1、文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。2、资源隔离:系统资源,像 CPU 和内存等可以分配到不同的容器中,使用 cgroup。3、网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。4、日志记录:Docker 将会收集和记录每个进程容器的标准流stdout/stderr/stdin,用于实时检索或批量检索。5、变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。6、交互式shell:Docker可以分配一个虚拟终端幵关联到任何容器的标准输入上,例如运行一个一次性交互shell。
优点:1、启动快,体积小。2、可移植性高,支持Linux/Unix/Windows/Mac。3、隔离程序,避免开发和生产环境之间的摩擦,降低成本。4、CPU无需支持虚拟化,对硬件要求低。5、快速搭建开发环境,提高开发效率。6、谷歌、微软、亚马逊、IBM等都支持Docker。
缺点:Docker必须运行在64位机器上,如果是Linux系统内核必须3.8以上支持各种存储格式,还需要内核支持Cgroup和Namespace。另外Docker不适合存储大量数据,日志、跟踪和数据库(例如oracle)通常放在Docker容器之外,通过外部挂载的方式使用,例如使用NFS、ipsan、MFS等时,使用-v选项映射磁盘分区。
(5).部署Docker容器虚拟化平台
1)安装Docker
配置阿里云base源和epel源,安装Docker环境依赖
1
2
3
4
5
6
7
8
9
10
[root@youxi1 ~]# cd /etc/yum.repos.d/
[root@youxi1 yum.repos.d]# mkdir back
[root@youxi1 yum.repos.d]# mv *.repo back/
//备份源
[root@youxi1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http:
//mirrors.aliyun.com/repo/Centos-7.repo
[root@youxi1 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http:
//mirrors.aliyun.com/repo/epel-7.repo
[root@youxi1 yum.repos.d]# yum clean all
//清空yum缓存
[root@youxi1 yum.repos.d]# yum list
//生成缓存
[root@youxi1 yum.repos.d]# cd
[root@youxi1 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
//安装依赖
[root@youxi1 ~]# yum-config-manager --add-repo http:
//mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //配置阿里云的Docker的yum源
安装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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[root@youxi1 ~]# yum -y install docker-ce docker-ce-cli containerd.io
[root@youxi1 ~]# systemctl start docker
[root@youxi1 ~]# systemctl enable docker
Created symlink
from
/etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@youxi1 ~]# docker version
//显示Docker版本信息
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:28:55 2019
OS/Arch: linux/amd64
Experimental:
false
Server: Docker Engine - Community
Engine:
Version: 19.03.2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:27:34 2019
OS/Arch: linux/amd64
Experimental:
false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
[root@youxi1 ~]# docker info
//查看Docker信息,包括镜像和容器数
Client:
Debug Mode:
false
Server:
Containers: 0
//容器
Running: 0
//运行
Paused: 0
//暂停
Stopped: 0
//关闭
Images: 0
//镜像
Server Version: 19.03.2
//版本
Storage Driver: overlay2
//存储启动程序
Backing Filesystem: xfs
//备份文件系统格式
Supports d_type:
true
Native Overlay Diff:
true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan
null
overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile:
default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.936GiB
Name: youxi1
ID: FR4U:DHB6:QGST:B3SB:NHKD:GDBX:PZL3:2RSX:SUMM:WFZO:KPPU:W423
Docker Root Dir: /
var
/lib/docker
//Docker的主目录
Debug Mode:
false
Registry: https:
//index.docker.io/v1/
Labels:
Experimental:
false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled:
false
说明:Docker最早的版本名是docker和docker-engine,现在的名字是docker-ce(开源)和docker-ee(闭源)。并且2017年年初,docker开源项目改名为moby,所以其实有三个版本:moby是源代码;docker-ce和docker-ee是容器产品,rpm包。
2)下载Docker镜像
从DockerHub上搜索镜像,第一列Docker镜像名字(下载根据该列),第二列描述,第三列欢迎程度,第四列是否是官方提供(一般下载官方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
[root@youxi1 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5556 [OK]
ansible/centos7-ansible Ansible
on
Centos7 123 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.6.1810 x86… 112 [OK]
consol/centos-xfce-vnc Centos container with
"headless"
VNC session… 99 [OK]
centos/mysql -57-centos7 MySQL 5.7 SQL database server 62
imagine10255/centos6-lnmp-php 56 centos6-lnmp-php56 57 [OK]
tutum/centos Simple CentOS docker image with SSH access 45
centos/postgresql-96-centos7 PostgreSQL
is
an advanced Object-Relational … 39
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image
for
GPDB development. Tag names… 10
guyton/centos6 From official centos6 container with full up… 9 [OK]
nathonfowlie/centos-jre Latest CentOS image with the JRE pre-install… 8 [OK]
drecom/centos-ruby centos ruby 7 [OK]
pivotaldata/centos Base centos, freshened up a little with a Do… 3
darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 2
pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 2
miko2u/centos6 CentOS6 日本語環境 2 [OK]
blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
mcnaughton/centos-
base
centos
base
image 1 [OK]
indigo/centos-maven Vanilla CentOS 7 with Oracle Java Developmen… 1 [OK]
pivotaldata/centos6.8-dev CentosOS 6.8 image
for
GPDB development 0
smartentry/centos centos with smartentry 0 [OK]
pivotaldata/centos7-dev CentosOS 7 image
for
GPDB development 0
fortinj66/centos7-s2i-nodejs based off of ryanj/centos7-s2i-nodejs. Bigg… 0
方法一 :由于Docker镜像都在国外的DockerHub网站上,所以下载会非常慢,最好使用加速器加速。例如说阿里云服务器提供的免费加速器地址。登录阿里云账号,在左侧的菜单中有产品和服务选项,在该选项中找到容器镜像服务,点击后面的星星即可添加到菜单中。然后点击容器镜像服务,进入下一个界面。
第一次进入容器镜像服务页面,会要求设置密码。设置完成后选择左侧菜单栏中的镜像中心-->镜像加速器-->加速器地址。我的加速器地址是https://8mkqrctt.mirror.aliyuncs.com
当然加速器地址也非要使用阿里云的,也可以使用网易云的。
加速器地址可以用于两个地方,二选一即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//可以用于/etc/docker/daemon.json文件
[root@youxi1 ~]# vim /etc/docker/daemon.json
"registry-mirrors"
: [
"https://8mkqrctt.mirror.aliyuncs.com"
]
[root@youxi1 ~]# systemctl restart docker
//也可以用于修改docker服务
[root@youxi1 ~]# vim /usr/lib/systemd/system/docker.service
//修改第14行
ExecStart=/usr/bin/dockerd -H fd:
// --containerd=/run/containerd/containerd.sock
--registry-mirror=https:
//8mkqrctt.mirror.aliyuncs.com
[root@youxi1 ~]# systemctl daemon-reload
[root@youxi1 ~]# systemctl restart docker
配置好加速器地址后,我们就可以拉取Docker镜像了
1
2
3
4
5
6
7
8
9
10
[root@youxi1 ~]# docker pull centos
//拉取镜像
Using
default
tag: latest
latest: Pulling
from
library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image
for
centos:latest
docker.io/library/centos:latest
[root@youxi1 ~]# docker images
//查看已有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67fa590cfc1c 3 weeks ago 202MB
注意:docker镜像有两种识别方式,[REPOSITORY(库)]:[TAG(标签)]以及IMAGE ID(镜像ID)。如果下载了一个相同的镜像或[REPOSITORY(库)]:[TAG(标签)]相同的镜像,虽然还可以通过镜像ID来调用,但旧的镜像REPOSITORY(库)和TAG(标签)会变为<None>,所以下载和导入前请先确认好防止造成不必要的麻烦。
方法二:将之前下载好的或从其他服务器上导出的镜像导入
1
[root@youxi1 ~]# docker load -i docker.io-centos-lastest-image.tar
docker load -i [镜像文件] 导入镜像
方法三:从其他网站下载镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@youxi1 ~]# docker pull hub.c.163.com/library/tomcat:latest
latest: Pulling
from
library/tomcat
[DEPRECATION NOTICE] registry v2 schema1 support will be removed
in
an upcoming release. Please contact admins of the hub.c.163.com registry NOW to avoid future disruption.
9af7279b9dbd: Pull complete
31816c948f2f: Pull complete
c59a1cdf83d3: Pull complete
232c7a75d568: Pull complete
de412d312979: Pull complete
80315ba34693: Pull complete
5d3f97bd90e8: Pull complete
dc8dc63f6baa: Pull complete
f6c6e2d67f03: Pull complete
9123b340aa92: Pull complete
76abaea2279d: Pull complete
4476602e3346: Pull complete
12e1fda011bd: Pull complete
Digest: sha256:db1a8ca2fe44449d265e5505f300be6f34fc63211a5506400a0a8c24653af91f
Status: Downloaded newer image
for
hub.c.163.com/library/tomcat:latest
hub.c.163.com/library/tomcat:latest
[root@youxi1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67fa590cfc1c 3 weeks ago 202MB
hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB
3)开启网络转发功能
该功能是默认开启的,如果没有开启可以手动设置一下
1
2
3
4
5
6
7
[root@youxi1 ~]# cat /proc/sys/net/ipv4/ip_forward
1
//如没有开启手动进行如下设置
[root@youxi1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@youxi1 ~]# sysctl -p
//使配置生效
net.ipv4.ip_forward = 1
该功能一定要开启,否则Docker实例会启动失效
4)最后启动
启动并测试网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@youxi1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@youxi1 ~]# docker run -it centos:latest /bin/bash
[root@3ecc9bafd429 /]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes
from
180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=127 time=8.78 ms
64 bytes
from
180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=127 time=8.33 ms
64 bytes
from
180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=127 time=8.79 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 8.334/8.637/8.792/0.240 ms
[root@3ecc9bafd429 /]# exit
//退出使用exit
exit
注意:前期测试建议关闭防火墙。
如果想要查看正在运行的docker实例,可以使用docker ps命令
1
2
3
4
5
6
7
[root@youxi1 ~]# docker run -it centos:latest /bin/bash
//启动一个docker实例
[root@9a81af9b4134 /]#
//另外打开一个连接窗口
[root@youxi1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a81af9b4134 centos:latest
"/bin/bash"
8 seconds ago Up 7 seconds pensive_dijkstra
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号953306497(备注“csdn111”) 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
以上是关于Docker容器——Docker的介绍与部署的主要内容,如果未能解决你的问题,请参考以下文章
Docker入门与应用系列介绍和部署
Docker-容器介绍与配置镜像分层部署nginx优化镜像
docker与docker-compose介绍,对比与使用
Docker 快速入门- 情况介绍和安装
Docker及常用软件的安装部署
Docker系列- 原理与基本操作