docker入门(一)未完待续。。。。

一、docker的概念及优点
二、docker基于不同系统的安装
三、使用docker镜像
四、操作docker容器

一、docker的概念优点

概念

  1. Docker是基于Go语言实现的开源项目,Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
    基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流平台。可以说Docker首次为应用的开发、运行和部署提供了‘一站式’的实用解决方案。

  2. 让容器的支持不在局限于Linux操作系统,而是更安全、更高效、更具有拓展性。
    可以简单地讲Docker容器理解为一种轻量级的沙箱。可以简单地讲Docker容器理解为一种轻量级的沙箱。
    每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络通信,容器的创建和停止都十分快速,几乎跟创建和终止原声应用一致;另外容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。

  3. 首先介绍三大核心概念(镜像,容器,仓库)

  • 镜像(image)
    Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是创建Docker容器的基础。例如:一个镜像可以包含一个基本的操作环境,里面进安装了Apache应用程序,可以把它成为Apache镜像。
    通过版本管理和增量的文件系统,Docker一同了一套十分简单的机制来创建和更新现有的镜像,用户可以从网上下载一个已经做好的镜像,并直接使用。
  • 容器(Container)
    Docker容器类似于一个轻量级沙箱,Docker利用容器来运行和隔离应用。
    容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。
  • 仓库(Repository)
    Docker仓库类似于代码仓库,是Docker集中存放的镜像文件的场所。
    仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库,每个仓库存放着某一类的镜像,往往包括多个镜像文件,通过不同的(tag)来进行区分,
    例如存放着Ubuntu操作系统的镜像仓库,被简称为Ubuntu仓库,其中可能包括16.04,18.04等不同版本镜像。
    仓库示例
    目前最大的公开仓库是官方提供的Docker Hub.

Docker的优点

通过容器打包应用、解耦应用和运行平台。只需要在新服务器上启动需要的容器就可以了,无论新旧服务器是否在同一类型的平台

传统模式中服务器迁移,往往需要对每个应用都进行重新部署和调试。繁琐又影响工作效率。(无法保证同一份应用在不同环境中进行)
1)运维方面

  1. 更快速的交付和部署
    使用镜像来构建一套标准的开发环境。直接部署代码,可以快速创建和删除容器,实现快速迭代,节约开发测试,部署的大量时间,使团队更容易理解应用和创建工作过程。
  2. 更高效的资源利用
  3. 更轻松的迁移和拓展(在任意平台上运行)
  4. 更简单的更新管理(使用Dockerfile,简单配置修改即可以替代大量更细工作。)

2)docker与虚拟机比较

特性容器虚拟机
启动速度秒级分钟级别
性能接近原生较弱
内存代价很小较多
磁盘使用一般为MB一般为GB
运行密度单机支持上千个容器一般为几十个
隔离性安全隔离完全隔离
迁移性优秀一般

3)Docker与虚拟化
在这里插入图片描述

二、docker基于不同系统的安装

本文基于centos7进行安装及进行调试。请按照下面网址进行安装即可。

http://www.runoob.com/docker/centos-docker-install.html

三、使用docker镜像

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默 认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置, 使用自定义的镜像仓库。 本章将围绕镜像这 一 核心概念介绍具体操作, 包括如何使用 pull 命令从 Docker Hub 仓库中下载镜像到本地;如何查看本地已有的镜像信息和管理镜像标签;如何在远端仓库使 用 search 命令进行搜索和过滤;如何删除镜像标签和镜像文件;如何创建用户定制的镜像并 且保存为外部文件。 最后, 还将介绍如何往 Docker Hub 仓库中推送自己的镜像。

1. 获取镜像 (docker pull )
可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命
令的格式为 docker [image] pull NAME [ :TAG] 。
其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本
信息)。 通常情况下, 描述 一 个镜像需要包括
“ 名称+标签 “
信息。
例如, 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:

$ docker pull ubuntu:18. 04

下面的命令实际上下载的就是 nginx:latest的镜像。

$ docker pull nginx

pull 子命令支持的 选项主要包括:
-a, --all -tags=true | false: 是否获取仓库中的所有镜像,默认为否;
–disable-content-trust:取消镜像的内容校验,默认为真。

下载镜像到本地后, 即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运
行bash应用, 执行打印 "Hello World"命令:

