栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker容器-部署应用映射外部目录、迁移与备份、dockerfile(很重要)、私有仓库、docker-compose、多个容器直接通信方式

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker容器-部署应用映射外部目录、迁移与备份、dockerfile(很重要)、私有仓库、docker-compose、多个容器直接通信方式

文章目录
  • 昨日回顾
  • 今日内容
    • 1 部署应用映射外部目录
    • 2 迁移与备份
      • 2.0 其他操作
      • 2.1 容器保存为镜像
      • 2.2 把镜像打包成压缩包
      • 2.3 把压缩包回复为镜像
    • 3 dockerfile(很重要)
    • 4 私有仓库
      • 步骤
    • 5 docker-compose
      • 5.1 部署多应用
    • 6 多个容器直接通信方式
    • 作业:

昨日回顾
1 介绍docker
	-docker ce和docker ee
    -版本:17年  19.03.
    -架构:c/s 符合restful规范
    -详细架构:架构图
    -kvm,vmware,openstack,docker,k8s
2 docker 安装
	-windows,mac安装(软件安装)
    -乌班图
    -centos:必须7以上,内核版本必须大于3.1,新软件
    	-照着笔记一步一步来
        -启动:systemctl start/restart/stop docker
        -docker -v 
        
3 镜像和容器
	-类和对象
4 镜像操作
	-docker pull 名字:v1
    -docker rmi 镜像id号   docker image rm 镜像id号
    -docker images        docker image ls
    
5 容器操作
	-创建:create
    -运行:start
    -创建并运行:run
    	-i:运行容器
        -d:容器后台运行
        -t:启动并进入容器
        -v:宿主机路径:容器路径# 不管是宿主机还是容器修改文件,相互影响
        -p:端口映射 宿主机端口:容器端口#以后访问宿主机端口就相当于访问容器
        --name:指定容器名字,如果不指定也会随机一个
        -e:指定环境变量(往容器的环境变量中加了这个东西)
        docker run -di --name=mysql -p 33073306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    -文件拷贝
    	-docker cp 宿主机文件/路径 容器id:容器路径
        -docker cp 容器id:容器路径 宿主机文件/路径
    -删除容器
    	docker rm 容器id
    -停止容器
    	docker stop 容器id
        容器之所有一直在运行的原因是,有一个前台进程在夯住
    -查看容器详细信息
    	docker inspect 容器id
        docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
        多个容器互通,可以通过ip,端口映射,机名
6 应用部署
	-部署nginx
    docker run -di --name=mynginx -p 80:80 nginx
    -部署mysql
    docker run -di --name=mysql -p 33073306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    -部署redis
    docker run -di --name=myredis -p 6379:6379 redis
补充:

	云原生:
今日内容 1 部署应用映射外部目录
# 部署redis,把配置文件和数据目录映射出来
# 操作步骤
	-1 mkdir /reids /redis/conf /redis/data
    -2 vim /redis/conf/redis.conf
        # 配置文件
        bind 0.0.0.0
        daemonize NO
        protected-mode no
        requirepass 123456
    -3 创建并运行容器
    docker run -p 6378:6379 --name redis_6379 -v /redis/conf/redis.conf:/etc/redis/redis.conf -v /redis/data:/data -di redis redis-server /etc/redis/redis.conf
    -4 本地window机器上远程连接到了docker里的redis
    -5 cmd窗口下
    	redis-cli -h 101.133.225.166 -p 6378
    -6 认证
    	auth 123456
    -7 写入数据
    	set name lqz
    -8 保存数据
    	save或者是bgsave
    -9 在宿主机的/redis/data路径下就能看到一个文件
    -10 不管多少次重启redis容器,数据都还在
    -11 原来的redis容器没了,按照第三步再启动一遍,数据都还在
2 迁移与备份 2.0 其他操作
# 删除所有容器()
docker rm `docker ps -a -q`
# 删除所有镜像
docker rmi `docker images -q`

# 通过自己构建的image启动容器
docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
               
# 查看容器运行日志
docker logs 容器id


# 操作步骤
	1 启动一个python容器
    	docker run -di --name=lqz python:3.6
    2 进入装软件
    	docker exec -it lqz /bin/bash
        mkdir /project
        pip install django==1.11.1 
        退出
    3 把项目拷贝到容器内部
    	docker cp /opt/lqz/django_test lqz:/project
            
    4 把容器做成镜像
    	docker commit lqz mydjango
    5 基于自己做的镜像运行容器
    docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
