『*-1』Linux之虚拟化的Docker容器

一. Docker 诞生

1、Docker 是 dotcloud 公司开源的一款产品 dotcloud 是 2010 年新成立的一家公司,
主要基于 PAAS ( Platfrom as a Service ) 平台为开发者提供服务
2、2013 年 10 月 dotcloud 公司改名为 Docker 股份有限公司

二. Docker 历程

1、Linux Container
是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程
和资源
2、Docker是PAAS提供商 dotCloud开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go 语言并遵从 Apache2.0 协议开源
3、Docker 设想是交付运行环境如同海运,OS 如同一个货轮,每一个在 OS 基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造

三.Docker 的构成

1、Docker 仓库:https://hub.docker.com
2、Docker 自身组件

Docker Client:

------------Docker 的客户端

Docker Server:

------------Docker daemon 的主要组成部分,接受用户通过 Docker Client
发出的请求,并按照相应的路由规则实现路由分发

Docker 镜像:

------------Docker 镜像运行之后变成容器(docker run)

在这里插入图片描述

在这里插入图片描述

Docker 安装

Install for Linux
Script

Yum
Rpm 用dnf安装下载好的包,这个好用
『2021最新』rhel7.6上的docker安装

Docker 化应用体验

WordPress 运行环境需要如下软件的支持:
➢ PHP 5.6 或更新软件

dnf install php

➢ MySQL 5.6 或 更新版本

dnf install mariadb

➢ Apache 和 mod_rewrite 模块
docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb


[root@node126 yum.repos.d]# docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
Unable to find image 'mariadb:latest' locally
latest: Pulling from library/mariadb
04a5f4cda3ee: Pull complete 
ff496a88c8ed: Pull complete 
0ce83f459fe7: Pull complete 
ab94f9d248da: Pull complete 
7c89fa1e706d: Pull complete 
f0ebee2ec8e3: Pull complete 
13e37a1941f9: Pull complete 
7ebfba0582c2: Pull complete 
64bf0726d522: Pull complete 
21560da403f6: Pull complete 
17a7527065bd: Pull complete 
15202da6e261: Pull complete 
Digest: sha256:ab7c906b288cbf1bf5da2302492233e0ca0b93a4a88867849dc0513110ca01c1
Status: Downloaded newer image for mariadb:latest
04e66000bc91397c6ed02c2d818f533e24c122382dd6f50a578d36e64d05a632
[root@node126 yum.repos.d]# 

docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress

[root@node126 yum.repos.d]# docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
Unable to find image 'wordpress:latest' locally
latest: Pulling from library/wordpress
ac2522cc7269: Pull complete 
5b2eaf06d6cf: Pull complete 
353d7ace7314: Pull complete 
37e4975b15a3: Pull complete 
f54c541ce8ea: Pull complete 
4c5f70c3328b: Pull complete 
7721d733906f: Pull complete 
15a49155542c: Pull complete 
a365bc9f6bef: Pull complete 
60a4e47167a5: Pull complete 
24b65d3ed44f: Pull complete 
0c1e61773eb8: Pull complete 
c29159fb4bcc: Pull complete 
26fb7e4f01ad: Pull complete 
9c202d0c403c: Pull complete 
0c3ce41d4ac1: Pull complete 
9c5aa7a09350: Pull complete 
474825f9ea74: Pull complete 
94703b17fe04: Pull complete 
73c68a1f3a28: Pull complete 
5c2036f3fca4: Pull complete 
Digest: sha256:a78e00e214e7422e80602bc8e217b7ec3c56392b23cfcf308caf1db82f8de76f
Status: Downloaded newer image for wordpress:latest
1a07a008d745b11d05daf7edb4868645a37a00bee4ec192831204c62c2c39305
[root@node126 yum.repos.d]# 

Docker 基础概念及命令

Docker 三个重要概念:

仓库 (Repository)、

镜像 (image)

容器 (Container)

docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress

Docker 指令的基本用法:

docker + 命令关键字(COMMAND) + 一系列的参数Docker 基础命令

Docker 基础命令

docker info 守护进程的系统资源设置
在这里插入图片描述

docker search Docker 仓库的查询
在这里插入图片描述

在这里插入图片描述

docker pull Docker 仓库的下载
在这里插入图片描述

docker images Docker 已安装的镜像的查询
在这里插入图片描述

docker rmi Docker 镜像的删除
在这里插入图片描述

docker ps 容器的查询
在这里插入图片描述

docker run 容器的创建启动
docker start/stop CONTAINERID 容器启动停止
在这里插入图片描述

在这里插入图片描述

Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套

使用单一容器管理

