zoukankan      html  css  js  c++  java
  • docker学习笔记 一

    • IPC:进程间通信ƒ

    • user隔离是在内核3.8+以上才实现

    centos初始化配置docker

    uname -a
    cat /etc/redhat-release 
    getenforce
    systemctl status firewalld
    systemctl stop firewalld
    
    cat /etc/yum.repos.d/CentOS-Base.repo 
    yum list docker --show-duplicates
    yum install yum-utils -y
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum list docker-ce --show-duplicates
    yum install docker-ce -y
    systemctl enable docker
    systemctl start docker
    docker info
    
    [root@huan ~]# vim /etc/docker/daemon.json
    
    {
      "graph": "/data/docker",
      "storage-driver": "overlay2",
      "insecure-registries": ["registry.access.redhat.com","quay.io"],
      "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
      "bip": "172.91.245.1/24",
      "exec-opts": ["native.cgroupdriver=systemd"],
      "live-restore": true
    }
    
    参数 作用
    graph 工作目录
    storage-driver 存储驱动
    insecure-registries 私有仓库
    registry-mirrors 镜像源
    bip docker地址网段,中间两位
    改成和IP地址后两个
    方便排查
    exec-opts 额外的参数,cgroupdriver设置成systemd
    live-restore 配置成true
    当docker服务挂掉后,docker容器还能存活
    不依赖于docker服务本身

    docker容器、镜像、仓库之间的关系

    创建hub.docker.com账号

    [root@huan ~]# docker login docker.io
    
    [root@huan ~]# docker search alpine
    [root@huan ~]# docker pull alpine
    

    只是删除标签

    [root@huan ~]# docker rmi docker.io/xxxxxxxxxxxx/alpine:latest
    Untagged: xxxxxxxxxxxx/alpine:latest
    

    删除镜像需要带上镜像id

    docker rmi a24bb4013296
    Error response from daemon: conflict: unable to delete a24bb4013296 (must be forced) - image is referenced in multiple repositories
    # 有其他镜像关联到此镜像,加上-f是强制删除
    docker rmi -f a24bb4013296
    Untagged: alpine:latest
    Untagged: alpine@sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
    Untagged: xxxxxxxxxxxx/alpine:v3.10.3
    Untagged: xxxxxxxxxxxx/alpine:v3.10.3
    Untagged: xxxxxxxxxxxx/alpine@sha256:a15790640a6690aa1730c38cf0a440e2aa44aaca9b0e8931a9f2b0d7cc90fd65
    Deleted: sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
    Deleted: sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a
    
    

    从自己的镜像仓库下载下来

    [root@huan ~]# docker pull docker.io/xxxxxxxxxxxx/alpine:latest
    

    docker镜像特性

    AUSS

    如果base image很大,每次变更的增量部分很小, 1个G那也能接受,镜像绝对大小毫无意义。

    启动容器(运行镜像)

    [root@huan ~]# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    

    OPTIONS选项

    -i:表示启动一个可交互的容器,并持续打开标准输入

    -t:表示使用终端关联到容器的标准输入上输出

    -d:表示将容器放置后台运行

    -p:表示容器运行时所需要的端口号

    -v:表示需要将容器运行时所需要挂载到宿主机的目录

    --rm:退出后即删除容器

    --name:给容器自定义一个唯一名称,如果不指定随机生成一个名字

    IMAGE:表示要运行的镜像

    COMMAND:表示启动容器时要运行的命令

    启动

    [root@huan ~]# docker run -it xxxxxxxxxxxx/alpine
    
    / # cat /etc/issue 
    Welcome to Alpine Linux 3.12
    Kernel 
     on an m (l)
    
    / # exit
    
    [root@huan ~]# docker ps
    CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
    68376c046405        xxxxxxxxxxxx/alpine   "/bin/sh"           33 seconds ago      Up 33 seconds                           intelligent_leakey
    [root@huan ~]# docker ps -a
    CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS                     PORTS               NAMES
    68376c046405        xxxxxxxxxxxx/alpine   "/bin/sh"           2 minutes ago       Exited (0) 5 seconds ago                       intelligent_leakey
    
    
    [root@huan ~]# docker run --rm xxxxxxxxxxxx/alpine:latest /bin/echo hello
    hello
    
    # 批量删除已退出的容器
    [root@huan ~]# for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm -f $i;done
    

    docker容器有自己的文件系统树,做了文件系统之间的隔离,文件隔离,网络隔离,ipc隔离等等

    [root@huan ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    alpine              3.10.1              b7b28af77ffe        13 months ago       5.58MB
    

    提交容器

    [root@huan ~]# docker commit
    [root@huan ~]# docker commit -p myalpine oldboy1103/alpine:v3.10.3_with_1.txt
    

    固化到只读层了

    docker导出镜像到宿主机

    [root@huan ~]# docker save b7b28af77ffe > alpine:v3.10.3_with_1.txt.tar
    [root@huan ~]# ll
    -rw-r--r-- 1 root root   5852160 8月  15 20:03 alpine:v3.10.3_with_1.txt.tar
    

    导入镜像

    [root@huan ~]# docker load < alpine:v3.10.3_with_1.txt.tar
    [root@huan ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              b7b28af77ffe        13 months ago       5.58MB
    

    使用docker images发现REPOSITORY和TAG都是none,使用tag即可打标签

    [root@huan ~]# docker tag b7b28af77ffe oldboy1103/alpine:v3.10.3_with_1.txt
    [root@huan ~]# docker images
    REPOSITORY          TAG                  IMAGE ID            CREATED             SIZE
    oldboy1103/alpine   v3.10.3_with_1.txt   b7b28af77ffe        13 months ago       5.58MB
    

    把标准输出重定向到日志

    docker run hello-world 2>&1 >>/dev/null
    

    查看日志,不加-f也可以

    docker logs -f 容器镜像ID
    

    docker容器的高级操作

    不是因为难,而是因为特别重要。

    下载nginx

    [root@huan ~]# docker pull nginx:1.12.2
    [root@huan ~]# docker tag 4037a5562b03 oldboy1103/nginx:v1.12.2
    [root@huan ~]# docker images
    REPOSITORY          TAG                  IMAGE ID            CREATED             SIZE
    oldboy1103/alpine   v3.10.3_with_1.txt   b7b28af77ffe        13 months ago       5.58MB
    nginx               1.12.2               4037a5562b03        2 years ago         108MB
    oldboy1103/nginx    v1.12.2              4037a5562b03        2 years ago         108MB
    

    端口映射,容器外端口:容器内端口

    [root@huan ~]# docker run --rm --name mynginx -d -p81:80 oldboy1103/nginx:v1.12.2
    

    下载百度首页进行演示

    [root@huan ~]# mkdir html
    [root@huan html]# wget www.baidu.com -O index.html
    [root@huan html]# docker run -d --rm --name nginx_with_baidu -d -p82:80 -v /root/html:/usr/share/nginx/html oldboy1103/nginx:v1.12.2
    

    inspect命令

    docker inspect 容器ID
    

    容器传递环境变量

    [root@huan ~]# docker run --rm -e E_OPTS=abcdefg oldboy1103/alpine:latest printenv
    
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=b6759d28963f
    E_OPTS=abcdefg
    HOME=/root
    

    进入容器

    [root@huan ~]# docker exec -ti nginx_with_baidu /bin/bash
    
    root@0ffcc450e2f6:/# tee /etc/apt/sources.list << EOF
    > deb http://mirrors.163.com/debian/ jessie main non-free contrib
    > deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
    > EOF
    deb http://mirrors.163.com/debian/ jessie main non-free contrib
    deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
    
    root@0ffcc450e2f6:/# apt-get update && apt-get install curl -y
    

    开始固化

    [root@huan ~]# docker ps
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                NAMES
    0ffcc450e2f6        oldboy1103/nginx:v1.12.2   "nginx -g 'daemon of…"   5 minutes ago       Up 4 minutes        0.0.0.0:82->80/tcp   nginx_with_baidu
    
    [root@huan ~]# docker commit -p 0ffcc450e2f6 xxxxxxxxxxxx/nginx:curl
    [root@huan ~]# docker images
    REPOSITORY           TAG                  IMAGE ID            CREATED             SIZE
    xxxxxxxxxxxx/nginx   curl                 6f10e7047510        2 minutes ago       136MB
    
    [root@huan ~]# docker push xxx/nginx:curl
    The push refers to repository [docker.io/xxxxxxxxxxxx/nginx]
    761966e456bc: Pushed
    4258832b2570: Mounted from library/nginx
    

    mounted在push的时候,就会从公网的library/nginx中mount过来一层,这样就会节省网络流量z

    容器内安装软件(工具)

    生产干货:公司用的容器最多的发行版本是debian系,生产上大量的都是用的debian系,反而红帽系很少,包括老外。

  • 相关阅读:
    递归 例子 c
    Static和extern关键字 c
    typedef的作用
    预编译指令包括:宏定义;条件编译;文件包含(就是include)
    枚举 c
    结构体 可以由多个不同类型的数据构成
    变量类型 c
    指针类型:非常重要 c
    设计模式学习--原型模式
    设计模式学习--工厂方法模式
  • 原文地址:https://www.cnblogs.com/liuhuan086/p/13510426.html
Copyright © 2011-2022 走看看