Docker镜像的制作基础篇(自己制作)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

为什么要学习制作镜像?
为什么不直接使用别人制作的镜像?
对于公司来说安全性才是最重要的,使用其他人制作的镜像文件安全性无法得到保障,所以才会自己制作ji

一、镜像由哪些组成

Docker 镜像结构原理
    https://blog.51cto.com/liuleis/2070461

Dockerfile 制作镜像的文件===>配方

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、镜像制作

1.编辑Dockerfile

代码如下(示例):

mkdir /mydockerfile
cd /mydockerfile/
vim Dockerfile

Dockerfile 里面的内容:要提前使用docker拉去python 2.7 的镜像

FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host  pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD ["python","app.py"]

2.编辑requirements.txt

代码如下(示例):

vim requirements.txt

    Flask
    Redis

3.编辑app.py 文件

vim app.py

  from flask import Flask
  from redis import Redis, RedisError
  import os
  import socket
  # Connect to Redis
  redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
  app = Flask(__name__)
  @app.route("/")
  def hello():
      try:
          visits = redis.incr("counter")
      except RedisError:
          visits = "cannot connect to Redis, counter disabled"
      html = "
  Hello {name}!
  " \
             "Hostname: {hostname}
  " \
             "Visits: {visits}"
      return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
  if __name__ == "__main__":
      app.run(host='0.0.0.0', port=80)

粘贴格式问题在
set paste

4.生成镜像文件

docker build -t kang-1 .

5.使用镜像启动容器

 docker run -d -p 5080:80 --name nz-1 kang-1

6.访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:5080 ===>主机ip+自己定义的端口号
结果:
    Hello World!
    Hostname: f4aeb5d5305a
    Visits: cannot connect to Redis, counter disabled

因为redis数据库容器没有启动,flask web服务不能连接到redis数据库

7.启动redis容器

docker run -d -p 6379:6379 --name nz-redis-2 redis

8.启动自制镜像文件

docker run -d --name nz-2 -p 5080:80 --link nz-redis-2:redis kang-1

9.访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:5081

10.docker容器无法在后台运行解决方案

查看日志文件
docker logs + 容器name

问题:
centos 启动一个容器添加了-d 参数,但是docker ps 或者docker ps -a查看却已经退出了

原因
1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出
2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
3、这个是 docker 的机制问题

   方案一
       先不接-d 选项,执行一个前台进程,然后就可以使用-d选项将程序放入后台

   方案二
       使用 -it选项交互运行

解决方案
参考链接
https://blog.csdn.net/fengqing5578/article/details/94554897

总结

学习自己动手制作的可以试试,按这个步骤应该不会有问题,后台无法运行的解决方法也解决了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值