docker镜像打包流程

本文介绍如何将一个容器打包成镜像

查看本地镜像有哪些

[root@docker-86-106 ~]# docker images 
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
centos6.6                                                          repo                a98a836cbad8        2 weeks ago         278.6 MB
centos/6.6                                                         latest              657ac29e0da6        2 weeks ago         281.5 MB
ubuntu                                                             12.04               3a937a8ea9e0        3 weeks ago         147.9 MB
centos                                                             7                 2c886f766286        5 weeks ago         202.6 MB

通过镜像创建并运行一个容器

我们运行一个centos镜像,TAG为7

[root@docker-86-106 ~]# docker run -it --name my-centos centos:7 /bin/bash

参数说明:

  • -i 与容器进入交互模式
  • -t 给容器分配一个伪终端
  • --name 给容器命名

再在本机打开一个终端查看刚刚运行的容器:

[root@docker-86-106 ~]# docker ps
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS                    NAMES
7d3f82b5c6a5        centos:7           "/bin/bash"         8 minutes ago       Up 8 minutes                                 my-centos

可以看到一个NAME为 my-centos的容器了

在容器中构建我们的应用软件

这里用一个构建python web程序为例

[root@7d3f82b5c6a5 /]# yum install python-setuptools
[root@7d3f82b5c6a5 /]# easy_install tornado

写一个hello world

[root@6f49802c677c /]# cat hello.py 
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

测试容器中进程使用没问题之后,我们就可以打包镜像了

将容器打包镜像

查看我们运行的容器

fanuxdeMacBook-Air:~ fanux$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6f49802c677c        centos:7            "/bin/bash"         About an hour ago   Up About a minute                       my-centos

将my-centos容器发布成镜像,由于我们运行了一个hello world业务,且将镜像名称叫作hello-world:v1.0

fanuxdeMacBook-Air:~ fanux$ docker commit my-centos hello-world:v1.0
sha256:395d614063e13e6e1d0d2820f817995f385b443ef43b1f3f050ddebfb2ff6db4

再查看一下本机的镜像列表,可以看到多出来的hello-world镜像:

fanuxdeMacBook-Air:~ fanux$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         v1.0                395d614063e1        21 seconds ago      293.4 MB
ubuntu              my                  b2e21aa53afb        2 days ago          124.8 MB
centos              7                   970633036444        11 days ago         196.7 MB
ubuntu              latest              42118e3df429        2 weeks ago         124.8 MB

试用新的镜像

可以看到,我们新的镜像可以正常使用

fanuxdeMacBook-Air:~ fanux$ docker run -it --name -p 8888:8888 hello-world-container hello-world:v1.0 /bin/bash
[root@e8edc8accba8 /]# ls
anaconda-post.log  dev  hello.py  lib    lost+found  mnt  proc  run   srv  tmp  var
bin                etc  home      lib64  media       opt  root  sbin  sys  usr
[root@e8edc8accba8 /]# python hello.py

参数说明:

  • -p 端口映射,这样就可以通过本地的8888端口访问容器的业务,容器中监听了8888端口,仅为测试本例子业务。

然后访问http://localhost:8888 即可:

打包成文件

$ docker save golang:latest > golang.tar
$ docker load -i golang.tar

push到自己的私有仓库

$ docker tag busybox 192.168.112.136:5000/busybox
$ docker push 192.168.112.136:5000/busybox

results matching ""

    No results matching ""