Docker

初始Docker

简介

  1. Docker是一个开源的应用容器引擎
  2. 可以让开发者打包到他们的应用以及依赖包到一个轻量级,可移植的容器中,发布到服务器上
  3. 容器采用了沙箱机制,相互隔离
  4. 容器性能开销低
  5. 解决了软件迁移引起的环境问题

安装Docker

  1. 下载依赖包(如果已安装建议更新 yum update)
    yum install -y yum-utils
    
  2. 设置镜像仓库(国内)
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  3. 这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
    yum makecache fast
    
  4. 安装docker docker-ce 社区 :docker-ee 企业版
    yum install docker-ce docker-ce-cli containerd.io
    
  5. 验证
    docker -v
    

docker架构

在这里插入图片描述

概念

  1. 镜像(image): Docker镜像,就相当于是一个root系统
  2. 容器(Container): 镜像和容器的关系,容器是镜像运行时的实体,容器可以被创建,启动,停止,暂停
  3. 仓库(Repository): 仓库就是用来保存镜像的,相当于代码控制中心

配置Docker容器加速器

  1. 执行linux命令(阿里云的)
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
     "registry-mirrors": ["https://bn5pwokm.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  2. 中科大
    直接修改大括号里面的地址即可

Docker命令

服务相关的

  1. 启动
    systemctl start docker
    
  2. 查看状态
    systemctl status docker
    
  3. 停止
    systemctl stop docker
    
  4. 重启
    systemctl restart docker
    
  5. 开机自启动docker
    systemctl enable docker.service
    
  6. 关闭自启动docker
    systemctl disable docker.service
    

镜像相关操作

  1. 查看镜像:查看所有本地镜像

    docker images
    docker images -q 查看所有镜像的id
    
  2. 搜索镜像:从网络中搜索镜像

    docker search 镜像名称
    
  3. 拉取镜像:从docker仓库拉取镜像到本地,镜像名称格式:镜像名:版本号,如果不加版本号,则拉取最新版本,如果不知道版本号,可以去 https://hub.docker.com/查

    docker pull 镜像名称
    
  4. 删除镜像:删除本地镜像

    docker rmi 镜像id 删除指定镜像
    docker rmi `docker images -q` 删除本地所有镜像
    

容器相关命令

  1. 查看容器

    docker ps #查看正在运行的容器
    docker ps -a # 查看所有容器
    
  2. 创建并启动容器

    docker run 参数
    docker run -it --name=cl centos:7 /bin/bash
    

    参数说明

    1. -i:保持容器运行。通常与-t同时使用。容器创建后自动进入容器中,退出容器,容器自动关机
    2. -t:为容器重新分配一个为输入终端通。
    3. -d:以守护模式运行容器,即使退出容器,容器也不会关机,但需要docker exec进入容器
      docker exec -it 容器Id /bin/bash
      例:docker exec -it e71da0e85618 /bin/bash
      
    4. –name: 为创建的容器命名
    5. -it 创建的容器为交互是容器 -id创建的容器一般为守护容器
  3. 进入容器

    docker exec -it 容器Id /bin/bash 
    exit 退出容器
    
  4. 停止容器

    docker stop 容器名称
    
  5. 删除容器

    docker rm 容器名称
    
  6. 查看容器信息

    docker inspect 容器名称
    
  7. 设置开机自启

docker update 容器名称或id --restart=always 开启自启
  1. 重启容器即可
docker restart 容器id

Docker容器的数据卷

概念

数据卷

在这里插入图片描述

  1. 数据卷是宿主机中的一个目录或文件
  2. 当容器目录和数据卷目录绑定后,对方的修改立即同步
  3. 一个数据卷可以被多个容器同时挂载
  4. 一个容器也可以挂载多个数据卷

数据卷作用

  1. 容器数据持久化
  2. 外部机器和容器间接通信
  3. 容器之间交换数据

配置数据卷

  1. 创建启动容器时,使用-v设置数据卷
    docker run ..... -v 宿主机目录(文件):容器内目录文件... # 多个数据卷的话多个-v就行了
    
    docker run -it -v /root/data:/root/data_container centos:7 /bin/bash
    
    注意:
    - 目录必须是绝对路径
    - 如果目录不存在,会自动创建
    - 可以挂载多个数据卷
    - 多个容器挂在一个数据卷上只需要写相同的宿主的目录即可

数据卷容器

数据卷容器在这里插入图片描述

多容器进行数据交换

  1. 多个容器挂载到同一个数据卷上
  2. 数据卷容器

配置数据卷容器

  1. 启动创建容器数据卷
    docker run -id --name=c3 -v /文件名称 centos:7 /bin/bash
    
  2. 创建 容器,使用–volumes-from参数设置数据卷
    docker run -it --name=c2 --volumes-from 数据卷容器名称 centos:7 /bin/bash
    
  3. 查看容器中目录映射到宿主机的目录
    docker inspect 容器id | grep Mounts -A 20
    

应用部署

端口映射
在这里插入图片描述

  1. 容器内部的网络服务和外部机机器不能直接通信
  2. 外部机器和宿主机可以直接通信
  3. 宿主机和容器可以直接通信
  4. 当容器需要外部机器访问时,可以将容器中提供的服务的端口映射到宿主机的端口上,外部机器访问宿主机的改端口,从而间接访问容器中的服务

Mysql部署

步骤:

  1. 搜索镜像
    docker search mysql
    
  2. 镜像下拉
    docker pull mysql:5.6
    
  3. 创建容器,设置端口映射,目录映射
    # 在/root目录下创建mysql目录用于存储mysql 数据信息
    mkdir ~/mysql
    cd ~/mysql
    
    docker run -id \
    -p 3307:3306 \
    --name=c_mysql \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.6
    
    参数说明:
    * -p 3307:3306 :将容器的3306端口映射到宿主机的3307端口
    * -v $PWD/conf:/etc/mysql/conf.d \ :将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf。配置目录
    * -v $PWD/logs:/logs :将主机当前目录下的logs目录挂载到容器的/logs。日志目录
    * -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的/var/lib/mysql 。数据目录
    * -e MYSQL_ROOT_PASSWORD=123456 :初始化root用户密码

redis部署

步骤

  1. 搜索镜像
    docker search redis
    
  2. 下拉镜像
    docker pull redis:5.0
    
  3. 创建容器
    docker run -it --name=redis -p 6379:6379 redis:5.0
    

DockerFile

原理

在这里插入图片描述

  1. Docker镜像是有特殊的文件系统叠加而成
  2. 最低层是bootfs,并使用宿主机的bootfs
  3. 第二层root文件系统rootfs,称为base image
  4. 然后往上叠加其他镜像文件
  5. 同一文件系统(union File System)技术可以整合不同层为一个文件系统。
  6. 一个镜像可以放在另一个镜像的上面。位于面的镜像称为父镜像,最底部的镜像成为基础镜像
  7. 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

镜像制作

在这里插入图片描述

  1. 容器转为镜像
    docker commit 容器id 镜像名称:版本号
    docker save -o 压缩文件名称 镜像名称:版本号
    docker load -i 压缩文件名称
    

概念

  1. dockerfile是一个文件
  2. 包含了一条条指令
  3. 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
    详细参考:

https://docs.docker.com/engine/reference/builder/#label

案例

自定义centos7镜像。要求

  1. 默认登陆路径为/usr
  2. 可以使用vim

步骤

vim dockerfile名称
在文件中写入
FROM centos:7
MAINTAINER ljk <dddddd>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
执行命令:
docker build -f ./dockerfile名称 -t 镜像名称:镜像版本 .

Docker服务编排

概念

微服务架构的应用系统中一般包含若干个微服务,每一个微服务一般都会部署多个实例,每一个微服务都要手动启停操作,维护工作量十分大

  1. 要从Dockerfile build image 或dockerhub拉去image
  2. 要创建多个容器
  3. 要管理这些容器(启动暂停删除)
    **服务编排:**按照一定的业务员规则批量管理容器

Docker Compose

Docker Compose是一个服务编排多容器部署的工具,提供命令集管理容器化应用的完整开发周期,包含服务构建,启动和停止

使用步骤

  1. 利用dockerfile定义运行环境镜像
  2. 使用docker-compose.yml定义组成应用的服务
  3. 运行 docker-compose up 启动应用

安装Docker Compose

在这里插入图片描述

  1. 下载Docker Compose二进制文件
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
  2. 对刚刚下载的二进制文件添加可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 通过命令检查是否安装成功
    docker-compose --version
    
  4. 卸载
    rm /usr/local/bin/docker-compose
    

基本命令

#构建启动nignx容器
docker-compose up -d nginx                     

#进入nginx容器中
docker-compose exec nginx bash            

#将会停止UP命令启动的容器,并删除容器
docker-compose down                             

#显示所有容器
docker-compose ps                                   

#重新启动nginx容器
docker-compose restart nginx                   

#构建nginx镜像
docker-compose build nginx      

#不带缓存的构建nginx镜像
docker-compose build --no-cache nginx 

#查看nginx的日志
docker-compose logs  nginx                      

#查看nginx的实时日志
docker-compose logs -f nginx                   

#验证(docker-compose.yml)文件配置,
#当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
docker-compose config  -q                        

#以json的形式输出nginx的docker日志
docker-compose events --json nginx       

#暂停nignx容器
docker-compose pause nginx                 

#恢复ningx容器
docker-compose unpause nginx             

#删除nginx容器
docker-compose rm nginx                       

#停止nignx容器
docker-compose stop nginx                    

#启动nignx容器
docker-compose start nginx

使用Docker Compose编排nginx+springboot项目

  1. 创建Docker-Compose目录

    mkdir docker-composecd 
    docker-compose
    
  2. 编写docker-compose.yml文件

    version: '3'
    services:
      nginx:
       image: nginx
       ports:
        - 80:80
       links:
        - app  
       volumes:
        - ./nginx/conf.d:/etc/nginx/conf.d
      app:
        image: app
        expose:
          - "8080"
    
  3. 创建./nginx/conf.d

    mkdir -p ./nginx/conf.d
    
  4. 在./nginx/conf.d目录下编写sss.conf配置文件

    server{
    listen 80;
    access_log off;
    location / {
    proxy_pass http://app:8080;
    

}
}
````

  1. 使用命令启动 docker-compose up

私有仓库

私有仓库的搭建

  1. 拉取私有仓库镜像
    docker pull registry
    
  2. 启动私有仓库
    docker run -id --name=registry -p 5000:5000 registry
    
  3. 打开浏览器验证(http://ip:端口号/v2/_catalog)
    在这里插入图片描述
  4. 修改配置文件
    vim /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://bn5pwokm.mirror.aliyuncs.com"],
    "insecure-registries": ["http://ip:端口"]
    }
    
  5. 重启docker
    systemctl restart docker
    docker start registry
    

将镜像上传私有仓库

  1. 对镜像打标记为私有仓库镜像
    docker tag centos:7 ip:端口/centos:7
    
  2. 上传标记镜像
    docker push ip:端口号/centos:7
    

拉取私有镜像

docker pull ip:端口号/centos:7

Docker Vs 虚拟机

在这里插入图片描述
相同点:
1. 容器和虚拟机具有相似的资源隔离和分配优势
不同点:
1. 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件
2. 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值