Docker生产实践(六)

本文介绍了一种利用Docker进行分层镜像构建的方法,包括从基础操作系统镜像到具体应用服务镜像的构建流程。通过五个具体案例详细展示了如何构建不同功能的Docker镜像。

镜像构建思路

思路:分层设计

最底层:系统层,构建自己适用的不同操作系统镜像;

中间层:根据运行环境,如php、java、python等,构建业务基础运行环境层镜像;

最上层:根据具体的业务模块,构建应用服务层镜像。

目录构建树结构

案例1:centos 7系统镜像构建

1
2
3
4
5
cd /root
mkdir -p /root/docker/system/centos
cd /root/docker/system/centos
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  # 下载阿里RHEL 7 epel源
cp /etc/yum.repos.d/epel.repo epel.repo

创建镜像文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim Dockerfile
# This Dockerfile
  
# Base image
FROM centos
  
# Who
MAINTAINER shhnwangjian xxx@163.com
  
# EPEL
ADD epel.repo /etc/yum.repos.d/
 
# Base pkg
RUN yum install -y wget supervisor git tree net-tools sudo psmisc mysql-devel && yum clean all

构建镜像

1
docker build -t shhnwangjian/centos:base .

 

案例2:基于案例1的centos系统镜像,构建python运行环境镜像

1
2
mkdir -p /root/docker/runtime/python
cd /root/docker/runtime/python

创建镜像文件

1
2
3
4
5
6
7
8
9
10
11
12
vim Dockerfile
# Base image
FROM shhnwangjian/centos:base
 
# Who
MAINTAINER shhnwangjian xxx@163.com
 
# Python env
RUN yum install -y python-devel python-pip supervisor
 
# Upgrade pip
RUN pip install --upgrade pip

构建镜像

1
docker build -t shhnwangjian/python .

 

案例3:构建带SSH功能的centos 7系统镜像

1
2
3
4
mkdir -p /root/docker/system/centos-ssh
cd /root/docker/system/centos-ssh
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  # 下载阿里RHEL 7 epel源
cp /etc/yum.repos.d/epel.repo epel.repo

创建镜像文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Docker for CentOS
 
# Base image
FROM centos
  
# Who
MAINTAINER shhnwangjian xxx@163.com
  
# EPEL
ADD epel.repo /etc/yum.repos.d/
 
# Base pkg
RUN yum install -y openssh-clients openssl-devel openssh-server wget supervisor git tree net-tools sudo psmisc mysql-devel && yum clean all
 
# For SSHD
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN echo "root:123456" | chpasswd

构建镜像

1
docker build -t shhnwangjian/centos-ssh .

 

案例4:基于案例3的centos-ssh系统镜像,构建python-ssh运行环境镜像

1
2
mkdir -p /root/docker/runtime/python-ssh
cd /root/docker/runtime/python-ssh

创建镜像文件

1
2
3
4
5
6
7
8
9
10
11
# Base image
FROM shhnwangjian/centos-ssh
 
# Who
MAINTAINER shhnwangjian xxx@163.com
 
# Python env
RUN yum install -y python-devel python-pip supervisor
 
# Upgrade pip
RUN pip install --upgrade pip

构建镜像

1
docker build -t shhnwangjian/python-ssh .

 

案例5:基于案例4的python-ssh镜像,构建app应用服务镜像

1
2
mkdir -p /root/docker/app/web-app
cd /root/docker/app/web-app

应用程序文件app.py

1
2
3
4
5
6
7
8
9
10
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello():
        return "Hello World!"
 
if __name__ == "__main__":
        app.run(host="0.0.0.0", debug=True)

python依赖包文件requirements.txt

1
Flask

supervisor配置文件app-supervisor.ini

1
2
3
4
5
6
7
8
9
10
11
12
[program:web-api]
command=/usr/bin/python2.7 /opt/app.py
process_name=%(program_name)s
autostart=true
user=www
stdout_logfile=/tmp/app.log
stderr_logfile=/tmp/app.error
 
[program:sshd]
command=/usr/sbin/sshd -D
process_name=%(program_name)s
autostart=true

在宿主机上安装supervisor,将默认生成的supervisord.conf放入docker构建环境目录下

 conf

备注:nodaemon=true ,前台启动

创建镜像文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Base image
FROM shhnwangjian/python-ssh
 
# Who
MAINTAINER shhnwangjian xxx@163.com
 
# ADD user www
RUN useradd -s /sbin/nologin -M www
 
# ADD file
ADD app.py /opt/app.py
ADD requirements.txt /opt/
ADD supervisord.conf /etc/supervisord.conf
ADD app-supervisor.ini /etc/supervisord.d/
 
# Pip install
RUN /usr/bin/pip2.7 install -r /opt/requirements.txt
 
# Port
EXPOSE 22 5000
 
# CMD
CMD ["/usr/bin/supervisord""-c""/etc/supervisord.conf"]

构建镜像

1
docker build -t shhnwangjian/web-api .

启动容器

1
docker run --name web-api -d -p 88:5000 -p 8022:22 shhnwangjian/web-api

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值