首页 > 其他分享 >docker

docker

时间:2023-07-20 14:00:42浏览次数:24  
标签:容器 compose 创建 镜像 docker 运行

Docker:开源的应用容器引擎;是一个轻量级容器技术

Dockerfile:用于创建镜像

Images:镜像,相当于一个root文件系统,用于创建容器的模板

Container:容器,镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行的实体

Docker Compose:docker 容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理

Docker Volume:数据卷积实现数据持久化

Docker Swarm:集群,管理批量容器

Docker Registry:docker仓库,算是代码控制中心,用来保存镜像

 

 

Docker 常用命令操作

  docker image 

    docker images:列出所有镜像

    docker images -q :仅列出镜像的 ID

    docker pull nginx :下载镜像 nginx

    docker rmi  ImageID :删除镜像

    docker inspect Jenkins :查看镜像 Jenkins 详细信息

    docker tag ImageID 镜像源名:新标签名:设置镜像标签,如:docker tag imageID test2:v2

 

    创建镜像,有两种方法:

      1、从已经创建的容器中更新镜像,并且提交这个镜像

        使用来创建一个容器,在运行中的容器的交互环境中执行指令 apt-get update,执行docker commit 提交容器副本

          docker  commit  -m=" has update"  -a="runoob"  ContainerID  runoob/ubuntu:v2

            --- -m:提交的描述信息

            --- -a:指定镜像作者

            --- runoob/ubuntu:v2:镜像名称

      2、使用Dockerfile 指令来创建一个新的镜像

         需要 Dockerfile 文件创建,其中包含一组指令来告诉Docker 如何构建我们的镜像

 

    

    共享 images

      上传 image 到 Docker Repository

        1、docker 登录 :docker login

        2、推送:

          1)构建一个image:docker build -t 用户名 / image .   ;如:docker build -t youyou1/flask_app:latest .

          2)推送image:docker push 用户名 / image   如:docker push youyou1/flask_app:latest

      导出保存为压缩文件

        docker  save -o apitest.tar apitest:latest

      导入压缩文件

        docker load -i apitest.tar

 

  docker container

   docker build -t image :构建服务容器

    docker run image :运行容器,如运行一个 image:docker run --name flask_app -d -p 8080:5000 flask_app

      --- d:后台运行服务,想要进入容器需要使用指令 doker exec

      --- p:是容器内部端口绑定到指定的主机端口

      --- P :是容器内部端口随机映射到主机的端口

    docker run -itd  --name flask_app flask_app /bin/sh:运行并命名镜像 flask_app 的容器为 flask_app,并以命令行模式进入到容器当中交互

        --- t :在新容器内指定一个伪终端或终端

      --- i:允许你对容器内的标准输入,进行交互

        

        

 

    docker ps :列出当前运行的容器

    docker ps -a :列出系统中所有的容器

    docker ps -l :查询最后一次创建的容器

    sudo docker history centos :列出容器上运行的所有历史命令

    docker top ContainsID :查看容器的进程

    docker stats ContainsTD :查看容器的资源利用情况

    docker stop ContainsID :停止容器

    docker start ContainsID :开启已停止的容器

    docker restart ContainsID :开启容器

      docker pause web :暂停容器 web

    docker unpause web :启动容器 web

    docker export ContainsID > ubuntu.tar :导出本地某个容器快照到本地文件 Ubuntu.tar ,可以使用docker export 命令

    docker rm web :删除容器 web

    docker rm -f web :删除正在运行的容器 web

    docker container prune :清理掉所有处于终止状态的容器

    docker logs -f containerID or name:查看容器内部的标准输出,-f 参数是容器的标准输出

    

  network

    docker0 :默认容器 与宿主机之间沟通的桥梁

    网络类型

      bridge :nat 网络模型;虚拟交换机

    host :与宿主机共享网络;--net = host

    none :不配置网络;--net = none

    overlay :不同网络进行通信

    与一个容器共享网络:--net = container :ContainerName

    如:

    查看 docker 网络

      docker network ls

      docker network inspect networkname

    创建 docker 网络

      docker network create --driver drivername name,如:docker network create -d bridge test-net

      docker network create -d bridge --subnet 172.16.100.0 / 24 one_network

      --- -d:参数指定Docker 网络类型,有 bridge /overlay

   连接容器

    运行一个容器并连接到新建的 test-net 网络:

        docker run -itd --name test1 --network test-net ubuntu /bin/bash

    打开一个新的终端,再运行一个容器并加入到 test-net 网络:

       docker run -itd --name test2 --network test-net ubuntu /bin/bash

    进入任意一个容器的交互环境,ping另一个容器:

      docker exec -it test1 /bin/bash

      ping test2

      

    删除 docker 网络

      docker network rm networkname

            

      

  volume

    volume :使用数据卷积实现数据持久化

                用途:数据备份 、数据共享

    相关操作命令

      创建:docker volume create [ OPTIONS ]  [ VOLUME ]

      查看:docker volume inspect [ OPTIONS ] [ VOLUME ... ]

      挂载:docker run -v 宿主机目录:容器目录

      删除:docker volume rm [ OPTIONS ] VOLUME [ VOLUME... ]

             

      

 

  Dockerfile

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

    FROM :指明 base image (在哪一个 image 的基础上创建),强制执行的

    LABEL :指明 Dockerfile 的作者,不执行的指令

    RUN :构建镜像时运行的指令,在已存在的 image 顶层执行命令后,创建一个新的 layer 层,用于执行后面跟着的命令行命令;

        一般将需要安装的依赖,使用一个 RUN 来创建,如:RUN apt-get update && apt-get install -y nginx

        

    ENV :在容器内创建环境变量,在后续的指令中可以通过$username 引用

         ENV username = youyou1

            password = 123456

    COPY :从上下文目录中复制文件、目录到容器指定路径,容器路径不需要事先建好,不存在会自动创建路径,如:COPY test.py /mydir/

    ADD :跟 copy 使用类似(官方推荐使用copy),但ADD 能把数组积中的解压压缩文件并复制到容器中,而且支持远程下载

         如,解压压缩文件并复制到容器 / usr/src :ADD http://www.youyou.site/youyou.tar.xz   /usr/src

            if

    WORKDIR :切换目录,若目录不存在会自动创建,是一直存在的

    USER :设置运行其它命令的用户(UID);如:USER root

    VOLUME :定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷;指定需要持久保存的目录(数据备份),如:VOLUME /data

           定义 VOLUME 后,在docker run的时候,可以通过-v参数修改挂载点

    EXPOSE :仅仅只是声明端口,作用:

          ---用于帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射

          ---在运行时使用随机端口映射时,也就是docker run -P 会自动随机映射 EXPOSE 的端口

    ENTRYPOINT vs CMD:

      不同点

        CMD:类似于RUN指令,用于运行程序,RUN是 docker build 时运行,但CMD是 docker run 时运行,运行容器时,不加任何参数,会自动执行CMD,如果添加参数则会忽略 CMD

           如果有多个CMD,则只有最后一个会执行,其它都会被忽略

           可以给ENTRYPOINT 传参(CMD [ "param 1",” param 2 “ ],如果ENTRYPOINT 使用shell format 则会被忽略)

        ENTRYPOINT :运行容器时,如果添加参数不会忽略 ENTRYPOINT 

      相同点

        --- 只有一个 CMD 或者 ENTRYPOINT 时,两者无区别

        --- shell 格式 和 exec 格式

          shell格式:R U N:<命令行命令>,等同于,在终端操作的shell 命令

          exec格式:R U N:["可执行文件","参数1","参数2"],如:

              RUN ["./test.php","dev","offline"]等价于 RUN ./test.php dev offline

    运行 Dockerfile构建一个镜像:

      先cd到对应的目录下,运行构建test2:v1(镜像名称:镜像标签)命令:

        docker build  -t  test2:v1  -f  Dockerfile1  .

          .:最后的(.)代表本次执行的上下文路径,上下文路径是指docker 在构建镜像,有时候想要使用到本机的文件(比如复制),

            docker build 命令得知这个路径后,会将路径下的所有内容打包

          -f :若文件未命名未Dockerfile,则需要添加这个-f参数指定文件名

          -t :指定要创建的目标镜像名

         

 

  Docker Compose

    Compose 是用于定于和运行容器 Docker 应用程序的工具,通过Compose 可以使用YML 文件来配置应用程序需要的所有服务,然后使用一个命令,就可以让Yml 文件配置中创建并启动所有服务;使用Docker Compose 不再需要使用 shell 脚本来启动容器,有两个重要的概念

      项目(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义

      服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例

      docker-compose 运行目录下的所有 yml 文件组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务可包括多个容器实例。

      

      compose使用的三个步骤:

        1、使用Dockerfile 定义应用程序的环境

        2、使用docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行

        3、执行 docker-compose up 命令来启动并运行整个应用程序

 

    安装:1、下载新版 compose 文件:

       sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

       或通过其它路径安装:

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

       2、添加可执行权限:sudo chmod +x /usr/local/bin/docker-compose

       3、检查安装 compose 版本:docker-compose --version

 

    使用 Docker-compose 创建 Flask 应用

      1、创建项目目录

        mkdir flask_examples

        cd flask_examples

 

      2、在项目目录中创建 Dockerfile 文件

        

 

      3、在项目目录中创建 docker-compose.yml 文件,在  services 区域下定义两个web 和redis 容器:

       

 

      4、在项目目录中创建 my_app.py 文件

        

 

      5、在项目目录中创建 requirements.txt 文件

        flask

        redis

 

      6、在项目所在目录运行如下命令,若想在后台执行服务可以加 -d 参数:docker-compose up

        若 yml 文件名未默认,则使用 -f 指定文件:docker-compose -f docker_compose1.yml up

        以依赖性顺序启动服务:docker-compose up SERVICE,如先启动db 和redis 再web 服务:

               

          

        部署deploy ,指定与服务部署和运行有关的配置,只在swarm 模式下有用,如:

               

           endpoint_mode:访问集群服务的方式

              endpoint_mode:vip: Docker 集群服务对于一个对外的虚拟ip ,所有的请求都会通过这个虚拟的ip 到达集群服务内部的机器

              endpoint_mode:dnsrr:DNS 轮询,所有的请求会自动轮询获取到集群 ip 列表中的一个ip 地址

          mode:指定服务提供的模式

              replicated:复制服务,复制指定服务到集群的机器上

              global:全局服务,服务将部署至集群的每个节点上

           replicas:mode为 replicated 时,需要使用此参数配置具体运行的节点数量

          resources:配置服务器资源利用的限制,如上列子中,配置redis 集群运行需要的CPU 的百分比和内存的占用,避免资源占用过多出现异常

          restart_policy:配置如何在退出容器时重新启动容器

              condition:可选none ,on-failure(异常退出) 或者any(默认)  

              delay:设置多久之后重启(默认:0)

              max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认一直重试)

              window:设置容器重启超时时间

          rollback_config:配置在更新失败的情况下应如何回滚服务

              parallelism:一次要回滚的容器数,如果设置为0,则所有容器将同时回滚

              delay:每个容器组回滚之间等待的时间(默认为0)

              failure_action:如果回滚失败,该怎么办,其中一个continue 或者pause(默认)

              monitor:每个容器更新后,持续观察是否失败了的时间(默认0 s )

              max_failure_ratio:在回滚期间可以容忍的故障率(默认为 0 )

              order:回滚期间的操作顺序,其中一个 stop-first (串行回滚)(默认),或者 start-first (并行回滚)

          update_config:配置应如何更新服务,对于配置滚动更新很有用

              parallelism:一次更新的容器数

              delay:在更新一组容器之间等待的时间

              failure_action:如果更新失败,该怎么办,其中一个 continue,rollback 或者pause(默认)

              monitor:每个容器更新后,持续观察是否失败了的时间(默认 0 s)

              max_failure_ratio:在更新期间可以容忍的故障率

              order:回滚期间的操作顺序。其中一个 stop-first (串行回滚,默认)或者 start-first(并行回滚)

            

  docker Machine

  docker swarm  

      

       

      

    

 

