zoukankan      html  css  js  c++  java
  • docker操作指南

    容器基本知识

    搭建环境

    参考Docker 环境搭建

    镜像

      基本操作

        1.查看镜像:docker images

        2.从registry下载镜像(默认的源是Docker Hub):docker pull [USERNAME/]IMAGE[:tag]

        3.查看某个镜像构建的层次:docker history IMAGE

           4.为镜像命名:docker tag [old_repositry]:[old_tag] [new_repositry]:[new_tag]

        5.上传镜像到Docker Hub上: docker push [USERNAME]/repositry:tag

          注:上传前要登陆:docer login -u USERNAME

        6.删除Docker host中的镜像:

          1.删除一个镜像:docker rmi IMAGE

          2.删除全部镜像:docker rmi $(docker images -q)

          镜像无法删除解决办法

          1.若某些镜像对应的容器处于run状态或者处于stop状态,则不能删除镜像。

            解决办法:删除镜像对应的容器:rm

          2.若两个镜像的IMAGE ID一样,这不能删除全部镜像。

            解决办法:逐个删除镜像。

        7.搜索Docker Hub中的镜像: docker search IMAGE

      内部结构

        Dockerfile是镜像的描述文件。构建Dockerfile的一些指令:

          1.FROM IMAGE:表示以IMAGE为基础,从而构建构建更高层次的镜像。

            例:FROM scratch:不以任何镜像为基础。

              注:一般以base镜像为基础:Ubuntu,Debian,CentOS

          2.ADD: 从build context复制文件到镜像。若文件时压缩包,则自动解压。 

          3.COPY:将build context中复制文件到镜像。

            1.COPY src dest

            2.COPY ["src", "dest"]

              注:src只能是build context中的文件或目录。

          4.ENV:设置环境变量

            例如:ENV MY_VERSION 1.3

               RUN apt install -y mypackage=$MY_VERSION (MY_VERSION被替换成1.3) 

          5.EXPOSE:指定暴露的端口。

          6.WORKDIR:指定容器当前的工作目录。

          7.RUN:运行特定的指令。

          8.CMD:容器启动时运行的指令,多个指令只有最后一个生效。CMD能被RUN参数替换。

          9.ENTRYPOINT:跟CMD一样,不一样的时CMD 和 docker run后的参数会传给ENTRYPOINT。不会被RUN后参数替换。

            注:DOCERFILE有两种模式:Shell和Exec模式。

            1.shell模式:<instruction> <command>

            2.exec模式:<instruction> ["executable", "param1", "param2", ...]

          10.MAINTAINER:镜像的作者。 

      构建镜像

        1.docker commit 命令

          构建步骤:

            1.运行容器

              例如:docker run -it --name=ubuntu_test ubuntu

            2.修改容器

              例如:apt install -y vim

            3.保存为新的镜像

              例如:docker commit ubuntu_test ubuntu-vim 

        2.dockerfile 构建文件 

          docker built -t IMAGE_NAME .

            注:-t表示打一个tag标签。

    容器

      基本操作

        1.启动容器:

          1.docker run [OPTIONS] IMAGE [COMMAND]:创建并运行容器。

            例如:docker run -d -p 80:80 httpd

              -d:以后台方式运行

              -p:指定端口

          2.docker create IMAGE: 只创建容器,不运行。 

        2.查看正在运行的容器:

          1.docker ps

          2.docker container ls

        3.指定容器名字:--name "CONTAINER_NAME"

        4.进入容器的方法:

          1.docker attach CONTAINER_NAME:进入容器,不能创建新进程

          2.docker exec CONTAINER_NAME op:进入容器,可以创建新进程。

        5.查看容器的输出:docker log -f CONTAINER

        6.停止正在运行的容器:

          1. docker stop/kill CONTAINER:占用CPU

          2. docker pause CONTAINER: 不占用CPU

        7.运行处于停止状态的容器:

          1. docker start CONTAINER

          2. docker unpause CONTAINER

        8.重启容器:

          1.restart = stop + start

          2.--restart=always:无论容器何种原因退出,立即重启容器。

          3.--restart=on-failure:3,若启动的进程退出并返回非0值,最多重启3次

        9.重启容器:

          docker rm CONTAINER

      参考容器操作图 

      容器的资源限制

        1.内存限制:

          1. -m 或 --memory: 随着之内存的使用限额。

            例如: -m 300M

          2.--memory-swap: 内存+swap的使用限额。

            例如:-memory-swap 400M

        2.CPU限制:-c 或 --cpu-shares

          例如:docker run --name "NAME1" -c 1024 IMAGE

             docker run --name "NAME2" -c 512 IMAGE:表示1号容器使用CPU时间是2号容器的2倍。

          注:--cpu 1:表示有1颗CPU

        3.限制磁盘读写速度:--blkio-weight

          例如:docker run -it --name CONTAINER_A --blkio-weight 600 IMAGE

             docker run -it --name CONTAINER_B --blkio-weight 300 IMAGE

           注:

            --device-read-bps,限制读某个设备的 bps。
            --device-write-bps,限制写某个设备的 bps。
            --device-read-iops,限制读某个设备的 iops。
            --device-write-iops,限制写某个设备的 iops。

              例如:docker run -it --device-write-bps /dev/sda:30MB IMAGE:限制对设备的写速度不超过30MB

    网络

      none网络

        --network=none : 表示除了lo网卡(ip=172.0.0.1,用于回环测试),没有其他任何网卡。一般用在高机密的应用中。

          例如:docker run -it --network=none ubuntu /bin/sh

      host网络

        --network=host:表示与主机host分享ip。

      bridge网络

        不指定network表示创建一个新的网络接口,挂到docker0上。

        网桥操作

        1.查看网桥名以及接口:brctl show

        2.查看网桥的详细信息(包括ip):docker network inspect BRIDGE 

      自定义(user-defined)网桥

        1.创建一个自定义的网络驱动:docker network create --driver bridge my_net

        2.指定自定义网桥的ip网段(sub-net)以及网关(gateway):--subnet和--gateway

        3.使用自定义的网桥:--network=MY_NET

        4.使用自定义网桥时指定静态ip:--ip。注意:只有指定--sub_net才能指定静态ip。

        

      两个容器间的通信

        两个容器若要通信,必须要有属于同一网络的网卡。

        1.在一个容器中创建一个网卡,挂在MY_NET上:docker network connect MY_NET CONTAINER

        2.docker的自定义网络自带DNS Sever服务,因此可以将ip换成容器名进行通信:

          docker run -it --network=MY_NET --name=CONTAINER IMAGE

            注:bridge网络没有DNS Server功能。

        3.使用joined容器方法让两个容器共享网卡信息和配置信息:

          docker run -it --network=container:CONTAINER IMAGE,这样新产生的容器可以共享CONTAINER的网络信息。

          好处:可以使用lo的ip地址让两个容器通信。

    存储

    容器平台知识

  • 相关阅读:
    ScheduledThreadPoolExecutor源码解读
    Spring事务源码阅读笔记
    Spring AOP的实现研究
    cglib之Enhancer
    Spring IOC容器创建bean过程浅析
    CompletionService简讲
    Spring Boot:关于“No converter found for return value of type: class xxx”的解决方法
    java关于Date转换成字符串格式以及Date的增加
    jsp中文乱码六种情况---解决方案
    MYSQL给表添加字段
  • 原文地址:https://www.cnblogs.com/yulianggo/p/10238244.html
Copyright © 2011-2022 走看看