首页 > Docker > Docker 第五章(Dockerfile 详解)
2015
12-19

Docker 第五章(Dockerfile 详解)

 

一、第一个Dockerfile 文件

1.1、创建一个nginx的docker镜像

[root@Tshare365-docker ~]# mkdir Tshare365_web
[root@Tshare365-docker ~]# cd Tshare365_web/
[root@Tshare365-docker Tshare365_web]# touch Dockerfile
[root@Tshare365-docker Tshare365_web]# cat Dockerfile 
# VERSION 0.0.1
FROM ubuntu:14.04
MAINTAINER Tshare365  "tshare365@com"
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install  -y  nginx
RUN echo "HI Tshare365.com" > /usr/share/nginx/html/index.html
EXPOSE 80
  1. Dockerfile由一系列指数和参数组成,每条指令都必须是大写字母且后面跟一个参数,所有Dockerfile都必须以FROM命令开始。

  2. FROM命令会指定镜像基于哪个基础镜像创建,接下来的命令也会基于这个基础镜像。

  3. MAINTAINER 指定该镜像作者

  4. RUN 在当前镜像中运行指定的命令

  5. EXPOSE 容器内的应用程序将会使用容器的指定端口,出于安全的原因,Docker并不会自动打开该端口,而是需要在使用docker run命令的时候指定该端口

  6. Dockerfile中的指令安顺序从上到下执行,所以需要合理的安排指令的顺序

  7. 每条指令都会创建一个新的镜像层并对镜像提交

二、构建新镜像

[[root@localhost ~]# cd Tshare365_web/
[root@localhost Tshare365_web]# docker build -t="tshare365/tshare365_web" .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04
 ---> d55e68e6cc9c
Step 1 : MAINTAINER Tshare365  "tshare365@com"
 ---> Using cache
 ---> 87fef334e7fc
Step 2 : RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
 ---> Using cache
 ---> f381009adccf
Step 3 : RUN apt-get update
 ---> Using cache
 ---> 8b27147ab111
Step 4 : RUN apt-get install  -y  nginx
 ---> Using cache
 ---> dbf024451d71
Step 5 : EXPOSE 80
 ---> Using cache
 ---> d40a5a622f52
Successfully built d40a5a622f52
[root@localhost Tshare365_web]#

使用 docker build 命令来构建新镜像,-t选项为新镜像设置了仓库和名称,也可以在构建中为镜像设置一个标签

tshare365/tshare365_web:v1

在上面的命令中 最后的. 告诉Docker到本地目录去查找Dockerfile文件,也可以指定git仓库的地址

 

三、构建缓存

由于每一步的提交都会将结果提交为镜像并缓存起来,但是有时候我们不想要缓存可以使用–no-cache标志

docker build --no-cache-t="tshare365/tshare365_web" .

四、查看镜像

[root@localhost Tshare365_web]# docker images tshare365/tshare365_web
REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tshare365/tshare365_web   latest              d40a5a622f52        2 minutes ago       208.5 MB
[root@localhost Tshare365_web]#

探究镜像是如何一步一步构建出来的,可以使用docker history命令查看镜像的每一层

[root@localhost Tshare365_web]# docker  history d40a5a622f52
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d40a5a622f52        3 minutes ago       /bin/sh -c #(nop) EXPOSE 80/tcp                 0 B                 
dbf024451d71        16 minutes ago      /bin/sh -c apt-get install  -y  nginx           12.72 MB            
8b27147ab111        20 minutes ago      /bin/sh -c apt-get update                       7.857 MB            
f381009adccf        22 minutes ago      /bin/sh -c echo "deb http://archive.ubuntu.co   59 B

 

五、启动容器并指定端口

[root@localhost Tshare365_web]# docker run -d -p 80 --name tshare365_web tshare365/tshare365_web nginx -g "daemon off;"
d07b17506a983558e8799d68c08025f8b60e98f38dff0769848c795fe550ded3

[root@localhost Tshare365_web]# docker ps -l
CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS              PORTS                   NAMES
d07b17506a98        tshare365/tshare365_web   "nginx -g 'daemon of   8 seconds ago       Up 6 seconds        0.0.0.0:32768->80/tcp   tshare365_web       
[root@localhost Tshare365_web]#

通过-p参数指定了docker开放的端口

通过ps 命令我们查看到时本机的32768端口映射到docker容器的80端口

也可以使用docker port命令

[root@localhost Tshare365_web]# docker port d07b17506a98  80
0.0.0.0:32768
[root@localhost Tshare365_web]#

 

 

5.1、访问测试一下docker中的nginx是否启动成功

1

 

我们看到我们访问宿主机的32768端口是映射到docker中80端口了

 

我们也可以指定将容器的端口映射到宿主机的指定端口使用

-p 80:80 80映射到80
-p 127.0.0.1:80:80  127.0.0.1的80映射到80

 

总结

由于这一章的知识点已经很多了,所以我决定把关于Dockerfile 指令放在下章中讲解如果你对docker感兴趣,请持续关注Tshare365谢谢!

 

 

 

 




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复