2.1 容器保存为镜像
docker commit 容器名字 镜像名字
docker commit 19b mydjango
pip install django==1.11.11 -i https://pypi.douban.com/simple/
2.2 把镜像打包成压缩包
docker save -o mydjango.tar mydjango
2.3 把压缩包回复为镜像
docker load -i mydjango.tar
3 dockerfile(很重要)
1 dockerfile是什么
	一个文件,里面一堆指令,通过这个文件可以生成镜像
2 dockerfile指令
	命令	                  作用
    FROM image_name:tag	定义了使用哪个基础镜像启动构建流程
    MAINTAINER user_name	声明镜像的创建者
    ENV key value	设置环境变量 (可以写多条)
    RUN command	是Dockerfile的核心部分(可以写多条)
    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 通过dockerfile构建出镜像
	docker build -t='django_1.11.11' .
5 查看镜像
	docker images 
    
6 启动容器
docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8080:8080 django_1.11.11

7 在外部访问即可

8 配置nginx转发
# 创建文件件
mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs
# 新建配置文件
vim 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;
        }  
    }
}

# 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;
        }  
    }
}
# 多启动几个docker容器
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8081:8080 django_1.11.11
docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8082:8080 django_1.11.11
        
# 重启nginx
# 假设8081的容器挂了,8080的容器挂了,正常提供服务,
# 再把docker容器启动起来即可
4 私有仓库
1 把自己的镜像传到docker hub上
	-docker login  输入用户名密码
    -给你要上传的image打个标签docker tag 5452fa6715c0 liuqingzheng/django1.11.9:v1
    -docker images
    -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 配置
	修改daemon.json
	vi /etc/docker/daemon.json
    添加以下内容,保存退出。
    {"insecure-registries":["101.133.225.166:5000"]} 
    此步用于让 docker信任私有仓库地址
5 重启docker 服务
	systemctl restart docker
6 重启容器
	docker start registry
7 打标签
	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
5 docker-compose
1 docker-compose是一个单机情况下容器编排的工具
2 通过yml文件定义多个容器
3 默认名字docker-compose.yml
4 三个概念,Service  Networks ,Volumes
	一个service代表一个container,这个container可以从docker hub的image来创建,或者从本地dockerfile build的image来创建
5 version:有1,2,3版本,目前都用"3"


6 安装
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

7 验证安装成功
	docker-compose -v

5.1 部署多应用
# 部署flask redis
1 创建Dockerfile
vim Dockerfile
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

2 创建docker-compose文件
vim docker-compose.yml
version: "3"
services:
  redis:
    image: redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis
3 创建app.py
vim app.py
from flask import Flask
from redis import Redis
import os
import socket
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
@app.route('/')
def hello():
    redis.incr('hits')
    return '你好! 查看 %s 次, hostname 是 %s.n' % (redis.get('hits'),socket.gethostname())
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)
4 启动--运行
docker-compose up
docker-compose.yml 如何写
version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    volumes:
      - mysql-data:/var/lib/mysql
  
6 多个容器直接通信方式
1 端口映射到宿主机,直接访问宿主机
2 通过ip地址访问
3 run的时候指定 --link 容器 
docker run -di --name=centos1 centos:centos7
docker run -di --name=centos2 --link centos1 centos:centos7
    
进入到centos2中 ping centos1 可以ping同


# 跨主机的容器通信
	-端口映射
作业:

nginx+django+mysql+redis 就写一个视图函数,用docker-compose拉起三个容器

回去看

# 基于本地的Volume:在容器创建或者run的时候,通过 -v指定
# 基于plugin的Volume:插件方式,第三方方案,如NAS,aws
# ## volume的类型
#1 受管理的data Volume,由docker后台自动创建(Data volume)
#2 绑定挂载的Volume,具体挂载可以由用户指定 (Bind Mouting)
#################Data volume
## 启动一个mysql的容器
docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker volume ls 可以看到刚刚创建容器的voluem
docker volume id号 删除
docker inspect id号  可以看到mount到的本地某个位置
# 再创建,也会创建一个volume
# 删除容器,volume是不会被删除的(数据不会丢)

# 两个容器可以共用一个volume
docker run -d -v mysql:/var/lib/mysql --name mysql1 -e  MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker run -d --name=mysql -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.7
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql:/var/lib/mysql mysql:5.7
# 进入到容器,创建一个数据库
# 停掉容器,删除容器
sudo docker volume ls    文件还在
# 重新一个容器,使用该volume
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e  MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
# 进入到容器,看到数据库还在
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/693854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号