从零开始Docker部署Web服务

工作中遇到了需要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目录下先准备一些文件

  1. Dockerfile
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
  1. server.py
#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)
  1. requirements.txt
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 可以查看运行日志
从零开始Docker部署Web服务_第1张图片
可以看到我们的flask成功启动
其中docker run 是指启动一个容器, -d 后台运行模式, -p 指定端口映射,此处可以理解为本地的8080将会映射到docker的5000端口, -v 表示目录的挂载,格式为 本机目录:容器目录, --name 为容器的名称,我们后期可以通过容器名称进行开关容器的操作

三. 成功访问web服务
从零开始Docker部署Web服务_第2张图片

docker命令

记录一些用到的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很多基础也不熟悉,学无止境, 加油~~~

你可能感兴趣的:(docker,docker,flask)