镜像换源
注册一个阿里云用户,访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors获取专属Docker加速器地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你自己的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info
#命令查看是否修改
镜像
Docker中镜像是指镜像文件,包括代码,基础系统,依赖库,工具。
镜像分层思想

Dockerfile
Dockerfile(制作镜像脚本化), 是一个文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
在制作镜像之前,需要知道为什么需要制作镜像,docker hub不是有很多吗。
原因:
- 不能满足生产应用环境的需求。
- 不够安全,有安全隐患。
镜像制作
docker打镜像的过程
- 启动一个临时容器
- 顺序执行dockerfile命令
- build -t 保存并改名为指定的名称作本地保存
- 把临时容器删除
- 上传到镜像仓库
自制docker镜像制作(python2.7,redis)
源码文件地址 https://download.yutao.co/mydocker/
创建文件夹
mkdir mydocker
cd mydocker/
编辑Dockerfile文件
vim Dockerfile
FROM python:2.7-slim
#以python:2.7为模板制作镜像,注意要提前下载好该镜像
WORKDIR /app
#在docker容器里的工作目录,进入docker容器时,所在的目录,相当于家目录。
ADD . /app
#添加当前目录下的所有内容到容器里的/app目录下,ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统。
所以,可以认为ADD是增强版的COPY,支持将远程URL的资源加入到镜像的文件系统
VOLUME ["/data_flask"]
#使用/data_flask卷
RUN pip install --trusted-host
#从pypi.python.org网站下载requirements.txt里面的库,只在制作镜像时运行
EXPOSE 80
#暴露80端口发布
ENV NAME World
ENV AUTHOR wyt
#定义环境变量,NAME和AUTHOR
CMD ["python","app.py"]
#容器启动时第一个启动的程序
编辑requirements.txt文件
vim requirements.txt
Flask
Redis
#下载Flask库和Redis库
编辑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</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {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)
mydocker文件夹里面的三个文件

建立镜像
docker build -t wyt-hello .
#使用当前目录的文件建立镜像,名为wyt-hello
启动容器
docker run --name wyt_hello -d -p 8088:80 wyt-hello
#启动wyt-hello镜像的容器wyt_hello

这里没有连接redis,报错。
连接redis
docker run --name redis_1 -d -p 6379:6379 redis
#启动redis镜像的redis_1容器
docker run -d --name wyt_hello_2 -p 8089:80 --link redis_1:redis wyt-hello
#启动wyt_hello_2容器,这里用到多容器建立链接,目的是在wyt_hello_2容器的/etc/hosts增加redis的域名解析记录,使wyt_hello_2可以与redis_1通信
可以看到已经与redis建立连接,统计访问次数,每刷新一次增加1

进入容器终端可以看到自己定义的环境变量
