• 【Docker 基础内容 01】


    Docker是一种进程级别的隔离

    一、概念

    1、镜像image  

    Docker把应用程序以及依赖,打包到image里面。只有通过这个文件,才能生成docker容器。image文件可以看做是容器的模板

    image文件是通用的,一台机器的image文件拷贝到另外一台机器上照样可以用。可以通过docker file来构造image镜像,但是一般我们都是用别人制作好的image文件。

     2、容器 Contaner

    Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例,容器是可以修改的,可以将容器当前的状态保存到对应的镜像中。

    3、仓库 Respostory

    仓库是集中存放镜像的地方。镜像构建完成以后,可以很容易的在当前的宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、奋发镜像的服务,Docker Registry(仓库注册服务)就是这样的服务

    通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应 该软件的版本我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件那个版本的镜像。如果不给出标签,将以latest作为默认标签

    分为共有仓库和私有仓库

    Docker Registry共有仓库是开放给用户使用,允许用户管理镜像的Registry服务(一般这类服务允许用户免费上传,下载镜像,并可能提供收费服务给私有服务)

    除了共有仓库,还有在本地搭建的私有仓库

     二、各组件之间的关系

     三、docker环境部署

    1、安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2

    2、设置国内yum源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    3、安装docker

    yum install docker-ce docker-ce-cli containerd.io -y

    4、启动/关闭docker服务

    systemctl start docker
    systemctl stop docker

     四、docker基本命令

    1、搜索镜像

    docker search [imageName]
    

     2、拉取镜像

    docker pull {imageName}[:{imageTag}]
    
    imageName:镜像名称
    imageTag:标签其实也就是版本

    具体如何看imageTag,我们可以通过docker的官网

    https://hub.docker.com/

    -->然后在dockerHub内搜索想要拉的镜像(如:tomcat)-->切换到tag,就可以看到对应的版本,同样也可以复制右侧拉取的命令

     

     3、查看本地镜像

    docker images

     4、运行容器

     docker run {imageid}

    -d:后台运行镜像

    -t:启动一个终端

    -i:标准输入

    -p:容器内的端口映射到本机端口

    -v:文件映射

    举例:  启动tomcat

    docker run -d -p 9090:8080 709732b01e4a

    把这个容器内的8080端口映射到本机的9090端口,意思是外面的人访问9090端口,其实访问的就是容器内的8080端

    5、查看运行中的docker:docker ps

      查看所有历史容器:docker ps -a

    6、查看docker容器日志

    docker logs -f {容器id}
    
    此容器id指的是:docker ps 执行后CONTAINER ID

    7、进入容器:docker exec -it {containerid} /bin/bash    -->比如:进入到docker容器内的tomcat文件内,退出时直接输入:exit

    docker exec -it {containerid} /bin/bash

    -it 打开一个终端 /bin/bash 指定启动的程序,实际是linux下的命令

     注意:进入到容器里面,有些Linux命令不能使用,如:vi,ll

     8、docker拷贝文件:docker cp {localPath} {containerid}:{containerPath}

    docker cp jmeter.log 8b4361fa0da9:/usr/local/tomcat/logs
    
    例如:把jmeter.log文件复制到docker容器内的tomcat/logs文件内

    9、启动/停止/重启已存在的容器:docer start/stop/restart{containerid}

    10、移除docker容器:docker rm {containerid} (容器必须在停止状态)

    11、删除镜像 docker rmi {imageid}

    五、docker项目部署实战(基于Tomcat+mysql部署项目)

    1、拉取mysql镜像

    docker pull mysql:latest

    2、在宿主机创建mysql文件夹,并进入此文件夹内

      mkdir -p /home/docker/mysql

      cd /home/docker/mysql

      echo $PWD   -->/home/docker/mysql

    创建这两个文件夹的目的:把Docker中的mysql的配置文件映射到conf,数据文件映射到data

    3、启动mysql镜像

    docker run --name mysqlserver -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3306:3306 mysql:latest
    解释:
    --name  自定义容器名称
    -d   后台运行
    --privileged=true   设置容器内的权限为真正root权限
    -v   将容器内的配置文件挂载到本机
    -e   设置容器密码变量为123455

    在var/lib/docker/containers/下查看容器

     并可以查看启动的容器:docker ps

     查看启动以后mysql文件夹,发现新增加了conf、data、logs文件夹

    4、进入mysql容器并启动

    docker exec -it 33acaf75d352 /bin/bash
    
    或者
    docker exec -it mysqlserver bash

    5、登录mysql数据库

    mysql -uroot -p

    6、拉取tomcat并创建项目映射目录

    mkdir -p /home/docker/tomcat/webapps

    将项目放到webapps目录下

    7、 启动tomcat

     docker run --name tomcat -d -p 8080:8080 -v /home/docker/tomcat/webapps:/usr/local/tomcat/webapps tomcat:jdk8-adoptopenjdk-hotspot

     六、dockerfile 创建镜像

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    例一:把一个本地存在的jar包创建成镜像

    1)先在在/home/docker/files/pinter创建Dockerfile文件,然后编辑以下内容

    //CMDRunner.jar是需要依赖jdk的,所以需要基于Java的镜像基础上进行创FROM hub.c.163.com/library/java  
    即:基于hub.c.163.com/library/java这个镜像,此镜像已经提前拉取到了本地,如果没有拉到本地的话就会从网上拉取)
    FROM hub.c.163.com/library/java //做镜像的时候把jar放到镜像里面,放到里面的话先创建目录,然后复制到app目录下(这时候我们需要提前把CMDRunner.jar上传到pinter文件夹下) RUN mkdir -p /home/app COPY CMDRunner.jar /home/app //镜像的工作目录为/home/app,镜像对外暴露端口为8080 WORKDIR /home/app EXEPOSE 8080 //执行命令 CMD java -jar CMDRunner.jar

    备注:在一个Dockerfile里面可以有多个RUN,但是只能有一个CMD

    FROM 和 RUN 指令的作用

    FROM:定制的镜像都是基于 FROM 的镜像

    RUN:用于执行后面跟着的命令行命令。

    2)生成镜像

    //docker build 构建 ; -t:标签的含义  镜像名称:标签名称;.当前目录
    docker build -t CMDRunner:wufq .

     

     参考文章:https://www.runoob.com/docker/docker-dockerfile.html

    七、docker - compose容器管理工具

    1、下载安装:http://get.daocloud.io/#install-compose   可以在此网站上下载

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

     

     2、设置权限

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

    3、验证版本

    docker-compose -v

    4、在任意路径下创建docker-compose.yml文件

    touch docker-compose.yml

    创建好以后输入以下内容

    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]

    5、docker-compose常用命令

    后台启动容器:docker-compose up -d

    查看容器:docker-compose ps

    停止容器:docker-compose stop

    查看日志:docker-compose logs

  • 相关阅读:
    STL之vector详解
    vim下使用YouCompleteMe实现代码提示、补全以及跳转设置
    Ceph之数据分布:CRUSH算法与一致性Hash
    ceph之crush算法示例
    Js正则Replace方法
    JS框架设计之加载器所在路径的探知一模块加载系统
    JS模块加载系统设计V1
    JS框架设计之模块加载系统
    Builder生成器(创建型模式)
    JS框架设计之主流框架的引入机制DomeReady一种子模块
  • 原文地址:https://www.cnblogs.com/frankruby/p/14308725.html
Copyright © 2020-2023  润新知