一、制作镜像

  1、删除所有容器:docker rm `docker ps -a -q`

  2、删除所有镜像:docker rmi `docker images -q`

  3、启动python容器:docker run -di --name=lqz python:3.6

  4、进入容器安装软件:

    ①docker exec -it lqz /bin/bash

    ②pip install django==1.11.11 -i https://pypi.douban.com/simple/

    ③mkdir /project

    ④exit

  5、把项目拷贝到容器内:docker cp /opt/lqz/django_test lqz:/project

  6、容器保存为镜像:docker commit lqz mydjango

  7、基于自己做的镜像运行容器:docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088

  8、把镜像打包成压缩包:docker save -o mydjango.tar mydjango

  9、把压缩包解压成镜像:docker load -i mydjango.tar

二、上传镜像到docker hub

  1、登录:docker login  输入用户名密码

  2、查看一下镜像id:docker images

  3、给要上传的镜像打个标签:docker tag 5452fa6715c0 liuqingzheng/django1.11.9:v1

  4、上传:docker push liuqingzheng/django1.11.9:v1

三、私有仓库

  1、拉取私有仓库镜像:docker pull registry

  2、启动私有仓库容器:docker run -di --name=registry -p 5000:5000 registry

  3、可以在浏览器访问到私有仓库:http://101.133.225.166:5000/v2/_catalog

    看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

  4、配置中添加私有仓库的地址:

    ①vi /etc/docker/daemon.json

    ②{

     ...

     "insecure-registries":["101.133.225.166:5000"]

     ...

     }

  5、重启docker服务:systemctl restart docker

  6、重启私有仓库容器:docker start registry

  7、给镜像打上标签,不写就是latest:docker tag 5452fa6715c0 101.133.225.166:5000/django1.11.11

  8、将镜像上传到私有仓库:docker push 101.133.225.166:5000/django1.11.11

  9、从私有仓库拉取镜像:docker pull 101.133.225.166:5000/django1.11.11

四、dockerfile

  1、dockerfile是一个文件,里面有一堆指令,通过这个文件可以生成镜像。

  2、指令含义:

    ①FROM image_name:tag --- 声明使用哪个基础镜像启动构建流程

    ②MAINTAINER user_name   --- 声明镜像的创建者

    ③ENV key value --- 添加环境变量,可以写多条

    ④RUN command --- 构建镜像时执行的指令,可以写多条

    ⑤CMD --- 容器启动时执行的指令,只写一条

    ⑥ADD source_dir/file dest_dir/file --- 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

    ⑦COPY source_dir/file dest_dir/file --- 和ADD相似,但是如果有压缩文件并不能解压

    ⑧WORKDIR path_dir --- 设置工作目录

  3、dockerfile实例(文件名必须为dockerfile):vim dockerfile

    FROM python:3.6

    MAINTAINER lqz

    EXPOSE 8080

    ADD ./requirement.txt /home/

    RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/ 

    RUN pip install uwsgi -i https://pypi.douban.com/simple/

    VOLUME ["/home"]

    WORKDIR /home/django_test

    CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"] 

  4、uwsgi.ini:

[uwsgi]
# socket=0.0.0.0:8080
http=0.0.0.0:8080
chdir=/home/django_test/
wsgi-file=django_test/wsgi.py
processes=1
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

  5、通过dockerfile构建出镜像:docker build -t='django_1.11.11' .

  6、启动三个容器:

    docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8080:8080 django_1.11.11

    docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8081:8080 django_1.11.11

    docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8082:8080 django_1.11.11

  7、配置nginx转发:

    ①创建文件夹:mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs

    ②新建配置文件:vim opt/nginx/conf/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream node    {
        server    101.133.225.166:8080;
        server    101.133.225.166:8081;
        server    101.133.225.166:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
          #proxy_pass http://101.133.225.166:8080;
          #负载均衡配置
          proxy_pass http://node;
        }  
    }
}

  8、docker运行nginx:docker run --name nginx -id -p 8888:80 -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/html:/etc/nginx/html -v /opt/nginx/logs:/var/log/nginx nginx

  9、配置负载均衡,修改nginx文件配置:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream node    {
        server    101.133.225.166:8080;
        server    101.133.225.166:8081;
        server    101.133.225.166:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
          #proxy_pass http://101.133.225.166:8080;
          #负载均衡配置
          proxy_pass http://node;
        }  
    }
}

  10、重启nginx

  11、只要django容器没有全挂,即可正常提供服务,将挂的容器重启即可

 五、docker-compose

  1、docker-compose是一个单机情况下容器编排的工具,通过yml文件定义多个容器,默认名字docker-compose.yml

  2、一个service代表一个container,这个container可以从docker hub的image来创建,或者从本地dockerfile build的image来创建

  3、version:有1,2,3版本,目前都用"3"

  4、安装:

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

    chmod +x /usr/local/bin/docker-compose

    docker-compose -v

  5、docker-compose.yml模板:

version: "3"
services:
  nginx:
      image: nginx
      ports:
        - 80:80
      volumes:
        - /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
        - /opt/nginx/html:/etc/nginx/html
        - /opt/nginx/logs:/var/log/nginx
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    environment:
      REDIS_HOST: redis
    volumes:
      - /opt/lqz:/home
  web1:
    image: django_1.11.11
    ports:
      - 8081:8080
    volumes:
      - /opt/lqz:/home
  web2:
    image: django_1.11.11
    ports:
      - 8082:8080
    volumes:
      - /opt/lqz:/home

  6、批量启动容器:docker-compose up yml文件所在路径

  7、批量停止容器:docker-compose stop

  8、批量停止并删除容器:docker-compose down

  9、横向扩展容器:docker-compose up --scale web=3 -d --- (需要额外配置,取代nginx)

lb:
    image: dockercloud/haproxy
    links:
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

六、容器间通信

  1、端口映射到宿主机,直接访问宿主机端口

  2、通过宿主机内网ip

  3、通过link,容器名即ip:

    docker run -di --name=centos1 centos:centos7

    docker run -di --name=centos2 --link centos1 centos:centos7

    进入到centos2中,ping centos1

  4、跨主机的容器通信:端口映射

七、数据卷

  1、基于本地的Volume:在容器创建或者run的时候,通过 -v指定

  2、基于plugin的Volume:插件方式,第三方方案,如NAS,aws

  3、受管理的data Volume,由docker后台自动创建

  4、绑定挂载的Volume,具体挂载可以由用户指定

  5、实例,启动一个mysql的容器:

    ①docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

    ②docker volume ls --- 可以看到刚刚创建容器的volume

    ③两个容器可以共用volume:

      docker run -di --name=mysql_1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql:/var/lib/mysql mysql:5.7

      docker run -di --name=mysql_2 -p 33062:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql:/var/lib/mysql mysql:5.7

 

posted on 2020-09-03 15:01  焚音留香  阅读(120)  评论(0编辑  收藏  举报