docker实践记录

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

安装

Ubuntu 14.04/16.04 (使用apt-get进行安装)

参考附录2

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 官方源 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# Step 5: 镜像加速
# 文件/etc/docker/daemon.json
{
  "registry-mirrors":[
    "https://registry.docker-cn.com"
  ]
}
# Step 6 启动
sudo systemctl enable docker
sudo systemctl start docker
# Step 7 测试是否正确安装
docker run hello-world

基本命令

# docker需要用root运行
# sudo su
# 进入root权限
# 列出镜像
docker images
# 列出在运行的容器
docker container ls
# 列出所有的容器
docker container ls -a
# 删除容器
docker rm 容器名称或编号
# 删除所有的容器
docker rm $(docker ps -a -q)
# 删除镜像
docker rmi 镜像名称
# 镜像查找
docker search python
# 拖取镜像(镜像后面不跟tag,就默认是latest)
docker pull python:2.7
# 调出容器的命令行
docker run -it python /bin/bash

实践

nginx

# pull镜像
docker pull nginx
# 运行nginx
docker run --network host -v /host/path/nginx.config:/etc/nginx/conf.d/default.conf -d nginx
# -v 主机文件:容器文件,把主机的文件映射到容器
# 这里映射了nginx的配置文件
# 当容器读写/etc/nginx/conf.d/default.conf的时候,实际会读写主机的/host/path/nginx.config
# --network host,设置网络类型
# 默认情况下,容器有自己独立的ip地址和端口
# 容器访问主机端口,要么通过ip,要么端口映射
# 这里通过配置--network host,让容器共用主机的ip和端口
# -d,让容器后台运行

redis

# pull镜像
docker pull redis
# 运行redis
docker run --network host redis
# 在主机运行redis-cli,就可以访问本机默认6379端口的redis了

flask

  • 准备文件

    1. 文件目录
    # 文件目录结构
    .
    ├── app
    │   ├── app.py
    │   └── run.fcgi
    └── img
         ├── Dockerfile
         └── requirements.txt
    

    img目录下的文件用于建新镜像 app目录下的文件是flask应用

    1. Dockerfile
    FROM python
    COPY . /app
    WORKDIR /app
    RUN pip install --no-cache-dir -r requirements.txt
    

    FROM python表示在镜像python的基础上建新的镜像 COPY . /app拷贝文件到镜像中 WORKDIR /app设置工作目录 RUN 运行命令pip,安装需要的python包,

    1. requirements.txt,需要的python包,按需要增减
    redis
    mysqlclient
    flask
    flask_restful
    flask-sqlalchemy
    flup
    
    1. flask应用
    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello, flask!"
    
    if __name__=='__main__':
        app.run(host='0.0.0.0', debug=True)
    
    1. run.fcgi,用于部署应用
    #!/usr/local/bin/python
    from flup.server.fcgi import WSGIServer
    from app import app
    
    if __name__=='__main__':
    	     WSGIServer(app, bindAddress=('127.0.0.1', 5000)).run()
    
  • 生成镜像

    # 进入img目录
    cd img
    # 生成镜像
    docker build -t myflask .
    # 查看生成的镜像
    docker images
    
  • 运行容器

    1. 测试版的flask应用
    docker run --network host -v /host/path/app:/app/data myflask python /app/data/app.py
    # 浏览器打开,在默认5000端口上flask应用就跑起来了
    
    1. 部署
    # 赋予run.fcgi执行权限
    chmod +x /host/path/app/run.fcgi
    # 启动容器
    docker run --network host -v /host/path/app:/app/data myflask /app/data/run.fcgi
    # 这时候在浏览器还不能打开应用,需要nginx
    

    nginx的配置

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include fastcgi_params;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param SCRIPT_NAME "";
        fastcgi_pass 127.0.0.1:5000;
    }
    

    再启动nginx的容器,在浏览器就可以浏览flask应用了。

附录

  1. Docker — 从入门到实践 https://yeasy.gitbooks.io/docker_practice/
  2. Docker快速入门,阿里云 https://help.aliyun.com/document_detail/60742.html
  3. 菜鸟教程 http://www.runoob.com/docker/docker-tutorial.html

转载于:https://my.oschina.net/kyle960/blog/3035260

你可能感兴趣的:(运维,python,数据库)