当前位置:   article > 正文

Linux Docker容器 简介与安装及使用_container-selinux

container-selinux

一、Docker简介

在这里插入图片描述
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),接下来的实验我们使用社区版。
谁适合阅读本教程?

1.Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

2.Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

3.相关链接

Docker 官网:https://www.docker.com

Github Docker 源码:https://github.com/docker/docker-ce

二、理解Docker的工作原理

首先,我们需要知道什么是Linux容器?

 
 
  • 1
  • 1

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,就像是给正常的进程外面套了一个保护层,对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。它相比虚拟机来说,因为是进程级别的,所以有很多优势:启动快、资源占用少、体积小; 容器与宿主机是共享系统内核的。

那么Docker和Linux容器是什么关系?

 
 
  • 1
  • 1

Docker属于Linux容器一种封装,提供简单易用的容器使用接口;它将应用程序与该程序的依赖打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机运行一样;总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器,另外,它还可以进行版本管理、复制、分享、修改就像管理普通的代码一样;

一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

传统虚拟化和容器技术的对比

在这里插入图片描述

三、Docker的安装部署(rhel7.6)

实验准备:

1.selinux和firewalld状态为disabled

2.各主机信息如下:

主机ip
虚拟机server1172.25.63.1

3.配置虚拟机可以上网。

安装docker

1.使用阿里镜像站配置yum源

地址:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11aUwteu

虚拟机安装wget:

yum install -y wget

 
 
  • 1
  • 1

下载docker-ce.repo文件:

cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 
 
  • 1
  • 2
  • 1
  • 2

下载完成后将docker-ce.repo文件中第一个yum源的gpgcheck改成0。

2.下载依赖包
下载依赖包container-selinux(在阿里镜像站可以下载到):
https://mirrors.aliyun.com/centos/7.7.1908/cloud/x86_64/openstack-stein/Packages/c/container-selinux-2.77-1.el7.noarch.rpm?spm=a2c6h.13651111.0.0.34ca2f70pUA6W3&file=container-selinux-2.77-1.el7.noarch.rpm

3…安装docker-ce

yum install docker-ce container-selinux-2.77-1.el7.noarch.rpm -y

 
 
  • 1
  • 1

4.启动docker

systemctl start docker

 
 
  • 1
  • 1

启动后可以查看docker的详细信息:

docker info

 
 
  • 1
  • 1

没有错误信息就表示安装成功。

四、Docker 客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

 docker

 
 
  • 1
  • 1

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如我们要查看 docker stats 指令的具体使用方法:

docker stats --help

 
 
  • 1
  • 1

五、容器使用

获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

docker pull ubuntu

 
 
  • 1
  • 1

下载速度慢的化可以设置镜像加速器:https://blog.csdn.net/qq_35887546/article/details/105367592

也可以使用以下命令导入本地镜像:

docker load -i game2048.tar

 
 
  • 1
  • 1

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it ubuntu bash

 
 
  • 1
  • 1

参数说明:

 -i: 交互式操作。
 -t: 终端。
ubuntu: ubuntu 镜像。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

要退出终端,直接输入 exit:

exit

 
 
  • 1
  • 1

在这里插入图片描述

启动已停止运行的容器

查看所有的容器命令如下:

docker ps -a

 
 
  • 1
  • 1

查看所有正在运行的容器:

docker ps

 
 
  • 1
  • 1

使用 docker start 启动一个已停止的容器:

docker start b750bbbcfd88 

 
 
  • 1
  • 1

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

 docker run -itd --name ubuntu-test ubuntu /bin/bash

 
 
  • 1
  • 1

--name表示给容器起个名字。

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

停止一个容器

停止容器的命令如下:

docker stop <容器 ID>

 
 
  • 1
  • 1

停止的容器可以通过 docker restart 重启:

docker restart <容器 ID>

 
 
  • 1
  • 1

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach 命令

下面演示了使用 docker attach 命令。

docker attach <容器 ID>

 
 
  • 1
  • 1

注意: 如果从这个容器退出,会导致容器的停止。

exec 命令

下面演示了使用 docker exec 命令。

docker exec -it <容器 ID> /bin/bash

 
 
  • 1
  • 1

注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。

更多参数说明请使用 docker exec --help 命令查看。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

 docker export 1e560fca3906 > ubuntu.tar

 
 
  • 1
  • 1

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

 cat docker/ubuntu.tar | docker import - test/ubuntu:v1

 
 
  • 1
  • 1

此外,也可以通过指定 URL 或者某个目录来导入,例如:

 docker import http://example.com/exampleimage.tgz example/imagerepo

 
 
  • 1
  • 1

删除容器

删除容器使用 docker rm 命令:

 docker rm -f <容器 ID>

 
 
  • 1
  • 1

下面的命令可以清理掉所有处于终止状态的容器。

 docker container prune

 
 
  • 1
  • 1

删除镜像:

删除镜像时需要保障该镜像上没有正在运行的容器,否则会报错:

docker -rmi <镜像名称>

 
 
  • 1
  • 1

六、运行一个 容器(以ningx为例)

拉取镜像:

docker pull nginx

 
 
  • 1
  • 1

前面我们运行的容器并没有一些什么特别的用处。

[root@server1 ~]# docker run -itd --name web -p 80:80 nginx

 
 
  • 1
  • 1

在这里插入图片描述

参数说明:

-d:让容器在后台运行。
-p:端口映射,冒号前面的80表示宿主机的端口,冒号后面的80表示容器内的端口,表示将宿主机上的80端口映射到容器内

 
 
  • 1
  • 2
  • 3
  • 1
  • 2

此时可以在浏览器输入虚拟机的ip地址访问该nginx:
在这里插入图片描述

使用 docker ps 来查看我们正在运行的容器:

[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
888a49b407a3        nginx               "nginx -g 'daemon of…"   6 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   web

 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

[root@server1 ~]# docker port 888a49b407a3
80/tcp -> 0.0.0.0:80

 
 
  • 1
  • 2
  • 1
  • 2

查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

[root@server1 ~]# docker logs -f 888a49b407a3

 
 
  • 1
  • 1

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

我们还可以使用 docker top 来查看容器内部运行的进程

[root@server1 ~]# docker top 888a49b407a3
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3820                3803                0                   00:58               pts/0               00:00:00            nginx: master process nginx -g daemon off;
101                 3846                3820                0                   00:58               pts/0               00:00:00            nginx: worker process

 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

[root@server1 ~]# docker inspect 888a49b407a3

 
 
  • 1
  • 1

停止该容器:

[root@server1 ~]# docker stop 888a49b407a3
888a49b407a3
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/300536
推荐阅读
相关标签
  

闽ICP备14008679号