一、制作镜像
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