windows docker
docker应用场景
- Web应用的自动化打包和发布(√)
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他后台应用
- 从头编译或扩展现有的OpenShift或Cloud Foundry平台来搭建PaaS环境
三大概念
- 镜像:一个模板,类似app应用
- 容器:装东西的,类似于沙盒,是动态的,保证每个app有自己的环境,相互隔离
- 仓库:存放镜像文件的,是静态的,类似app应用商店
命令
- Docker帮助文档
- Docker 测试(过程包括):
- Docker client与Docker Daemon连接
- Docker Daemon从Docker Hub中拉取一个hello-world的镜像image
- Docker根据镜像image创建容器container
- Docker Daemon将输入发给Docker Client
- 获取镜像
//这条命令可以从默认的公共仓库拉取最新的hello-world镜像
docker pull hello-world:latest
- 查看镜像
具体使用可以看
docker images --help
图片中的tag是给镜像做的标签
- 使用inspect查看详细信息
具体使用可以看
docker inspect --help
- 使用history查看镜像历史记录
- 镜像查找
具体使用可以看
docker search --help
查找stars大于3且包含hello-world的镜像
- 删除镜像
// 具体使用可以看
docker search --help
//使用标签删除镜像
docker rmi myhello-world:latest
//使用镜像ID删除镜像,注意如果当前被删除正在被容器使用就要先停掉容器
docker rmi 你的镜像ID
- 查看容器
- 创建镜像
- 基于已有镜像的容器创建
// 具体使用可以看
docker commit --help
//创建cuiyw-hello-world镜像
docker commit -m "add a image" -a "cuiyw" 你的容器ID cuiyw-hello-world
- 基于本地模板导入
//1. 创建本地模板
// 具体使用可以看
docker export --help
//导出tar包
docker export 你的容器ID -o G:\hello-world.tar
//2. 导出文件并设置新名字
docker import G:\hello-world.tar hello-world-import:latest
- docker另存和载入镜像(以文件形式)
// 保存镜像,具体使用可以看
docker save --help
docker save -o G:\helloworld-save.tar hello-world
//导出镜像
docker load -i G:\helloword-save.tar
- 新建与启动容器
//新建容器
docker create -it ubuntu
//查看ubuntu
docker ps -a
//启动容器后,再看状态变成up
docker start 你的容器id
//docker run -it ubuntu
docker run标准操作
1. 检查本地是否存在指定的镜像,不存在就在共有仓库中下载
2. 利用镜像创建一个容器并启动
3. 分配一个文件系统给容器,并在制度的镜像层外面挂在一层可读写层
4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器
5. 从网桥的地址配置一个IP地址给容器
6. 执行用户指定的应用程序
7. 执行完毕后容器自动终止
- 守护态运行
有时需要让docker容器在后台以守护态形式运行,可以通过 -d来实现
- 终止容器
- 进入容器
启动容器后就是进入容器
docker exec keen_golick bin/bash
按ctrl+D和ctrl+P组合退出容器
- 容器的导入与导出
- 搭建本地私有仓库
-
搭建仓库(在容器中搭建一个仓库镜像)
这里的-p 5000:5000的作用是用来进行端口映射的,映射本机5000端口到虚拟机的5000端口。在启动容器时,如果不匹配宿主机器与虚拟机的端口映射,外部程序就会因为没有端口而无法访问虚拟机。
-
给待上传镜像设置tag(给registry设置tag)
-
上传到仓库(上传镜像到仓库)
数据管理
在Docker中,可能需要对数据进行持久化或需要在多个容器间进行数据共享,会涉及到容器的数据管理操作。两种方式:数据卷;数据卷容器;
数据卷是一个可供容器使用的特殊目录,将主机操作系统目录直接映射进容器,特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便。
- 对数据卷内数据的操作会立马生效,无论是容器内还是本地操作。
- 对数据卷的更新不会影响镜像,解耦了应用与数据。
- 卷一直存在,直到没有容器使用,可以安全地卸载它。
数据卷可以有两种方式存在:一是挂载主机目录作为数据卷;二是在容器内创建一个数据卷。
- 挂载主机目录作为数据卷,创建了一个ubuntu镜像的容器test
- 在容器内创建一个数据卷,创建了一个ubuntu镜像的容器vtest
- 数据卷容器
把test作为数据卷容器,另外创建了db1、db2两个容器,使用–volumes-from参数挂载test容器中的数据卷
通过docker run --help
可以看到-p(指定端口绑定一个容器)与-P(随机49000~49900)的区别
容器互联
实际应用往往需要多个容器交互,一个数据库容器提供db服务,多个应用容器来部署应用,使用端口访问会暴露端口,不太安全
学习使用link,但link只针对单宿主主机。
- 启动mysql server
- 使用link关联两个容器关联相当于在它们之间创建了一个虚拟通道,而且不用映射端口到宿主主机上。通过两种方式为容器公开连接信息:一是更新环境变量,二是更新/etc/hosts文件
进入容器webapp查看它的环境变量和hosts文件
DockerFile
DockerFile是一个包含用于组合映像的命令的文本文档,可以在docker build命令中使用 -f标志指向文件系统中任何位置的Dockerfile
docker build -f /path/to/a/Dockerfile
Docker容器Tomcat部署war包
-
创建tomcat容器
访问http://localhost:8080/失败
阿里云导致的失败 -
上传war包到tomcat容器
-
重启容器
-
访问应用
报错 -
访问应用以挂载方式启动
上述执行会有一个弊端,容器重启后项目会不存在,可以以挂载方式启动
失误
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。1
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