工作中遇到了需要docker部署一个web服务,供内部调用,而自己以前没有接触过docker,自己研究学习一天搭建成功。现在自己在本地VM虚拟机上, 通过Flask做个helloworld的项目,记录下完整的操作步骤。
一. 下载安装docker, 我使用的Ubuntu18.04的虚拟机
# 国内daocloud一键安装命令
curl -sSL https://get.daocloud.io/docker | SH
二. 后期我们要拉取一些镜像,设置一个镜像加速器,我们采用阿里云的镜像加速
按照官方指导, 依次执行以下命令进行配置, 配置完毕,我们可以通过 命令 docker info 查看Registry Mirrors信息
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三. 我们后面会有一个本地目录和容器目录挂载的操作,已达到后期如果需要改动代码,仅修改本地目录,重启docker即可,我们 准备将本地目录 ~/Public/test/bin 与容器 /app 进行挂载,挂载行为在启动docker进行,现在我们在~/Public/test/bin目录下先准备一些文件
FROM python:3.6.8 as builder
ADD . /app/
WORKDIR /app/
COPY requirements.txt /app/
# timezone
ENV TZ=Asia/Shanghai
RUN pip install --no-cache-dir --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple\
&& pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
ENTRYPOINT ["python", "server.py"]
EXPOSE 5000
#coding:utf-8
from flask import Flask
app=Flask(__name__)
@app.route("/")
def index():
return "Hello World!
"
@app.route("/user/" )
def user(name):
return "Hello,%s
"%name
if __name__=="__main__":
app.run(debug=True,host="0.0.0.0",port=5000)
flask
一. 通过Dockerfile创建镜像,命令如下
cd ~/Public/test/bin
# -t 后面跟镜像的名字及标签, .表示Dockerfile所在的目录
sudo docker build -t flask:v1 .
等待拉取python-3.6.8镜像,下载flask模块, 其中python-3.6.8镜像可以通过命令 docker pull python-3.6.8 提前下载好,FROM python-3.6.8 将会优先在本地获取,获取不到才去远端拉取。
执行成功后,我们通过命令 sudo docker images, 可以查看我们的镜像:
二. 启动容器, 命令如下
sudo docker run -d -p 8080:5000 -v ~/Public/test/bin:/app --name hello_web flask:v1
重启启动之后,我们通过 sudo docker ps, 查看容器启动情况, 通过 sudo docker logs -f hello_web 可以查看运行日志
可以看到我们的flask成功启动
其中docker run 是指启动一个容器, -d 后台运行模式, -p 指定端口映射,此处可以理解为本地的8080将会映射到docker的5000端口, -v 表示目录的挂载,格式为 本机目录:容器目录, --name 为容器的名称,我们后期可以通过容器名称进行开关容器的操作
记录一些用到的docker命令
# 关闭容器(根据容器名称, 也可以根据容器ID)
sudo docker stop hello_web
# 启动容器
sudo docker start hello_web
# 容器运行过程中进入容器内部, 比如我们需要安装别的python模块的时候需要进入容器内部
sudo docker exec -it hello_web /bin/bash
# 查看镜像
sudo docker images
# 删除镜像
sudo docker rmi <镜像ID>
# 查看容器运行情况
sudo docker ps
sudo docker ps -a
# 删除容器, f 强制删除,v删除挂载文件
sudo docker rm -fv <容器ID>
# 查看容器运行日志
sudo docker logs -f hello_web
# 根据Dockerfile构造镜像
docker build -t <镜像name:镜像tag> <Dockerfile所在目录,当前目录为.>
# 运行容器
docker run -d -p <local_prot:docker_port> -v <本地目录:挂载容器目录> --name <容器名称> <镜像name:镜像tag>
也是初学Docker,实现了自己的预期,但是Docker很多基础也不熟悉,学无止境, 加油~~~