Docker云计算

如何使用dockerfile对镜像进行打包

Docker容器技术在最近几年得到了越来越广泛的应用。我们先简单的知道一下docker的主要三个概念名词,仓库(repository)、容器(container)、镜像(image)。概念请查看官方文档,在这里不一一详细说明。(Docker中文文档:http://www.dockerinfo.net/document)

==>总而言之言而总之:从dockerhub(或者私有仓库)中pull一个镜像过来,依托镜像给做成容器。

如图:

docker-gaishu.jpg插图

docker–依托dockerfile进行打包镜像

这张高大上的图,想表明的就是一个容器(container)都是以镜像层去打包的。

好的!简单的概念性东西咱不做具体讲解,如今这么火爆的技术,各种分分钟入门的文章随处可见。咱这回直接上干货,如何利用Dockerfile创建自己的基于Centos7打包nginx镜像。

这里在多说一句:既然容器都是以镜像层去打包的,镜像层越少,镜像也就越小,所以写Dockerfile的时候请一定惜字如金!!(打包前先整理好思路,能一次完成的绝不整两次!!)

创建工作目录(这里注意所有的文件包括所需要的安装包全部在这个目录内)

#mkdir /root/centos7-nginx
#cd /root/centos7-nginx

下载一个nginx的tar包

#wget http://nginx.org/download/nginx-1.17.2.tar.gz

准备就绪,开始编写Dockfile:

#vim Dockerfile
FROM centos:latest									
#基于centos镜像
LABEL maintainer="AndyX.Net"				
#标注作者联系方式等信息
WORKDIR /usr/local/src/							
#当前工作目录
ADD nginx-1.17.2.tar.gz ./		  
#本地文件在当前目录,ADD则直接解压到当前工作目录(/root/centos7-nginx)
WORKDIR nginx-1.17.2/								
#工作目录进入到解压后目录
RUN yum install -y gcc gcc-c++ && 					
#运行shell命令
    yum install -y pcre pcre-devel && 			
    yum install -y zlib zlib-devel && 
    yum install -y openssl openssl-devel libssl-dev && 
    ./configure --prefix=/usr/local/nginx  && 
    make  && make install
EXPOSE 80										
#暴露端口为80

准备工作已经做好了,开始创建镜像

#docker build –t my_nginx:v1-1 ./
#按照当前目录内dockerfile打包镜像,名字为my_nginx:v1-1

查看镜像是否打包完成

# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my_nginx            v1-1                e1bcade56c2c        2 hours ago         369MB
centos7              latest             1e9148f113c0        7 weeks ago         202MB

镜像已经准备好了,开始创建容器

# docker run --name andyxnet_nginx1 -d -it -p 8080:80 my_nginx:v1-1
--name 指定容器名称 -d 后台运行 –i 交互模式 –t tty –p指定映射端口 将docker80端口映射到宿主机的8080端口 ,最后指定镜像名称

查看当前存在的容器

# docker container  ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
a5238e9f0c4        my_nginx:v1-1       "/bin/bash"         2 minutes ago       Up 2 minutes        0.0.0.0:8080->80/tcp   andyxnet_nginx1

可以看到刚创建的容器,现在进入到容器中

# docker exec -it a5238e9f0c4 /bin/bash
这里注意:ID号就是上面查看到的容器的ID号(ID号随机分配)

容器内启动nginx并确认

# /usr/local/nginx/sbin/nginx
# ps -ef | grep nginx
root         32      0  0 17:04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody       33     32  0 17:04 ?        00:00:00 nginx: worker process

至此,基于centos的nginx容器已经启动完成,测试吧:


先在容器内测试:
# curl http://127.0.0.1:80
我们可以看到welcome to nginx的欢迎页面了

最后用浏览器访问宿主机的8080端口,也已经可以看到nginx欢迎界面了!!

大功告成!!就这么简单!!