[web-008] 在阿里云ecs上进行docker部署py应用

0.操作系统ubuntu 16.04

1.安装docker   
    参考文献  https://docs.docker.com/install/linux/docker-ce/ubuntu/
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get install docker-ce -y

2.测试安装效果
    sudo docker run hello-world
    如果正常运行不报错,表明安装成功。
    
3.阿里云加速
在阿里云的 容器云服务 修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jzs5rpen.mirror.aliyuncs.com"]
}

然后重启docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker

4. 启动docker registry
启动这个服务,可以远程把docker镜像传到阿里云主机:
 docker run -d -p 5000:5000 registry

5.对服务制作镜像
  5.1 在本地开发环境,先制作一个基础镜像,因为apt-get update和pip的安装时间很长。注意,这里需要把blog所需要的包安装。
------------
#docker build -t "pyservice/u16py3reqs:1.0" .
#把所需要的工具都装上
FROM ubuntu:16.04
MAINTAINER xxx "[email protected]"
ADD . /root/
RUN apt-get update && apt-get install -y python3-pip && pip3 install -r /root/dev.txt
------------
  然后构建:docker build -t "tzpyserver/u16py3reqs:1.0" .
  构建完毕,在docker images能看到新镜像。

5.2 然后,构建应用的镜像 Dockerfile在应用源码目录下,内容是
----------
#Version: 0.0.1
#构建 docker build -t "pyservice/app:0.01" .
#运行 docker run -it --rm -p 8000:8000 pyservice/app:0.01
FROM pyservice/u16py3reqs:1.0
MAINTAINER xxx "[email protected]"
ADD . /root/app
CMD ["/bin/bash","/root/app/start_app.sh"]
EXPOSE 8000
----------
要注意:a.除非不需要调试,不能用ENTRYPOINT,否则没法bash进去调式; 


6.在本地启动镜像测试容器可运行
sudo docker run -i -t -d -p 8000:8000 pyservice/app:0.01
然后在宿主机可以用localhost:8000看到服务页面。

7.把做好的镜像远程上传阿里云主机
  7.1 阿里云主机的docker registory默认方式是http方式的。
  7.2 docker push默认使用https方式,因此需要修改。在本地环境创建/etc/docker/deamon.json文件,内容如下:
    { "insecure-registries":["47.188.288.288:5000"] }
    然后在重启docker,命令是 systemctl restart docker
  7.3 镜像的id是bcbc3402d1d1,给它打一个远程tag
    docker tag bcbc3402d1d1 47.188.288.288:5000/pyservice/app:0.01
  7.4 推送远程
     docker push 47.188.288.288:5000/pyservice/app:0.01
  7.5 在阿里云主机上运行
    注意:47.188.288.288是阿里云主机的公网ip地址,但是在机器的ifconfig命令里是看不到这个ip的,因此,不能使用这个ip获取镜像,而是
    docker run -i -t -d -p 8000:8000 127.0.0.1:5000/pyservice/app:0.01
  7.6 验证
    在浏览器地址输入 http://47.188.288.288:8000,就能看到服务的页面了。

8. sqlite文件挂载点
  8.1 关于挂载点文档,这篇最好  https://blog.csdn.net/docerce/article/details/79265858
  8.2 阿里云ecs的容器内,应用使用的sqlite3的文件路径在setting里进行配置,是'/opt/volume/db.sqlite3'
  8.3 在阿里云ecs宿主机,使用/root/volume目录挂载。
    8.3.1 在宿主机执行 mkdir -p /root/volume
    8.3.2 在宿主机,把db.sqlite3文件复制到 /root/volume
    8.3.3 配置volume 启动容器
      docker run -i -t -d -p 8000:8000  --volume  /root/volume:/opt/volume/    127.0.0.1:5000/pyservice/app:0.01
    8.3.4 如果出现错误,attach到容器执行检查
      docker exec -it container_id /bin/bash

9. log文件挂载点
    log需要挂载到宿主机的某个目录,以便做elk集成。跟第8相同。

10.如果有多个容器,请使用swarm集群进行管理。

    
 

猜你喜欢

转载自blog.csdn.net/u011539200/article/details/82786670