标签:容器,compose,创建,镜像,docker,运行
From: https://www.cnblogs.com/lili37/p/17544218.html

相关文章

  • go语言操作docker终止容器
    代码部分packagemainimport( "context" "fmt" "os" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client")funcmain(){ //设置远程Docker守护进程的地址 remoteDockerURL:="tcp:......
  • 使用Docker+PHP搭建苹果Maccms的影视站详细教程
    自己做博客站太难了,SEO太差自己都搜不到,原文地址求你点进去看:https://typecho.hanzhe.site/archives/88说在前面很早之前还没参加工作的时候,手头没钱,想要看一些电影什么的充不了会员,一般都会在网上搜VIP影视这类的盗版网站,参加工作后对这些网站仍然很好奇,没有收入来源这些站是怎......
  • kkfileview docker部署
    使用Docker部署kkfileview在开发应用程序时,我们经常需要展示和预览各种类型的文件,例如PDF、Word、Excel等。kkfileview是一个功能强大的文件预览组件,通过使用Docker,我们可以轻松地将其部署到我们的项目中。Docker简介Docker是一个开源的容器化平台,可以帮助开发人员将应用程序及......
  • k8s挂在docker目录
    在Docker中挂载Kubernetes目录的步骤介绍在Kubernetes(简称K8s)中,我们可以使用Volume挂载来实现在Pod中访问宿主机上的目录。本文将指导你如何在Docker中挂载Kubernetes目录。步骤概述下表展示了完成此任务的步骤概述:步骤描述步骤1创建一个KubernetesPod步骤2......
  • k8s docker 版本对应
    在使用Kubernetes(简称K8s)进行容器编排时,我们通常会使用Docker作为我们的容器运行时环境。Docker和Kubernetes之间的版本兼容性是一个重要的问题,因为不同版本的Docker和Kubernetes可能会有不同的特性和功能。本文将介绍Kubernetes和Docker之间的版本对应关系,并提供一些代码示例来帮......
  • jumperserver docker
    实现"jumperserverdocker"的流程为了实现"jumperserverdocker",我们可以按照以下步骤进行操作。下面是每个步骤的具体说明和相应的代码示例。步骤一:安装Docker在开始之前,你需要确保已经在你的机器上安装了Docker。如果没有安装,你可以按照以下步骤操作进行安装:打开终端或......
  • go通过docker sdk将容器中的文件或者文件夹复制到本地
    第一步:需要创建docker客户端第二步:将文件复制出来,但是复制出来的文件无论文件还是文件夹都会是tar存档的形式第三步:解包packagemainimport( "archive/tar" "context" "fmt" "io" "os" "path/filepath" "github.com/docker/docker/client&quo......
  • win10使用Docker Desktop启动mysql报错:Error response from daemon: Ports are not av
    问题描述今天上班用wind10电脑启动DockerDesktop使用MySQL,突然间报了一个错,错误如下:Errorresponsefromdaemon:Portsarenotavailable:exposingportTCP0.0.0.0:3306->0.0.0.0:0:listentcp0.0.0.0:3306:bind:Anattemptwasmadetoaccessasocketinaway......
  • IntelliJ Docker环境构建
    介绍,以 Python为例  自从我购买了一台新的Macbook之后,我不得不重新创建Python开发环境,但是如果我直接在本地安装Python,则会不小心在全球安装该软件包,或者即使我使用venv,也要重新创建该环境。就像我想要的时候麻烦一样,所以我决定使用Docker来构建它。在IntelliJ上安装插件......
  • Docker CLI docker container prune 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中......