一、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容器Exited状态如何启动 docker exited状态_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容器