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