单一容器管理
每个容器被创建后,都会分配一个 CONTAINER ID ,
作为容器的唯一标示,
后续对容器的启动、停止、修改、删除等所有操作,
都是通过 CONTAINER ID 来完成,偏向于数据库概念中的主键

docker ps --no-trunc 查看
      --no-trunc        Don't truncate output
      						  #缩短

在这里插入图片描述

docker stop/start CONTAINERID 停止

在这里插入图片描述

docker start/stop MywordPress 通过容器别名启动/停止

在这里插入图片描述

docker inspect MywordPress 查看容器所有基本信息

在这里插入图片描述

docker logs MywordPress 查看容器日志

在这里插入图片描述

docker stats MywordPress 查看容器所占用的系统资源

在这里插入图片描述

docker exec 容器名 容器内执行的命令 容器执行命令

在这里插入图片描述

docker exec -it 容器名 /bin/bash 登入容器的bash

在这里插入图片描述

run 延伸
--restart=always 容器的自动启动

在这里插入图片描述

-h x.xx.xx 设置容器主机名
--dns xx.xx.xx.xx 设置容器使用的 DNS 服务器
--dns-search DNS 搜索设置
--add-host hostname:IP 注入 hostname <> IP 解析

在这里插入图片描述

--rm 服务停止时自动删除

在这里插入图片描述

Docker-Compose多容器管理

多容器管理
Docker 提倡理念是“一个容器一个进程”,假设一个服务需要由多个进程组成,就需要多个容器组成
一个系统,相互分工和配合对外提供完整服务
比如:博客系统
组件1:mariadb
组件2:WordPress 的 apache web
在启动容器时,同一台主机下如果两个容器之间需要由数据交流,使用 --link 选项建立两个容器之间的互联,前提是建立时 mariadb 已经开启
docker start db
docker start MywordPress
停止:

docker stop db MywordPress

docker stop MywordPress再docker stop db

Docker-compose install

容器编排工具,允许用户在一个模板( YAML 格式 )中定义一组相关联的容器,会根据 --link 等参数,
对启动的优先级进行排序

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -
s`-`uname -m` > /usr/local/bin/docker-compose

docker version
在这里插入图片描述

Docker

-compose 命令用法
在这里插入图片描述

-f 指定使用的 yaml 文件位置 up
-d 启动容器项目
ps 显示所有容器信息
pause 暂停容器
在这里插入图片描述

restart 重新启动容器
在这里插入图片描述

unpause 恢复暂停
在这里插入图片描述

logs 查看日志信息
rm 删除容器
config -q 验证 yaml 配置文件是否正确
stop 停止容器
start 启动容器

Docker 镜像管理镜像特性

镜像的特性

➢容器创建时需要指定镜像,

每个镜像都由唯一的标示 Image ID ,
和容器的 Container ID 一样,
默认 128 位,可以使用前 16 为缩略形式,
也可以使用镜像名与版本号两部分组合唯一标示,如果省略版本号,默认使用最新版本标签( latesr )
镜像的分层:Docker 的镜像通过联合文件系统 ( union filesystem ) 将各层文件系统叠加在一起

> bootfs:用于系统引导的文件系统,包括 bootloader 和 kernel,容器启动完成后会被卸载以节省内存资源
> roofs:位于 bootfs 之上,表现为 Docker 容器的根文件系统
>> 传统模式中,系统启动时,内核挂载 rootfs 时会首先将其挂载为“只读”模式,完整性自检完成后将其挂载为读写模式
>> Docker 中,rootfs 由内核挂载为“只读”模式,而后通过 UFS 技术挂载一个“可写” 层镜像

➢已有的分层只能读不能修改

➢上层镜像优先级大于底层镜像

DockerFile镜像的诞生

1、容器 > 镜像 :docker commit CID xx.xx.xx

工作在前台的守护进程至少一个

2、DockerFile

Dockfile 是一种被 Docker 程序解释的脚本,
Dockerfile 由一条一条的指令组成,
每条指令对应 Linux 下面的一条命令。
Docker 程序将这些 Dockerfile 指令翻译真正的 Linux 命令。

Dockerfile 有自己书写格式和支持的命令,
Docker 程序解决这些命令间的依赖关系,类似于 Makefile。
Docker 程序将读取 Dockerfile,根据指令生成定制的 image
生成命令:docker
打开 DockerFile 说明
build -t wangyang/jdk-tomcat

镜像的导出以及导入

导出:docker save -o xx.xx.xx xx.xx.xx.tar
导入:docker load -i xx.xx.xx.tar3

Docker 仓库构建

1、官方仓库构建
2、Harbor 构建

Docker 网络通讯

在这里插入图片描述
(1) 容器访问外部网络
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE
(2) 外部网络访问容器
docker run -d -p 80:80 apache
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

猜你喜欢

转载自blog.csdn.net/qq_39679699/article/details/115284802