admin管理员组

文章数量:1545138

1.验证电脑是否支持docker

docker需要支持微软的硬件虚拟化技术,且windows10只支持专业版(由于不用windows10请自行百度吧),windows10的安装和windows7不同,windows7,8需要Toolbox,而windows10不用

windows7请下载securable软件进行查看

点击下载

出现如下两种之一即为支持硬件虚拟化技术

2.Docker的版本说明

Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise Edition)

Docker Engine改为Docker CE(社区版) 

Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。事实上,Docker CE 17.03,可理解为Docker 1.13.1的Bug修复版本。因此,从Docker 1.13升级到Docker CE 17.03风险相对是较小的。

Docker CE有两种版本:

edge版本每月发布一次,主要面向那些喜欢尝试新功能的用户。

stable版本每季度发布一次,适用于希望更加容易维护的用户(稳定版)。

edge版本只能在当前月份获得安全和错误修复。而stable版本在初始发布后四个月内接收关键错误修复和安全问题的修补程序。这样,Docker CE用户就有一个月的窗口期来切换版本到更新的版本。举个例子,Docker CE 17.03会维护到17年07月;而Docker CE 17.03的下个稳定版本是CE 17.06,这样,6-7月这个时间窗口,用户就可以用来切换版本了。

Docker Data Center改为Docker EE(企业版) 

Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

Docker EE提供三个服务层次:

服务层级功能

Basic包含用于认证基础设施的Docker平台
Docker公司的支持
经过 认证的、来自Docker Store的容器与插件
Standard添加高级镜像与容器管理
LDAP/AD用户集成
基于角色的访问控制(Docker Datacenter)
Advanced添加Docker安全扫描
连续漏洞监控

 

Docker从17.03开始,转向基于时间的YY.MM 形式的版本控制方案,类似于Canonical为Ubuntu所使用的版本控制方案。

Docker EE和stable版本的版本号保持一致,每个Docker EE版本都享受为期一年的支持与维护期,在此期间接受安全与关键修正。

3.下载docker

打开官网 docker官网点击我  点击Get Docker ,首先是Docker的两个版本说明及其区别,然后是支持的平台。注意了没有Windows 7,所以不要盲目的就点击下载。

在页面的左侧菜单中点击 Docker Toolbox(legacy) ->Install Toolbox on Windows。这里说了Docker Toolbox提供一种让老的windows操作系统使用Docker的方法,点击 Get Docker Toolbox for Windows 下载211.50M很快就能下载完。 

然后

4.安装Docker Toolbox

1.帮助改善docker不用勾选

 

2.选择安装到哪里

3.选择安装,默认就行

Kitematic 是一个具有现代化的界面设计的自由开源软件,它可以让我们在 Docker 中交互式执行任务。Kitematic 设计的非常漂亮、界面美观。使用它,我们可以简单快速地开箱搭建我们的容器而不需要输入命令,可以在图形用户界面中通过简单的点击从而在容器上部署我们的应用。Kitematic 集成了 Docker Hub,允许我们搜索、拉取任何需要的镜像,并在上面部署应用。它同时也能很好地切换到命令行用户接口模式。目前,它包括了自动映射端口、可视化更改环境变量、配置卷、流式日志以及其它功能。

4.安装完成

桌面上多了下面三个图标

5.运行终端窗口,安装相应文件

1.双击击“Docker Quickstart Terminal”启动一个终端窗口,自动执行脚本获取boot2docker.iso到本地路径“C:\Users\zhaobaolong\.docker\machine\machines\default”

错误1:如果报错就按照下面的方式去找到git的安装位置。如果不报错就不用更改了,下面是未更改前

下面是更改后。

然后双击运行Docker Quickstart Terminal

错误:2:由于网络原因下载失败,再次进行下载时候报错

按照下面的方式,删除下载生成的临时文件,我的地址是在C:\Users\Administrator\.docker\machine\cache

boot2docker.iso下载过慢怎么办?

点击手动去github去下载

点击去下载

下图即为地址,点击上面进去有很多版本,选择下图所示的版本进行下载

下载完成后将boot2docker.iso然后放置到对应的目录,我的目录是C:\Users\Administrator\.docker\machine\cache

如果你没遇到错误就应该是如下图所示:

因为我运行失败了。而且网络不好,上面的图不是我截取的。所以请忽略版本,看个大概就行

