docker

作者: yellow_hll | 来源:发表于2017-10-11 15:13 被阅读15次

C类ip192.168.1.0划分24个子网;子网掩码计算:1、24=11000 2、二进制是5位,n=5 3、255.255.255.xxx,第四组前5位为1,即11111000=248

192.168.2.22/24 :/24表示子网掩码前24位都为1,及255.255.255.0

192.168.2.64/26: 子网掩码:255.255.255.192,主机个数=后6位为0,如果全都填为1,则111111=63,63-2=61个主机,要去掉保留的2个地址。。。

先删除容器再删除镜像,否则删除的仅仅是name和tag
docker rmi xxxx 删除镜像



安装

    1、wget -qO- https://get.docker.com/ | sh
    (yum -y install deltarpm ,,yum -y install applydeltarpm)
    2、curl -sSL https://get.docker.com/ | sh

启动

    service docker start
    chkconfig docker on

验证

    docker run hello-world

修改非root用户的组为docker

    usermod  -aG docker work 
    (将work追加到docker组中,-a|--append  ##把用户追加到某些组中,仅与-G选项一起使用;-G|--groups  ##把用户追加到某些组中,仅与-a选项一起使用)

安装docker-compose

    curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version

docker ps 查看运行的容器
docker exec -it d48b21a7e439 /bin/bash 进入容器
docker attach d48b21a7e439 进入容器
docker atrach —sig-proxy=false mynginx —sig-false确保ctrl-d、ctrl-c不会关闭容器


    搜索docker镜像
    docker search tutorial
    下载镜像
    docker pull learn/tutorial
    运行docker
    1、docker run learn/tutorial echo "hello world"
    2、docker run -it  -d --name="myruncontrainer" -h "hostname" -e ENVNAME="hello world" -P/-p 1234:6379 myredis:v3

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]    

  -d, --detach=false         指定容器运行于前台还是后台,默认为false     
  -i, --interactive=false   打开STDIN,用于控制台交互    
   -t, --tty=false            分配tty设备,该可以支持终端登录,默认为false    
   -u, --user=""              指定容器的用户    
   -a, --attach=[]            登录容器(必须是以docker run -d启动的容器)  
   -w, --workdir=""           指定容器的工作目录   
   -c, --cpu-shares=0        设置容器CPU权重,在CPU共享场景使用    
   -e, --env=[]               指定环境变量,容器中可以使用该环境变量    
   -m, --memory=""            指定容器的内存上限    
   -P, --publish-all=false    指定容器暴露的端口    
   -p, --publish=[]           指定容器暴露的端口   
   -h, --hostname=""          指定容器的主机名    
   -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录    
   --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录  
   --cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities    
   --cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities    
   --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法    
   --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU    
   --device=[]                添加主机设备给容器,相当于设备直通    
   --dns=[]                   指定容器的dns服务器    
   --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件    
   --entrypoint=""            覆盖image的入口点    
   --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量    
   --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口    
   --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息    
   --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用    
   --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字    
   --net="bridge"             容器网络设置:  
                            bridge 使用docker daemon指定的网桥       
                            host    //容器使用主机的网络    
                            container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源    
                            none 容器使用自己的网络(类似--net=bridge),但是不进行配置   
   --privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities    
   --restart="no"             指定容器停止后的重启策略:  
                            no:容器退出时不重启    
                            on-failure:容器故障退出(返回值非零)时重启   
                            always:容器退出时总是重启    
   --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)    
   --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

docker容器&镜像

    假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。
    这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。
    一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
    Docker镜像通过镜像ID进行识别。
    镜像ID是一个64字符的十六进制的字符串。
    但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。
    ---
    创建容器会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。
   
    我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
    
    我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。
    
    如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。

    如果想更新容器到其镜像的新版本,那么必须当心,确保我们是以正确的方式构建了数据结构,否则我们可能会导致损失容器中所有数据的后果。

     64字符的十六进制的字符串来定义容器ID,它是容器的唯一标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。
      当然,我们还可以使用容器名,但显然用4字符的容器ID更为简便

docker容器使用


    查看docker 单条指令的参数
    docker run --help

    查看端口映射
    docker port 7a38a1ad55c6
    用-p指定容器映射宿主机端口
    docker run -d -p 5000:5000 training/webapp python app.py

    查看容器内部的标准输出
    1.docker logs [ID或者名字]
    2.docker logs -f [ID]

    查看容器中的所有进程
    docker top [ID]

    查看更详细的容器信息
    docker inspect d11c00fbb89c(可以不用匹配全部ID,ID的前面部分信息就能匹配出相应的ID)

    停止应用容器
    docker stop 【ID、name】
    启动应用容器
    docker start 【ID、name】
    docker restart【ID、name】
    删除容器,删除前必须先停止容器
    docker rm 【ID、name】
    一次性删除全部容器
    docker rm `docker ps -a -q` (-a 列出所有容器,-q只列出容器ID)

