8月23日 docker镜像构建

课程价值

学习如何构建自己的镜像

课程大纲

  1. 使用docker commit和dockerfile构建镜像
  2. 使用多from指令构建镜像
  3. 讲述镜像系统的原理

答案:
dockerfile:

FROM centos:7

ADD entrypoint.sh /root
ADD requirements.txt /root
WORKDIR /root
USER root

RUN yum install -y epel-release \
    && yum install -y python34 git python34-setuptools python34-devel.x86_64 \
    && easy_install-3.4 pip \
    && yum install -y gcc \
    && yum install -y soci-mysql-devel.x86_64 \
    && ln -s /usr/local/mysql/bin/mysql /usr/bin \
    && pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/


ENTRYPOINT ["/root/entrypoint.sh"]

启动脚本:

#!/bin/bash

mkdir -p /opt/web
cd /opt/web
git clone https://github.com/ycwdaaaa/holmes.git
cd holmes
pip3 install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
/usr/bin/python3.4 app.py


while true
do
   sleep 10
done

搭建镜像仓库:

docker pull registry:2
docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2
docker pull busybox
docker tag busybox localhost:5000/bosybox:v1.0
docker push localhost:5000/bosybox:v1.0
curl http://localhost:5000/v2/_catalog

多FROM指令

FROM centos:6.9 as builder

# 下载基础工具
RUN echo "this is a test" > gaofei.tar


FROM busybox

WORKDIR /root

COPY --from=builder gaofei.tar .

课后复习:



课后反馈表单

#Dockerfile1
# Use an official Python runtime as a parent image
FROM python:3.8-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "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 = "<i>cannot connect to Redis, counter disabled&lt;/i&gt;"

    html = "&lt;h3&gt;Hello {name}!&lt;/h3&gt;" \
           "&lt;b&gt;Hostname:&lt;/b&gt; {hostname}&lt;br/&gt;" \
           "&lt;b&gt;Visits:&lt;/b&gt; {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)

做镜像的人一般是什么角色
刚才老师展示的那么多层,感觉是运维做的呀?

Ronky
容器分层还要自己在消化一下

这么多镜像 是怎么管理维护的 ?

除了dockerfile还有build需要用到的一些文件,代码吧?

就放在dockerfile同层目录下的一些文件,在build的时候要用的

如果不行的话,我可能要建议他用多个from了 :joy:

没有

Prometheus里面配监听项时,里面要写宿主机的IP吧,我看老师用的是一个域名。k8s的

k8s是用来管理docker容器的吗?

conntent 模式时 如果需要单独访问 某个模块 怎么访问呢

Prometheus:就我们启镜像的时候用的-P就用宿主机的IP
那可以用container启吗?

  1. docker network create test_link 这个是 容器模式吗?

启动node镜像时,老师上次直播是用的-P,我们可以用container吗?

关闭