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,修改不是添加

  1. 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
复制代码
修改之后
  1. systemctl daemon-reload
  2. systemctl restart docker
复制代码
基本命令:命令行中

*、运行:service docker start,重启docker restart *、停止docker stop *

*、命令使用方法列表:docker command --help查询详细的使用情况,如下面的官方解释

  1. Run 'docker COMMAND --help' for more information on a command
复制代码

*、docker run 命令来在容器内运行一个应用程序,运行即进入容器

  1. docker run ubuntu:15.10 /bin/echo "Hello world"
复制代码

docker二进制执行文件;run运行;ubuntu:15.10要运行的镜像;/bin/echo "Hello world”容器中执行的命令

  1. 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提交容器副本
  1. 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的时候报错:
  1. Error response from daemon: shim error: docker-runc not installed on system
复制代码
解决方案:
  1. cd /usr/libexec/docker/
  2. 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