基礎(chǔ)條件: ubuntu14.04, docker for ubuntu14.04安裝成功
-
在本地創(chuàng)建一個簡單的tornado項目
在/Public/testApp創(chuàng)建app.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()
2.繼續(xù)創(chuàng)建我們要使用的文件, requirements.txt
tornado
3.創(chuàng)建一個sources.list用來代替ubuntu原有的數(shù)據(jù)源
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
3.創(chuàng)建Dockerfile文件構(gòu)建一個鏡像, 我們以ubuntu14.04作為基礎(chǔ)鏡像, 我們使用網(wǎng)易蜂巢的docker鏡像倉庫, https://c.163.com/hub#/m/repository/?repoId=3186, 首先拷貝14.04-tools的Dockerfile然后做一些修改
FROM hub.c.163.com/library/ubuntu:14.04
MAINTAINER lpj24
WORKDIR /myapp #工作目錄
COPY ./app.py /myapp/ #拷貝項目文件到/myapp目錄下
COPY ./Dockerfile /myapp/
COPY ./requirements.txt /myapp/
RUN mkdir -p /var/run/sshd
COPY sources.list /etc/apt/
RUN apt-get update \
&& apt-get update && apt-get install -y openssh-server vim tar wget curl rsync bzip2 iptables tcpdump less telnet net-tools lsof sysstat cron supervisor python2.7 python-pip\
&& rm -rf /var/lib/apt/lists/*
RUN sed -i s/"PermitRootLogin without-password"/"PermitRootLogin yes"/g /etc/ssh/sshd_config
RUN cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
EXPOSE 22 8888
COPY sshd.conf /etc/supervisor/conf.d/sshd.conf
COPY myapp.conf /etc/supervisor/conf.d/myapp.conf #supervisor的項目管理
RUN pip install -r requirements.txt
CMD ["/usr/bin/supervisord"]
4.創(chuàng)建myapp.conf, 從網(wǎng)易蜂巢拷貝sshd.conf到/Public/testApp/下
myapp.conf
[program:myapp]
command=python app.py
directory=/myapp
autostart=true
autorestart=true
sshd.conf
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
5.有了需要的文件之后開始構(gòu)建一個名字為pythonapp的鏡像
docker build -t pythonapp:v1 .
docker images
可以看到一個名字為pythonapp的鏡像
- 運行一個名字為appcontainer的容器, 使用宿主機4000與8888映射
docker run -d --name appcontainer1 -p 4000:8888 pythonapp:v1
#進入容器查看app進程是否已經(jīng)啟動
docker exec -it appcontainer /bin/bash
supervisorctl
#查看是否有myapp的進程 或者直接在宿主機瀏覽器127.0.0.1:4000訪問是否可以瀏覽