docker 镜像使用


    列出本地主机的所有镜像
    docker images
    ---
    REPOSTITORY:表示镜像的仓库源
    TAG:镜像的标签
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小
    统一仓库源有多个TAG,我们使用REPOSTITORY:TAG 来定义不同的镜像。
    ---
    docker run -it ubuntu:14.04 /bin/bash
    docker run -it ubuntu /bin/bash (默认使用ubuntu:latest镜像)

     查找镜像
       docker search httpd
      ---
      NAME:镜像仓库源的名称
      DESCRIPTION:镜像的描述
      OFFICIAL:是否docker官方发布

    更改镜像
    1.从已经创建的容器中更新镜像,并且提交这个镜像
    2.使用Dockerfile指令来创建一个新的镜像
    ---
    先用已有的镜像创建一个容器
    docker run -it ubuntu:15.10 /bin/bash
    在运行的容器内更新操作
    提交容器副本
    docker commit -m="has update" -a="hll" e218edb10161 hll/ubuntu:v1
    -m:提交的描述信息
    -a:指定镜像作者
    e218edb10161:要提交的容器ID
    hll/ubuntu:v1:指定要创建的目标镜像名
    使用新镜像来启动一个容器
    docker run -it [hll/ubuntu:v1或者image id] [/bin/bash]
    ---
    构建镜像
    创建Dockerfile文件:
    runoob@runoob:~$ cat Dockerfile 
    FROM    centos:6.7
    MAINTAINER      Fisher "fisher@sudops.com"

    RUN     /bin/echo 'root:123456' |chpasswd
    RUN     useradd runoob
    RUN     /bin/echo 'runoob:123456' |chpasswd
    RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D
    ---
    每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
    第一条FROM,指定使用哪个镜像源
    RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
    然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
    -------
    docker build -t runoob/centos:6.7 .
    -t :指定要创建的目标镜像名
    . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
    ----
    ----
    设置镜像标签
     docker tag 860c279d2fec runoob/centos:[newtag]

    我们也可以使用 -p 标识来指定容器端口绑定到主机端口。
    两种方式的区别是:
      -P :是容器内部端口随机映射到主机的高端口。
      -p : 是容器内部端口绑定到指定的主机端口。
            docker run -d -P training/webapp python app.py
            docker run -d -p 5000:5000 training/webapp python app.py
            docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py
    ---
    默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
            docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

    Docker容器连接
      端口映射并不是唯一把 docker 连接到另一个容器的方法。
      docker有一个连接系统允许将多个容器连接在一起,共享连接信息。
      docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。

    容器命名
    当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用--name标识来命名容器
            docker run -d -P --name runoob training/webapp python app.py



FROM centos:latest
MAINTAINER HLL 'oneapm.com'
ENV REFRESHED_AT 2017-10-16
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN yum -y update && yum -y install epel-release && yum -y install net-tools && yum -y install gcc && yum -y install make
RUN mkdir /etc/redis
RUN mkdir /data
COPY redis-3.2.9.tar.gz /data/
RUN cd /data && tar -zxvf /data/redis-3.2.9.tar.gz \
        && cd /data/redis-3.2.9 \
        && make && make PREFIX=/usr/local/redis install \
        && cp utils/redis_init_script /etc/rc.d/init.d/redis \
        && sed -i '/#!\/bin\/sh/a\#chkconfig: 2345 80 90' /etc/rc.d/init.d/redis \
        && sed -i 's/$EXEC $CONF/$EXEC $CONF \&/' /etc/rc.d/init.d/redis \
        && cp redis.conf /etc/redis/6379.conf \
        && sed -i 's/\/home\/ai\/redis\/log/data/' /etc/redis/6379.conf \
        && sed -i 's/daemonize yes/daemonize no/' /etc/redis/6379.conf \
        && sed -i 's/bind 127.0.0.1/#bind 127.0.0.1/' /etc/redis/6379.conf \
        && sed -i 's/protected-mode yes/protected-mode no/' /etc/redis/6379.conf \
        && chkconfig redis on
VOLUME /data
WORKDIR /data
ENTRYPOINT ["/bin/sh","-c"]
#ENTRYPOINT ["/usr/sbin/init"]
EXPOSE 6379
#CMD ["systemctl start redis"]
CMD ["/usr/local/redis/bin/redis-server /etc/redis/6379.conf"]
  ----
    (protected-mode no,注释bind)
  ----
   docker build -t myredis:v3
   docker run -it -P -d myredis:v3

    保存镜像到本地
    docker save jasperxu/alpine:v3 > alpine.tar
    导入本地文件到镜像
    docker load < alpine.tar
    上传镜像
    docker login
    docker push huanglinglin/myredis:v3

    配置文件
    /usr/lib/systemd/system/docker.service
    /etc/default/docker
    容器镜像存放路径
    other_args="--graph=/docker"

相关文章

  • docker学习

    docker镜像 docker容器 docker仓库 安装docker docker版本 docker分为社区版和...

  • Docker安装和运行

    获取Docker 安装Docker 验证安装 1、获取Docker Docker for Mac Docker f...

  • Docker知识手册

    Docker 容器 启动docker:docker start 查看docker运行状态:docker stats...

  • Docker简介

    章节介绍 # Docker是什么# Docker包括什么# Docker镜像# Docker编配# Docker还...

  • Docker 常用操作

    Docker docker: 18.09.4、nvidia-docker: 2.0.3 docker 19.03 ...

  • rancher+harbor离线安装

    安装docker,此docker为社区版docker。docker官方文档:https://docs.docker...

  • Linux之Docker

    Linux之Docker 目录 Docker简单介绍 在线Docker安装 离线Docker安装 Docker简单...

  • Docker常用命令

    Docker常用命令 Docker帮助命令 docker version:查看docker版本 docker in...

  • Docker基础操作

    Docker部署 Docker安装 镜像加速 Docker 基础命令 Docker镜像管理 搜索镜像docker ...

  • docker容器状态查看命令集

    docker inspect 用法 : docker inspect [docker名称/docker short...

网友评论

      本文标题:docker

      本文链接:https://www.haomeiwen.com/subject/qzswyxtx.html