20170605

Creating the Dockerfile to Automatically Build the Image:

1.启动一个容器:

docker run -i -t -p 7000:80 centos7:cg /bin/bash

注释:centos7:cg这个镜像是在busybox +sshd+systemd+epel还加了监控工具sar+netstat等的镜像

  在镜像中的操作:    

41 yum update
42 yum -y install tar git curl nano wget dialog net-tools
43 yum -y install build-essential
44 yum install -y python python-dev python-distribute python-pip
45 yum install -y python python-dev python-distribute python-pip
46 yum install -y python python-dev*
47 yum install -y python-pip*
48 yum provides python-pip
49 yum provides pip
50 yum provides pip
51 yum search pip
52 pip
53 yum -y install pip
54 yum -y install pip*
55 yum -y --enablerepo=epel install python-pip
56 pip install flask
57 pip install --upgrade pip
58 pip install flask
59 mkdir my_application
60 cd my_application
61 vi app.py

  cat app.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()


62 vi requirements.txt
63 pip install cherrypy
64 vi server.py

# Import your application as:
# from app import application
# Example:

from app import app

# Import CherryPy
import cherrypy

if __name__ == '__main__':

    # Mount the application
    cherrypy.tree.graft(app, "/")

    # Unsubscribe the default server
    cherrypy.server.unsubscribe()

    # Instantiate a new server object
    server = cherrypy._cpserver.Server()

    # Configure the server object
    server.socket_host = "0.0.0.0"
    server.socket_port = 80
    server.thread_pool = 30

    # For SSL Support
    # server.ssl_module            = 'pyopenssl'
    # server.ssl_certificate       = 'ssl/certificate.crt'
    # server.ssl_private_key       = 'ssl/private.key'
    # server.ssl_certificate_chain = 'ssl/bundle.crt'

    # Subscribe this server
    server.subscribe()

    # Start the server engine (Option 1 *and* 2)

    cherrypy.engine.start()
    cherrypy.engine.block()

65 mkdir app
66 python server.py
67 pwd
68 history

最后在容器中的结构:

/my_application
    |
    |- requirements.txt  # File containing list of dependencies
    |- /app              # Application module (which should have your app)
    |- app.py            # WSGI file containing the "app" callable
    |- server.py         # Optional: To run the app servers (CherryPy)

2.现在开始创建Dockerfile:

[root@node ~]# cat Dockerfile
############################################################
# Dockerfile to build Python WSGI Application Containers
# Based on jt
############################################################

# Set the base image to Ubuntu
FROM centos7:cg

# File Author / Maintainer
MAINTAINER Maintaner Name

# Add the application resources URL
#RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list

# Update the sources list
RUN yum update

# Install basic applications
RUN yum install --enablerepo=epel -y tar git curl nano wget dialog net-tools

# Install Python and Basic Python Tools
RUN yum install --enablerepo=epel -y python python-dev python-distribute python-pip
#genxin
RUN pip install --upgrade pip
# Copy the application folder inside the container
ADD /my_application /my_application

# Get pip to download and install requirements:
RUN pip install -r /my_application/requirements.txt

# Expose ports
EXPOSE 80

# Set the default directory where CMD will execute
WORKDIR /my_application

# Set the default command to execute
# when creating a new container
# i.e. using CherryPy to serve the application
CMD python server.py &
[root@node ~]#

注意这里:ADD /my_application /my_application

我们可以换成:

RUN git clone [application repository URL]
至此我们用dockefile成功构建了一个镜像并访问成功
docker build -t my_application_img .

[root@node ~]# docker run -p 7001:80 -i -t --name jt my_application_img
[02/Jun/2017:20:05:49] ENGINE Bus STARTING
[02/Jun/2017:20:05:49] ENGINE Started monitor thread 'Autoreloader'.
[02/Jun/2017:20:05:49] ENGINE Started monitor thread '_TimeoutMonitor'.
[02/Jun/2017:20:05:49] ENGINE Serving on http://0.0.0.0
[02/Jun/2017:20:05:49] ENGINE Bus STARTED

 

 好了,成功用dockerfile发布了一个小代码

私有仓库搭建:

mkdir -p /opt/data/registry

因为是centos7所以都要在所有节点上修改:

vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.36.151:5000

systemctl daemon-reload

systemctl restart docker

启动一个注册容器:

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

为上传镜像打个标签:

docker tag busybox 192.168.36.151:5000/test

另外一个机器上面测试成功:

[root@node ~]# docker pull 192.168.36.151:5000/test
Using default tag: latest
Trying to pull repository 192.168.36.151:5000/test ...
latest: Pulling from 192.168.36.151:5000/test
Digest: sha256:32a0e4c673002bd7d4585587fb06ae9826cda9808317561b790ebef374bbb312

原文地址:https://www.cnblogs.com/Jt00/p/6943687.html