-
- 一. Docker 诞生
- 二. Docker 历程
- 三.Docker 的构成
- Docker 安装
- Docker 化应用体验
- Docker 基础概念及命令
- Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套
- Docker 镜像管理镜像特性
- 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