$  docker run -it ubuntu:18.04 bash
root@65663247040f:/# echo "Hello World"
Hello World
root@65663247040f:/# exit

2. 查看镜像信息 (ls tag inspect)
使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基
本信息。
docker images

[root@localhost dockerTest]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 31b42392b565        30 minutes ago      109MB
nginx               Dockerfile          a6c379e97814        5 hours ago         109MB
nginx               latest              f09fe80eb0e7        12 days ago         109MB

reoisitory:来自哪个仓库
tag:标签只是标记版本信息,不能表示版本内容
image id:镜像的ID,如果两个镜像ID相同,说明它们实际上指向了同一个镜像,只是据有不同的标签名而已。
created:创建时间。镜像的最后更新时间。
size:镜像大小,优秀的镜像往往提及都较小,镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和。

images子命令主要支持如下选项, 用户可以自行进行尝试:
-a, --all=true I false: 列出所有(包括临时文件)镜像文件,默认为否;
–digests=true | false: 列出镜像的数字摘要值,默认为否;
-f, --filter=[] : 过滤列出的镜像, 如dangling=true 只显示没有被使用的
镜像;也可指定带有特定标注的镜像等;
–format=“TEMPLATE” : 控制输出格式,如. ID代表ID信息,.Repository
代表仓库信息等;
–no-trune=true I false: 对输出结果中太长的部分是否进行截断,如镜像的 ID
信息,默认为是;
-q, --quiet式rue I false: 仅输出ID信息, 默认为否。
其中, 还支持对输出结果进行控制的选项,如 -f. --filter=[]、–no-trune=true I false等
-q,–quiet=true I false等。
更多子命令选项还可以通过man docker-images来查看。

tag
使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任
意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签:

$ docker tag ubuntu:latest myubuntu:latest
$ docker images
REPOSITORY	TAG			IMAGE ID		CREATED			SIZE
ubuntu		18.04		452a96d8lc30	2 weeks ago		79.6MB
ubuntu		latest		452a96d8lc30	2 weeks ago		79.6MB
myubuntu	latest		452a96d8lc30	2 weeks ago		79.6MB

细心的读者可能注意到, 这些myubuntu:latest镜像的ID跟ubuntu: latest是
完全 一 致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。
inspect
使用inspect查询详细信息 docker [image] inspect

$ docker inspect ubuntu		

3. 搜索镜像
docker search [option]

