51Testing软件测试论坛
标题: 【Docker】docker入门 [打印本页]
作者: 巴黎的灯光下 时间: 2019-6-19 17:02
标题: 【Docker】docker入门
【Docker】docker入门正文:
Linux:内核启动、挂载root文件系统提供用户空间支持
Docker镜像Image,相当于root文件系统、提供容器运行时所需的程序、库、资源、配置文件、为运行时准备的配置参数(环境变量、用户、匿名卷等),不包含动态数据
Docker:
架构图:
希望看完这篇博客,大家能看懂这幅图,其实吧我就是上传镇一下博客
[attach]125294[/attach]
利用UnionFS技术、分层存储:
1、镜像是虚拟的概念、由一组(多层)文件系统组成,构建时一层层构建,完不会再改,互不影响:删除假删除
2、镜像的复用、定制更容易,可以用之前的进一步添加、定制自己的内容、构建新镜像
容器相关概念:
1、镜像Image和容器Container:类和实例,镜像是静态、容器是运行时的实体,实质是进程,运行在属于自己的独立的命名空间(隔离环境、安全)
2、容器可以被创建、启动、停止、删除、暂停等;运行时以镜像为基础层、其上创建当前容器的存储层(为运行时读写准备,生命周期同容器)
docker容器可以理解为在沙盒中运行的进程。沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。沙盒默认不会运行任何程序,需要在沙盒中运行一个进程来启动某一个容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。【源】
3、容器不应该向其存储层(无状态)写入任何数据,写入操作应使用数据卷或绑定宿主目录,在这些位置上的读写会跳过容器存储层,对宿主、网络存储读写,性能稳定性更高
4、数据卷:生命周期独立于容器
5、主机Host:物理或虚拟的机器,用于执行Docker守护进程和容器
6、仓库Registry:保存镜像,Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合
7、Machine:简化Docker安装的命令行工具,如VirtualBox、 Digital Ocean、Microsoft Azure
Docker Registry:集中存储、分发镜像的服务,可包含多个标签,一个标签一个镜像
1、仓库:一个仓库会包含同一个软件不同版本的镜像
1.1仓库名:两段式路径:DockerRegistry多用户环境下的用户名/软件名:jwilder/nginx-proxy,不绝对、取决于Docker Registery软件或服务
2、标签:对应软件的各个版本,默认latest
3、通过<仓库名>:<标签>指定具体镜像:ubuntu:14:04
4、公开服务:开放给用户使用、容许用户管理的registry服务:免费上传、下载公开镜像
5、私有Docker Registry
安装:
1、介绍:Docker系统有两个程序:docker服务端和docker客户端。
1.1服务端是一个服务进程,管理着所有的容器。
1.2客户端是服务端的远程控制器,用来控制docker的服务端进程。
1.3大部分情况下,docker服务端和客户端运行在一台机器上。【源】
安装前进行环境配置:修改docke的配置文件/usr/lib/systemd/system/docker.service,修改不是添加
- ExecStart=/usr/bin/dockerd --insecure-registry=sz-pg-oam-docker-hub-001.tendcloud.com -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
复制代码 修改之后
- systemctl daemon-reload
- systemctl restart docker
复制代码 基本命令:命令行中*、运行:service docker start,重启docker restart *、停止docker stop *
*、命令使用方法列表:docker command --help查询详细的使用情况,如下面的官方解释
- Run 'docker COMMAND --help' for more information on a command
复制代码*、docker run 命令来在容器内运行一个应用程序,运行即进入容器
- docker run ubuntu:15.10 /bin/echo "Hello world"
复制代码docker二进制执行文件;run运行;ubuntu:15.10要运行的镜像;/bin/echo "Hello world”容器中执行的命令
- docker run -i -t ubuntu:15.10 /bin/bash
复制代码 -i:容许对容器内的标准输入STDIN进行交互 ; -t:在新容器中指定伪终端或终端
还可以用-d 后台运行,-P将容器内部使用的网络端口号映射到使用的主机上;-p 5000:5000指定端口
0.0.0.0:32769->5000/tcp:Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上,访问32769
镜像
1、搜索镜像:docker search 镜像名字 ,或找Docker Hub
2、下载容器镜像:docker pull ***,移除docker rm *,查看镜像列表:docker images
3、更新镜像:
3.1创建docker run -t -i 镜像 命令
3.2apt-get update更新、exit退出容器、commit提交容器副本
- docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
复制代码 -m:提交的描述信息;-a:指定镜像作者;e218edb10161:容器ID;runoob/ubuntu:v2:指定要创建的目标镜像名
4、构建镜像:docker build
4.1cat Dockerfile创建Dockerfile文件(一组指令告诉docker如何构建),指令:
FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么等
4.2docker build -t runoob/centos:6.7 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
问题:
1、docker容器中运行hello world的时候报错:
- Error response from daemon: shim error: docker-runc not installed on system
复制代码 解决方案:
- cd /usr/libexec/docker/
- sudo ln -s docker-runc-current docker-runc
复制代码 swarm:集群管理工具
[attach]125295[/attach]
外部用户通过HTTP接口笼统地向集群发出指令,swarm会自动地做一些如负载均衡,保持容器副本数量、伸缩等工作(根据和k8s很像)
作者: Miss_love 时间: 2019-6-20 09:04
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) |
Powered by Discuz! X3.2 |