一、Docker介绍

Docker是一个提供集中式平台来执行应用程序的软件。它将软件组件包装成一个完整的标准化单元,其中包含所有要运行的内容。无论是代码,运行时环境,工具还是程序库。它保证软件能始终按预期那样运行

Docker提供了一种称为容器的隔离环境中运行应用程序的功能。 您可以在给定的主机上同时运行多个容器。 它是轻量级的,可立即启动并使用较少的内存。 它是默认安全的,因为每个容器彼此隔离。

注意 - Docker 容器并不是针对某种特定的平台。它可以在任何计算机,任何基础架构和云中运行。

Docker引擎是一个包含以下主要组件的客户端服务器应用程序:

  • 一种服务器,它是一种称为守护进程并且长时间运行的程序。
  • REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
  • 一个有命令行界面(CLI)工具的客户端。

Docker遵循客户端 - 服务器架构。 其架构主要分为三个部分:

  • 客户端(Client):Docker提供命令行界面(CLI)工具,客户端与Docker守护进程交互。客户端可以构建,运行和停止应用程序。客户端还可以远程与Docker_Host进行交互。
  • Docker_Host:它包含容器,映像和Docker守护程序。它提供完整的环境来执行和运行应用程序。
  • 注册表(Registry):它是全局映像库。可以访问并使用这些映像在Docker环境中运行应用程序。

如下图所示

Docker需要两个重要的安装要求:

它仅适用于64位Linux安装,注意:是64位的Linux系统。

它需要Linux内核版本3.10或更高版本。

uname -r

uname --m

Docker中:

容器是映像的运行实例。Docker容器是一个独立且安全的应用平台,但它可以共享和访问在不同的主机或容器中运行的资源。

映像是一个只读模板,其中包含创建Docker容器的说明。映像没有状态,永远不会改变。 Docker Engine提供核心Docker技术,支持映像和容器。

docker run hello-world

  • docker:它是docker引擎,用于运行docker程序。它向操作系统通知指定运行docker程序。
  • run:此子命令用于创建和运行docker容器。
  • hello-world:这是一个映像的名称。需要指定要加载到容器中的映像的名称。

二、Dockerfile说明

Docker Dockerfile

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。

docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。

docker build -f /path/to/a/Dockerfile

Dockerfile文件说明

说明不区分大小写,但必须遵循建议使用大写字母的约定。

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM

一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

在这里列出了一些常用的说明。

FROM

该指令用于设置后续指令的基本映像(指定扩展自哪个父级镜像)。有效的Dockerfile必须使用FROM作为其第一条指令。

FROM ubuntu

LABEL

可以为映像添加标签来组织项目的映像。需要使用LABEL指令设置映像的标签。

LABEL vendorl = "YiiBai"

RUN

该指令用于执行当前映像的任何命令。

RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'

CMD

这用于执行映像的应用程序。应该以下列形式总是使用CMD

CMD ["executable", "param1", "param2"?]

这是使用CMD的首选方法。Dockerfile文件中只能有一个CMD。如果使用多个CMD,则只会执行最后一个CMD

COPY

该指令用于将来自源的新文件或目录复制到目的地的容器的文件系统。

COPY abc/ /xyz

规则

source路径必须在构建的上下文之内。无法使用COPY ../something /something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。如果source是目录,则会复制目录的全部内容,包括文件系统元数据。

WORKDIR

WORKDIR用于为Dockerfile中的RUN,CMD和COPY指令设置工作目录。如果工作目录不存在,它默认将会创建。

我们可以在Dockerfile文件中多次使用WORKDIR。

三、Docker安装

http://get.daocloud.io/#install-docker

Windows安装

https://www.docker.com/docker-windows

https://store.docker.com/editions/community/docker-ce-desktop-windows

一旦安装Docker for Windows,将无法再使用VMware虚拟化产品以及其他虚拟化产品,如无法再使用VMware Workstation和Virtualbox等。

window10安装docker时报错 hyper-v feature is not enabled 打开 控制面板,找到 程序和功能,在左侧菜单找到 启动或关闭Windows功能,如图所示,把 Hyper-V 树节点全部勾选即可。

安装完可以控制台中运行:

Docker

docker -version

Linux安装

http://guide.daocloud.io/dcs/3-9152643.html

curl -sSL https://get.daocloud.io/docker | sh

卸载Docker:

sudo apt-get remove docker docker-engine

配置 Docker 加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://c8b46d9b.m.daocloud.io

该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。

docker version

docker images

docker run docker/whalesay cowsay jfzpoi

四、常用的Docker命令

  1. 查看Docker版本

docker version

它用于查看Docker的客户端和服务器版本。如下图所示。

  1. 从Docker文件构建Docker映像

docker build -t image-name docker-file-location

-t:它用于指定使用提供的名称来标记Docker映像。

  1. 运行Docker映像

docker run -d image-name

-d:用于创建守护程序进程。

  1. 查看可用的Docker映像

docker images

  1. 查看最近的运行容器

docker ps -l

-l:它用于显示最新的可用容器。

  1. 查看所有正在运行的容器

docker ps -a

-a:它用于显示所有可用的容器。

  1. 停止运行容器

docker stop container_id

container_id:由Docker分配给容器的Id。

  1. 删除一个映像

docker rmi image-name

  1. 删除所有映像

docker rmi $(docker images -q)

  1. 强制删除所有映像

docker rmi -r $(docker images -q)

-r:用于强制删除映像。

  1. 删除所有容器

docker rm $(docker ps -a -q)

  1. 进入Docker容器

docker exec -it container-id bash

五、Docker Java应用程序示例

建立目录放java文件

mkdir -p /logs/java-docker-app

nano Hello.java

1
2
3
4
5
class Hello{  
    public static void main(String[] args){  
        System.out.println("This is first jfz java app \n by using Docker");  
    }  
}

建立Dockerfile

cd /logs/java-docker-app

nano Dockerfile

1
2
3
4
5
FROM java:8
COPY . /var/www/java  
WORKDIR /var/www/java 
RUN javac Hello.java  
CMD ["java", "Hello"]

构建

java-app是的映像名称。当然Docker的映像名称可以是任意的。

docker build -t java-app .

运行

docker run java-app