1. 优势:启动快,秒级;对系统资源利用率高,一台主机上可同时运行数千个Docker容器;可以在任意平台上迁移(物理机,虚拟机,公有云,私有云,个人电脑,服务器等);
2. 概念:镜像;容器;仓库;
镜像:是一个只读的模板,用来创建容器;
容器:运行应用,可被启动,开始,停止,删除等;镜像是只读,容器可写;
仓库:集中存放镜像文件的场所;分为私有仓库和共有仓库,最大公开仓库:Docker Hub,
国内Docker Pool,存放大量镜像供用户下载;
3. 安装镜像启动容器:
Centos7 为例:yum -y install docker;
启动:service docker start;chkconfig docker on;
获取镜像:docker pull 仓库名(默认DockerHub)+镜像名+版本号(国外镜像会提示下载失败,使用加速器,推荐阿里云,报错提示Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout)镜像存放在/var/lib/docker
阿里云容器 服务
https://cr.console.aliyun.com/
首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址,类似 于“https://1234abcd.mirror.aliyuncs.com”
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://1234abcd.mirror.aliyuncs.com"]
}
systemctl daemon-relaod
systemctl restart docker
显示本地已有镜像:docker images;
创建容器,让其运行bash应用:docker run -t(伪终端) -i(交互) 镜像名+版本号 /bin/bash
4. 容器中镜像的取出和载入移除:
导出镜像到本地:docker save -o xxx.tar xxx
载入镜像:docker load --input xxx.tar或者docker load < xxx.tar
移除本地镜像:docker rmi xxx(training/sinatra)
删除容器:docker rm -f(强制删除)
注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器;
5.容器:
新建容器并启动:docker run -t(伪终端) -i(交互) 镜像名+版本号 /bin/bash
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
启动终止的容器:docker start
docker ps 查看启动的容器信息
终止容器:docker ps -a 可查看终止的容器
-d 启动容器进入后台
-n=x 查看最后创建的x个容器
导出容器快照:docker export +目录
导入快照:docker import 目录/url
*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
6.仓库:
搜索仓库中镜像:docker search + 镜像名,然后docker pull
构建私有仓库:
工具docker-registry: docker run -d -p 5000:5000 registry
配置私有仓库(类似于Yum 仓库配置)
a.指定参数配置:
docker run
-e SETTINGS_FLAVOR=s3
-e AWS_BUCKET=acme-docker
-e STORAGE_PATH=/registry
-e AWS_KEY=AKIAHSHB43HS3J92MXZ
-e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T
-e SEARCH_BACKEND=sqlalchemy
-p 5000:5000
registry
b. 本地路径:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry(默认目录/tmp/registry)
7. dcoker数据管理:数据卷和数据卷容器
数据卷:
可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新,不会影响镜像
卷会一直存在,直到没有容器使用
*数据卷的使用,类似于 Linux 下对目录或文件进行 mount。
8. 网络功能:
查看应用日志信息:docker logs -f 应用名称/id
映射所有或者指定地址接口地址:docker run -d -p (ip:)5000:5000
查看映射端口配置:docker port 应用名/id 端口号
注意:
容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有 1个可变的网络配置。)
-p 标记可以多次使用来绑定多个端口
自定义容器名:docker run -d -P --name
容器互联:--link 连接容器的名称:别名
是否连接成功可以通过ping 来测试
查看容器是否能访问外部网络:sysctl net.ipv4_forward,1 为允许,0需要手动开启:
sysctl -w net.ipv4_forward=1
容器之间能不能相互访问:1.本地防火墙,iptables