Docker push image

这是一篇零基础教程,分分钟教会你创建自己的Docker镜像,并对Docker的整个运行流程有基本的了解。

一. Dockerfile文件编写

要创建Docker的镜像,最基础的文件就是 Dockerfile。Docker通过解析Dockerfile文件来生成镜像;

首先需要新建一个目录,为了和其他项目隔离,我们暂且创建一个local目录,之后所有的操作都在该目录下进行;然后在该目录下创建Dockerfile(文件名就叫Dockerfile), Dockerfile内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
############################################################

# Dockerfile to build Nginx container images

# Based on Hypriot

############################################################

#这条命令指定镜像的操作系统内核
FROM resin/rpi-raspbian:latest
MAINTAINER Layne Fyc <layne.fyc@gmail.com>

#安装命令
RUN apt-get update \
&& apt-get install -y nginx \
&& apt-get -y clean

# 日志存放路径
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log

#端口http默认80,https默认443
EXPOSE 80 443

#nginx 启动命令
CMD ["nginx", "-g", "daemon off;"]

如下代码需要特别说明:

1
2
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log

所有进程都拥有三个数据流设备分别是标准输出stdout、标准输入stdin和标准错误stderr,Nginx进程也不例外。/dev/stdout 是Linux中标准的输出设备,/dev/stderr 是标准的错误输出设备,这里的意思是将所有的错误输出到error.log文件,将所有的请求输出到access.log文件。

二. Docker Images生成

保存Dockerfile文件,然后在当前目录执行如下命令

1
2
3
#arm_nginx为镜像的名字,可自定义
#laynefyc为你在hub.docker.com上的帐号
sudo docker build -t laynefyc/arm_nginx .

该命令会自动在当前目录下寻找Dockerfile文件,Docker会先下载我们指定的 FROM resin/rpi-raspbian:latest(linux内核版本)镜像,然后通过该镜像安装Nginx容器。

之后运行: docker images 将能看到生成的镜像;
接着我们尝试启动Ngxin,启动命令如下:

1
2
3
4
5
docker run -d -it -p 80:80 \
-v `pwd`/www:/www \
-v `pwd`/config:/etc/nginx/sites-enabled \
-v `pwd`/logs:/var/log/nginx \
laynefyc/arm_nginx

运行完该命令后我们会发现在当前目录生成了三个文件夹(怕麻烦请从这里clone代码 laynefyc/arm-nginx ),分别为:

  1. www 网站根目录,需要在该目录下新建一个index.html文件;
  2. logs 日志目录,其中有定义的access.log文件和error.log文件
  3. config 配置目录,需要在该目录下新建一个server文件,内容如下:

    1
    2
    3
    4
    5
    6
    server {
    listen 80;
    root /www;
    index index.html index.htm;
    server_name localhost;
    }

由于nginx加载配置文件需要重启,所以我们需要重启Ngxin再运行上面的启动命令;非常重要的一点,一定要在『当前local』目录运行nginx启动命令,不然浏览器访问会失败;

三. Docker Images上传

先到 https://hub.docker.com 注册一个帐号,并且新建一个 repository命名为 account/arm_nginx(比如:laynefyc/arm_nginx)

然后运行如下上传命令:

1
2
3
4
5
6
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: laynefyc
Password:
Login Succeeded
$ docker push laynefyc/arm_nginx

最后看到如下链接:laynefyc/arm_nginx

PS:给镜像打个标签

1
docker tag  d217a603c7d0 laynefyc/arm_nginx:v1.0.0

d217a603c7d0为镜像编号,v1.0.0为镜像版本;效果看这里

四. 总结

Docker能大大的节省运维成本,谷歌最早发布Docker时就预言多年后Docker将让谷歌GAE超越亚马逊AWS,谷歌大法诚不欺我Docker的应用已经相当广泛。