美文网首页
docker基础了解

docker基础了解

作者: 没错就是那个卡卡 | 来源:发表于2019-07-24 11:10 被阅读0次

参考docker官网.

00x1 docker是什么

Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS类的 Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

00x2 mac下安装docker

直接到官网下载docker.dmg文件,然后点击,一步步操作

检测Docker Engine, Docker Compose, 和Docker Machine的版本:

➜  docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true
➜  docker-compose --version
docker-compose version 1.11.2, build dfed245
➜  docker-machine --version
docker-machine version 0.10.0, build 76ed2a6

配置加速器:
Docker 加速器是什么,我需要使用吗?
使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。如果您是在国内的网络环境使用 Docker,那么 Docker 加速器一定能帮助到您。
注册daocloud,然后在mac标签页复制加速器url。

00x3 运行官网提供的二个简单列子

拉取hello-world镜像

docker pull hello-world
hello-world

查看hello-world镜像信息:

➜ docker images hello-world
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
hello-world         latest              1815c82652c0        5 days ago          1.84 kB  

根据镜像生成对应容器

➜ docker run hello-world

根据镜像生成容器

  • ps不加参数只会把当前运行的Community打印出来,查看当前所有的Community,加上-a参数。
➜ docker ps -a 

查看当前所有容器
当然也可以根据镜像生成一个具体名称的镜像,先删除当前容器

docker rm 60

删除容器
当然如果当前容器正在运行,要删除这个容器,则使用命令

docker rm -f 60

使用镜像生成具体名称的容器:

docker run --name miaozhihao hello-world

指定容器的名称
关于更多的docker run的命令可以使用来查看

docker run --help

第二个examples,启动docker的web服务

docker pull nginx
docker run -d -p 80:80 --name webserver nginx
  • -p参数是使用宿主机的80映射容器的80端口
➜ curl localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

交互式终端方式进入 webserver容器,

➜ docker exec -it webserver bash 

修改nginx的显示页面:

root@41b6804c716e:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@41b6804c716e:/# exit
exit

修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff

➜ docker diff webserver
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /usr/share/nginx/html/index.html
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp

使用docker commit生成镜像

➜ docker commit --author "邮箱地址" --message "修改了默认网页" webserver nginx:v2
sha256:0a34c054b8a826d85dddf4d1dbdd3028ab890feff4c8a0844e9b98dd146c2e07

--author 指定作者 --message表示容器的一些信息

查看当前nginx镜像:

docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v2                  0a34c054b8a8        11 seconds ago      109 MB
nginx               latest              958a7ae9e569        4 weeks ago         109 MB

查看当前所有的容器,包括运行的和停止的

➜ docker ps -a
\CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                    PORTS                NAMES
41b6804c716e        nginx                                 "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes              0.0.0.0:80->80/tcp   webserver
85612b405cda        miaozhihao001dockerhub/commit_test1   "nginx -g 'daemon ..."   20 hours ago        Exited (0) 3 hours ago                         nginx_web
9ef1fb35d7aa        ubuntu:14.04                          "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                        commit_test
bf8320b9e445        ubuntu:14.04                          "/bin/bash"              24 hours ago        Exited (0) 24 hours ago                        sharp_curie
9f9767eb8aaf        hello-world                           "/hello"                 10 days ago         Exited (0) 10 days ago                 miaozhihao

启动新的容器

➜ docker run --name newwebserver -d -p 80:80 nginx:v2
3619b34ed347cf1ae2ee3ab32c419140871f3084b9a1325ab5d8c6155d43bf06
➜ curl localhost:80
<h1>Hello, Docker!</h1>

00x4一些docker命令总结

  • docker images :查看当前宿主机的所有镜像。
  • docker images ubuntu:根据仓库名列出镜像
  • docker images ubuntu:14.04:指定仓库名和标签
  • docker build -t webservice .:表示使用当前目录下的DockerFile来生成镜像,-t参数的值表示镜像的tagname,如果DockerFile在当前路径下则使用.,如果不在当前路径下则使用相对路径。
  • docker ps -a: 没有-a参数表示显示当前宿主机的正在运行的容器,加上-a表示显示当前宿主机所有的容器,包括已经退出的容器。
  • docker run -d -p 2222:22 --name base centos:7.1
    表示根据指定的镜像后台运行容器,容器的名字是base(--name就是指定容器的名字),centos:7.1表示镜像的名字,-p参数表示当前宿主机的2222端口对应容器的22端口。
    -d参数表示(Run container in background and print container ID)
  • docker exec -it base /bin/bash
    以交互式命令进入base容器并且执行/bin/bash命令
  • docker rmi webservice:删除webservice镜像
  • docker rm base: 删除base容器,如果base正在运行,则可以使用docker rm -f base进行强行删除

00x5 Docker 三个基本概念

  • 镜像(Image)
    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • 容器(Container)、镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
  • 仓库(Repository)
    镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
    一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
    通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest作为默认标签。

相关文章

  • docker 源码入门

    前言 docker是go语言编写的,要看docker源码,最起码要学会go的基础语法。 了解 docker 基础架...

  • docker基础了解

    参考docker官网. 00x1 docker是什么 Docker 使用 Google 公司推出的 Go 语言进行...

  • docker常用命令

    Docker基础 这篇基础文章是方便用户在使用cSphere平台之前,了解docker基础知识。 针对已经有一定的...

  • 一小时Docker教程

    Docker基础 这篇基础文章是方便用户在使用cSphere平台之前,了解docker基础知识。针对已经有一定的L...

  • Spring Boot与Docker部署

    了解Docker的一些基础知识Docker——入门实战Docker —— 从入门到实践 Centos7上安装doc...

  • Docker基础(1)—— Docker基本概念

    Docker基础(1)—— 基本概念Docker基础(2)—— 安装及基础操作 关于docker是什么以及dock...

  • Docker 安装 ShowDoc

    基础安装 安装前请确保你的环境已经装好了docker 。docker的安装教程在网上比较多,可以搜索了解下。这里重...

  • docker部署skywalking 6.0a

    前言 阅读前提:大致了解skywalking以及docker基础知识。 关于skywalking是什么,自行搜索吧...

  • [Docker一]基础

    基础篇 docker概念 docker是什么? 为了解决应用环境配置的难题,将一个个应用打包成镜相(image),...

  • docker base command

    docker(base command) docker 基础命令

网友评论

      本文标题:docker基础了解

      本文链接:https://www.haomeiwen.com/subject/lmwlkqtx.html