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地址让两个容器通信。

存储

容器平台知识

原文地址:https://www.cnblogs.com/yulianggo/p/10238244.html