如果是手动下载的boot2docker.iso文件,再次运行Docker Quickstart Terminal终端窗口

会在下面的目录发现多了一个machines文件夹,default里面也生成了一些文件

最后终端窗口会变成如下所示

6.验证安装

docker run hello-world

出现上图即为安装成功!

7.docker更换镜像源或者设置阿里云镜像加速

由于默认的国外镜像源太慢了!!!我们要换成国内的!!!

进入宿主机 docker-machine ssh

点击进入阿里云官网

然后没注册就注册,登陆,点击下面的"创建我的容器镜像"

提示你什么没开通服务,别理他,确认 就好

然后再左边会看到 镜像加速器

点击 镜像加速器,然后就看到加速器的地址了。下面有不同平台的操作文档,写的比我好,自己研究一下就行了。

本文是直接按照下面的方式进行配置云加速代理的

  1. 在Windows命令行执行docker-machine ssh 进入VM bash
  2. sudo vi /var/lib/boot2docker/profile
  3. --label provider=virtualbox的下一行添加--registry-mirror https://xxxxxxxx.mirror.aliyuncs
  4. 重启docker服务:sudo /etc/init.d/docker restart或者重启VM:exit退出VM bash,在Windows命令行中执行docker-machine restart

 

8.使用终端工具来操控docker的宿主机

进入宿主机 docker-machine ssh

查看IP地址 ifconfig

使用CRT终端工具连接宿主机

默认的用户名和密码是: 用户名 docker 密码 tcuser

9.docker的使用

docker run 的使用

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

docker run ubuntu:15.10 /bin/echo "Hello world"

各个参数解析:

  • docker: Docker 的二进制执行文件。

  • run:与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

进行交互式容器操作

docker run -i -t ubuntu:15.10 /bin/bash

我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力

各个参数解析:

  • -t:在新容器内指定一个伪终端或终端。

  • -i:允许你对容器内的标准输入 (STDIN) 进行交互。

此时我们已进入一个 ubuntu15.10系统的容器

我们尝试在容器中运行命令 cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

启动容器(后台模式)

使用以下命令创建一个以进程方式运行的容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

在输出中,我们没有看到期望的"hello world",而是一串长字符

这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps来查看

CONTAINER ID:容器ID

NAMES:自动分配的容器名称

在容器内使用docker logs命令,查看容器内的标准输出 

docker logs 2b1b7a428627

或者 docker logs stoic_ptolemy

停止容器

我们使用 docker stop 命令来停止容器:

10.docker容器的使用

docker客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如我们要查看 docker stats 指令的具体使用方法:

查看已经下载过的镜像

docker images

运行一个web应用

使用 docker 构建一个 web 应用程序。在docker容器中运行一个 Python Flask 应用来运行一个web应用。

docker run -d -P training/webapp python app.py

参数说明:

  • -d:让容器在后台运行。

  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

使用 docker ps 来查看我们正在运行的容器,这里多了端口信息。

PORTS
0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。

这时我们可以通过浏览器访问WEB应用

docker run -d -p 5000:5000 training/webapp python app.py

容器内部的 5000 端口映射到我们本地主机的 5000 端口上。

网络端口的快捷方式

通过docker ps 命令可以查看到容器的端口映射,docker还提供了另一个快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。

上面我们创建的web应用容器ID为:7a38a1ad55c6 名字为:determined_swanson

我可以使用docker port 7a38a1ad55c6 或docker port determined_swanson来查看容器端口的映射情况

~$ docker port 7a38a1ad55c6
5000/tcp -> 0.0.0.0:5000
~$ docker port determined_swanson
5000/tcp -> 0.0.0.0:5000

查看WEB应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

docker logs -f 容器ID或者容器名

-f:让 dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。

从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

docker top 容器ID或者容器名

检查WEB应用程序

使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker inspect 容器ID或者容器名

停止WEB应用容器

docker stop 容器ID或者容器名

重启WEB应用容器

docker start 容器ID或者容器名

正在运行的容器,我们可以使用 docker restart 容器ID或者容器名 命令来重启

移除WEB应用容器

我们可以使用 docker rm 命令来删除不需要的容器

docker rm 容器ID或者容器名

删除容器时,容器必须是停止状态,否则会报如下错误