[root@localhost dockerTest]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        10926               [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1535                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   683                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   482                                     [OK]
webdevops/php-nginx                                    Nginx with PHP-FPM                              124                                     [OK]
kitematic/hello-world-nginx                            A light-weight nginx container that demonstr…   121                                     
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   91                                      [OK]
bitnami/nginx                                          Bitnami nginx Docker Image                      60                                      [OK]
linuxserver/nginx                                      An Nginx container, brought to you by LinuxS…   54                                      
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          49                                      [OK]
tobi312/rpi-nginx                                      NGINX on Raspberry Pi / armhf                   24                                      [OK]
nginx/nginx-ingress                                    NGINX Ingress Controller for Kubernetes         17                                      
blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                                      [OK]
wodby/drupal-nginx                                     Nginx for Drupal container image                12                                      [OK]
schmunk42/nginx-redirect                               A very simple container to redirect HTTP tra…   11                                      [OK]
nginxdemos/hello                                       NGINX webserver that serves a simple page co…   11                                      [OK]
centos/nginx-18-centos7                                Platform for running nginx 1.8 or building n…   10                                      
centos/nginx-112-centos7                               Platform for running nginx 1.12 or building …   7                                       
1science/nginx                                         Nginx Docker images that include Consul Temp…   4                                       [OK]
mailu/nginx                                            Mailu nginx frontend                            3                                       [OK]
pebbletech/nginx-proxy                                 nginx-proxy sets up a container running ngin…   2                                       [OK]
travix/nginx                                           NGinx reverse proxy                             2                                       [OK]
toccoag/openshift-nginx                                Nginx reverse proxy for Nice running on same…   1                                       [OK]
ansibleplaybookbundle/nginx-apb                        An APB to deploy NGINX                          0                                       [OK]
wodby/nginx                                            Generic nginx                                   0                                       [OK]

可以看到返回了很多包含关键字的镜像, 其中包括镜像名字、 描述、 收藏数(表示该镜像
的受欢迎程度)、 是否官方创建、 是否自动创建等。默认的输出结果将按照星级评价进行排序。
更多命令查看docker search --help
如果需要拉取指定的内容直接 docker pull 上述的NAME
4. 删除和清理镜像
使用标签删除镜像
使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMAGE [IMAGE … ], 其中 IMAGE 可以为标签或 ID。
-f, -force: 强制删除镜像, 即使有容器依赖它;
-no-prune: 不要清理未带标签的父镜像。

$ docker rmi myubuntu:latest

如果镜像存在多个相同的ID删除不会影响此镜像,如果只剩一个,那么再次删除就是完全彻底删除镜像了。
使用docker ps -a命令可以看到本机上存在的所有容器
注意, 当有该镜像创建的容器存在时, 镜像文件默认是无法被删除的,需要先删除容器

$ docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference
"ubuntu:18.04" (must force) - con七ainer a2lc0840213e is using i七s referenced
image 8flbd2lbd25c
$ docker rm 8flbd2lbd25c
$ docker rmi ubuntu:18.04

查看当前本机上存在的所有容器

[root@localhost dockerTest]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
ce8a985d2d82        nginx               "/bin/bash"              14 hours ago        Exited (0) 14 hours ago                         agitated_kapitsa
7c429fcd10c3        nginx:Dockerfile    "nginx -g 'daemon of…"   18 hours ago        Exited (137) 14 hours ago                       optimistic_antonelli
ec4cf7d4dc31        nginx               "nginx -g 'daemon of…"   21 hours ago        Exited (0) 20 hours ago                         vigilant_grothendieck

清理镜像
使用Docker 一 段时间后, 系统中可能会遗留一些临时的镜像文件, 以及 一 些没有被使
用的镜像, 可以通过docker image prune命令来进行清理。
支待选项包括:
D -a, -all: 删除所有无用镜像, 不光是临时镜像;
D -fil 七 er fil 七 er: 只清理符合给定过滤器的镜像;
D -f, -force: 强制删除镜像, 而不进行提示确认。
第3章 使用Docker镜像 •!• 35
例如, 如下命令会自动清理临时的遗留镜像文件层, 最后会提示释放的存储空间:
$ docker image prune -f
. . .
Total reclaimed space: 1.4 GB

5. 创建镜像
创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基千本地模板导入、 基于
Dockerfile 创建。
Docker 的 commit、build 子命令。(import略过)
commit方式
首先创建容器,指定一个镜像,根据镜像创建容器在提交一个新的镜像。

$ docker run -it ubuntu:18.04 /bin/bash
root@a925cb40b3f0:/# touch test
root@a925cb40b3f0:/# exit

记住容器的 ID 为 a925cb40b3f0。

$ docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test:0.1

查看镜像信息

$ docker images

build方式
创建Dockerfile,Dockerfile就是一个文本文件,只要遵守Dockerfile规范编写执行命令就可以生成一个新的镜像。
docker build[OPTIONS]上下文路径|URL
创建一个Dockerfile文本

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
vi Dockerfile
[root@localhost dockerTest]# ll
总用量 110296
-rw-r--r--. 1 root root         0 2月  19 12:52 Dockerfile

$ docker pull nginx
$ docker build -t Dockerfile.
或者
$ docker build -t test:0.3 -f  /path/to/a/Dockerfile .


或$ docker build -t Dockerfile:v0.1 .
或$ docker build -f /path/to/a/Dockerfile .

使用-t指定了镜像名为Dockerfile,由于没有使用-f指令,所以默认使用上下文路径下名为Dockerfile的文件认为是构建镜像的"Dockerfile"。最后指定上下文路径,在这条命令中,上下文路径是.
可参考其资料如和书写自己的Dockerfile及详细语法
https://www.cnblogs.com/ityouknow/p/8588725.html
6. 存出和载入镜像
生成镜像分享

$  docker  save  -o  ubuntu_18.04.tar  ubuntu:18 .0 4

载入镜像

$ docker  load  -i ubuntu_18.04.tar

四、操作docker容器

原文地址:https://www.cnblogs.com/liclBlog/p/15349519.html