文章目录
- 前言
- 一、docker简介
- 1.什么是docker
- 2. 什么是容器
- 3.传统的虚拟化技术和容器之间的差别
- 4.容器是如何运行的
- 二、docker环境部署及测试
- 1.环境部署:
- 2.通过镜像运行容器
- 3.拉取镜像
前言
一、docker简介
1.什么是docker
Docker是一个开源的应用容器引擎,是一个轻量级容器技术,是一个应用打包、分发、部署的工具,基于Google公司推出的Go 语言实现,遵从Apache 2.0 协议。
2. 什么是容器
docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器。
容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。
为此,容器利用操作系统 (OS) 虚拟化形式,这里会利用操作系统的功能(在 Linux 内核中,即名称空间和 cgroups 原语)来隔离进程,并控制这些进程有权访问的 CPU、内存和磁盘的数量。
3.传统的虚拟化技术和容器之间的差别
容器:
- 容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
- 为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。
- 容器技术使用了namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。
虚拟机:
- 虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。
- CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源
4.容器是如何运行的
1.4.1 Docker Client
也称为Docker客户端。其实就是Docker提供命令行界面工具,是许多Docker用户与Docker进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。
1.4.2 Docker daemon
Docker daemon是服务器组建,以Linux后台服务的方式运行,是Docker最核心的后台进程,我们也把它称为守护进程。它负责响应来自Docker Client的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接受由Docker Client发送的请求,接受到的请求通过Docker daemon内部的一个路由分发调用,由具体的函数来执行请求。
1.4.3 Docker Image
Docker image可以看作一个特殊的文件系统,除了提供运容器运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的参数(匿名卷,环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将Docker镜像看成只读模版,通过它可以创建Docker容器。我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行docker build命令可以构建出Docker镜像
1.4.4 Docker Rigistry
Docker registry是存储docker image的仓库
1.4.5 Docker Container
Docker 容器就是Docker镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。Docker Container提供了系统硬件环境,我们可以使用Docker Images这些制作好的系统盘,再加上我们所编写好的项目代码,run一下就可以提供服务了。
容器在docker中的创建过程:
docker run 执行一个命令,这个命令会被发给docker引擎来处理,docker引擎会检索本机上有没有所需要的镜像(因为容器是通过镜像来运行的),如果没有这个镜像,会自动从仓库Registry里拉取下来,根据设定的参数将拉取的镜像运行起来。
二、docker环境部署及测试
1.环境部署:
进入阿里云或者清华下载站,找到docker-ce资源,复制网址
直接安装docker-ce会出现依赖性的错误,我们进入阿里云centos源里,将centos7的源添加在本地,若不添加,会出现如下报错
添加源
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[update] ##centos7源
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
安装docker-ce
[root@server1 yum.repos.d]# yum install -y docker-ce
启动服务
[root@server1 ~]# systemctl enable --now docker
[root@server1 ~]# docker info
使用docker info查看信息,看到有两个warning和我们的桥接有关:
激活内核选项即可
[root@server1 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
[root@server1 ~]# sysctl --system
[root@server1 ~]# systemctl restart docker
此时再用docker info查看就正常了,现在我们就能正常访问docker了:(注:此时我们找到的是docker官方仓库里的镜像)
2.通过镜像运行容器
[root@server1 ~]# docker run -d --name web1 -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
3f9582a2cbe7: Pull complete
9a8c6f286718: Pull complete
e81b85700bc2: Pull complete
73ae4d451120: Pull complete
6058e3569a68: Pull complete
3a1b8f201356: Pull complete
Digest: sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2
Status: Downloaded newer image for nginx:latest
0ab8d0e38142e97b8c611b156d723b2546fc1623909b65a0f5f016d8a2a1668d
显示激活的容器
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ab8d0e38142 nginx "/docker-entrypoint.…" 8 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web1
截取因已是第二次开启nginx,所以显示信息较少
参数解释:
-d:打入后台
–name:给容器命名
-p:端口映射,server1的80端口映射到容器内的80端口
测试:
访问网页:http://192.168.117.11/
nginx已正常启用
删除容器
[root@server1 ~]# docker rm -f web1
3.拉取镜像
查询镜像
[root@server1 ~]# docker search yakexi007
拉取镜像到本地
[root@server1 ~]# docker pull yakexi007/game2048
启动容器
[root@server1 ~]# docker run -d --name web1 -p 80:80 yakexi007/game2048
测试:
访问网页:http://192.168.117.11/
删除容器
[root@server1 ~]# docker rm -f web1