:~$ docker rm determined_swanson
Error response from daemon: You cannot remove a running container 7a38a1ad55c6914b360b565819604733db751d86afd2575236a70a2519527361. Stop the container before attempting removal or use -f

11.docker镜像的使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

列出镜像列表

docker images

各个选项说明:

  • REPOSTITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSTITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:14.04 /bin/bash

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

~$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
6599cadaf950: Pull complete 
23eda618d451: Pull complete 
f0be3084efe9: Pull complete 
52de432f084b: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for ubuntu:13.10

查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:https://hub.docker/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

NAME:镜像仓库源的名称

DESCRIPTION:镜像的描述

OFFICIAL:是否docker官方发布

拖取镜像

我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。

docker pull httpd

下载完成后,我们就可以使用这个镜像了。

docker run httpd

创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1.从已经创建的容器中更新镜像,并且提交这个镜像
  • 2.使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit命令来退出这个容器。

此时ID为ecc874f3b9a8的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。

$ docker commit -m="has update" -a="jenrey" ecc874f3b9a8 jenrey/ubuntu:v2

 

各个参数说明:

  • -m:提交的描述信息

  • -a:指定镜像作者

  • ecc874f3b9a8:容器ID

  • jenrey/ubuntu:v2:指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 w3cschool/ubuntu:v2

使用我们的新镜像 jenrey/ubuntu 来启动一个容器

$ docker run -t -i jenrey/ubuntu:v2 /bin/bash

删除镜像

需要先删除容器(rm)再删除镜像(rmi)

docker rmi 镜像ID

构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

$ vim Dockerfile

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

$ docker build -t youj/centos:6.7 .

参数说明:

  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为4c656946c083

我们可以使用新的镜像来创建容器

$ docker run -t -i youj/centos:6.7  /bin/bash

从上面看到新镜像已经包含我们创建的用户youj

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

12.docker容器连接

Docker 容器连接

前面我们实现了通过网络端口来访问运行在docker容器内的服务。下面我们来实现通过端口连接到一个docker容器

网络端口映射

我们创建了一个 python 应用的容器。

另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

我们使用 -P 参数创建一个容器,使用 docker ps 来看到端口5000绑定主机端口32768。

我们也可以使用 -p 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

  • -P :是容器内部端口随机映射到主机的高端口。
  • -p : 是容器内部端口绑定到指定的主机端口。

docker run -d -p 5000:5000 training/webapp python app.py

另外,我们可以指定容器绑定的网络地址,比如绑定127.0.0.1。

$ docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py

这样我们就可以通过访问127.0.0.1:5001来访问容器的5002端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UPD 端口,可以在端口后面加上 /udp

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以让我们快捷地查看端口的绑定情况。

$ docker port vibrant_torvalds 5002

Docker容器连接

端口映射并不是唯一把 docker 连接到另一个容器的方法。

docker有一个连接系统允许将多个容器连接在一起,共享连接信息。

docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。

容器命名

当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用--name标识来命名容器,例如:

$ docker run -d -P --name jenrey training/webapp python app.py

我们可以使用 docker ps 命令来查看容器名称。

 

13.Docker安装Nginx

方法一、通过 Dockerfile构建

创建Dockerfile

首先,创建目录nginx,用于存放后面的相关东西。

$ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

www目录将映射为nginx容器配置的虚拟目录

logs目录将映射为nginx容器的日志目录

conf目录里的配置文件将映射为nginx容器的配置文件

进入创建的nginx目录,创建Dockerfile

FROM debian:jessie

MAINTAINER NGINX Docker Maintainers "docker-maint@nginx"

ENV NGINX_VERSION 1.10.1-1~jessie

RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
        && echo "deb http://nginx/packages/debian/ jessie nginx" >> /etc/apt/sources.list \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
                                                ca-certificates \
                                                nginx=${NGINX_VERSION} \
                                                nginx-module-xslt \
                                                nginx-module-geoip \
                                                nginx-module-image-filter \
                                                nginx-module-perl \
                                                nginx-module-njs \
                                                gettext-base \
        && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
        && ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

 

通过Dockerfile创建一个镜像,替换成你自己的名字

docker build -t nginx .

 

# docker run -d --name mynginx nginx   #启动nginx镜像,没有会自动pull

 

本文标签: 未完Docker