docker 安装Nginx镜像demo

 为了更好的理解,在正式开始之前,先熟悉下相关概念

镜像(Image)、容器(Container)、仓库(Repository)。

1.1镜像

   docker镜像是使用Dockerfile脚本,将你的应用以及应用的依赖包构建而成的一个应用包,它通常带有该应用的启动命令。而这些命令会在容器启动时被执行,也就是说你的应用在启动容器时被启动。

镜像的创建,需要通过配置Dockerfile脚本,然后执行docker build命令来创建。

1.2 容器

 容器提供的核心概念是隔离,提供三种隔离类型:

  • 工作区隔离(流程、网络)
  • 资源隔离(cpu\内存)
  • 文件系统隔离(联合文件系统)

不仅可以分发应用程序,还可以以实用的方式交付运行应用程序所需的整个环境。

  容器是使用 docker run --name 容器名 镜像 命令创建的,独立于宿主机(服务器)的沙箱,也可以理解为一个带有特殊结构的盒子,主要作用就在于给镜像提供运行空间和环境,并执行镜像的指令。

1.3 仓库

  不是存容器,而是存储docker镜像。

可以把docker镜像通过push命令推送到docker仓库,也可以通过用docker命令pull 把镜像拉取下来。

关系

使用docker前,你必须先安装它。

首先要有镜像,有了镜像才能基于镜像创建容器,才能把镜像存储在仓库。(镜像是基础,容器是镜像使用者,仓库是镜像的管理员。)

 基础镜像通常不需要自己创建,docker官方有提供很多基础镜像供用户使用,比如nodejs镜像,java镜像,mongodb镜像,nginx镜像等等

二  镜像

而创建镜像,首先得配置Dockerfile脚本。镜像是基于Dockerfile脚本来构建的。

2.1 基础镜像

  docker有这么一种机制,在构建镜像时,它可以依赖一个父镜像作为底层镜像,与当前正要被构建的镜像一起打包,从而构建成一个全新的镜像。而这个被用作依赖的父镜像,就是基础镜像。

  可以理解为,一个应用它不是随处可运行的,它的运行需要依赖操作系统环境和对应的依赖().

  • 因此,在配置项目Dockerfile创建镜像脚本之前,需要先确立一个基础镜像。主要是通过在Dockerfile脚本中使用From命令指定依赖一个父镜像(基础镜像)。
  • 基础镜像通常不需要自己创建,docker官方有提供很多基础镜像供用户使用,比如nodejs镜像,java镜像,mongodb镜像,nginx镜像等等.

2.2 Dockerfile脚本构成

docker镜像是通过配置Dockerfile脚本,然后执行docker build命令来创建的。

Dockerfile脚本通常分为以下四部分:

  • 基础镜像信息   --只有一个From指令,指定依赖的基础镜像
  • 维护者信息      --只有一个MAINTAINER指令,用于描述该镜像的维护者信息
  • 镜像操作指令   --很多:
  • 容器启动时执行的指令 
    • --CMD 每个 Dockerfile 只能有一条 CMD 命令,可被 docker run 提供的参数覆盖。
    • ENTRYPOINT 它不会被 docker run 提供的参数覆盖

以下介绍镜像操作指令:

COPY
COPY指令用于拷贝宿主机的源目录/文件到容器内的某个目录。接受两个参数,源目录路径和容器内目录路径。

ADD
功能和用法与COPY指令基本相同,不同在于使用ADD指令拷贝时,如果拷贝的是压缩文件,拷贝到容器中时会自动解压为目录。

WORKDIR
指定RUN、CMD、ENTRYPOINT 指令的工作目录

RUN
RUN是核心指令,它接受命令作为参数并用于创建镜像。命令较多时可用""换行。

USER
USER命令用于设置运行容器的UID。

VOLUME
VOLUME命令用于让你的容器访问宿主机上的目录。一般用来存放数据库和需要保持的数据等

ONBUILD
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。

ENV
ENV命令用于设置环境变量,在容器内被脚本或者程序调用。

EXPOSE
EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。

2.3 镜像的创建

镜像是基于Dockerfile脚本,使用docker build命令创建的。上面已经对Dockerfile做了介绍。下面来说说如何使用Dockerfile脚本创建。
语法:

 docker build [OPTIONS] PATH

PATH为Dockerfile脚本所在的目录,通常放在项目根目录下,使用"."表示。
-t 标记,用来添加tag,指定新的镜像信息,比如镜像名称,标签。

2.4  本地镜像的管理

  • 1,查看镜像:docker images
  • 2,删除镜像:docker rmi 镜像
  • 3,镜像重命名:docker tag 原镜像tag 新镜像tag
  • 4,查看镜像创建历史:docker history 镜像
  • 5,镜像归档:docker save 镜像
  • 6,基于归档文件创建镜像:docker import 归档文件 新镜像tag

2.5  镜像的使用

镜像通过docker run命令使用的,这是关于容器部分的操作。

三 demo验证

我本地做测试用的:Nginx demo

我们要部署的服务是用 Nginx 来 server 一个简单的 HTML 文件 html/index.html

3.1 准备工作,打开一个终端:

$ mkdir docker-demo
$ cd docker-demo
$ mkdir html
$ echo '<h1>Hello Docker!</h1>' > html/index.html

生成一个页面。

3.2 接下来在当前目录创建一个叫 Dockerfile 的新文件

FROM nginx
COPY html/* /usr/share/nginx/html

from 相关知识参照上一篇。

第二行把我们的静态文件复制到镜像的 /usr/share/nginx/html 目录下。也就是 Nginx 寻找静态文件的目录。

3.3 构建镜像

$ docker build -t docker-demo:0.1 .

最好在刚才创建的这个目录中运行 docker build。如果是其他目录,docker 会把当前目录的所有文件作为上下文发送给负责构建的后台进程。

3.4. 查看镜像

docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker-demo         0.1                 54c5fe4fd4d0        13 minutes ago      126MB

nginx               latest              c7460dfcab50        6 days ago          126MB

这行命令中的名称 docker-demo 可以理解为这个镜像对应的应用名或服务名,0.1 是标签。

3.5. 运行镜像

docker run --name docker-demo -d -p 8080:80 docker-demo:0.1

打开浏览器,输入:http://127.0.0.1:8080/

查看 运行的容器

docker container ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

5c95072fb6ac        docker-demo:0.1     "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->80/tcp   docker-demo

如果要停止并 删除

$ docker container stop docker-demo
$ docker container rm docker-demo

发布了521 篇原创文章 · 获赞 94 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/104000199