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 "xxx@163.com"
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 "xxx@163.com"
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集群进行管理。