• docker(一)


    什么是容器

    容器就是在隔离的环境里面执行的命令产生的一个进程, 如果进程停止, 容器就会销毁。

    容器运行的隔离环境有系统文件,ip地址, 主机名等。


    容器和虚拟化的区别


    kvm虚拟化

    需要硬件的支持, 需要模拟硬件(CPU, 网卡, 内存等), 可以运行不同的操作系统, 启动时间分钟级(走开机启动流程)


    linux开机启动流程

    • bios开机自检
    • 根据bios设置的启动项(光盘,本地硬盘)来启动设备
    • 读取启动设备的引导分区(mbr), 根据引导分区的配置路径启动内核
    • 加载内核
    • 启动第一个进程 (centos6: /sbin/init, centos7: /usr/lib/systemd/systemd)

    容器虚拟化

    不需要硬件的支持, 不需要模拟硬件, 共用宿主机的内核, 启动时间秒级(直接就跳到开机启动流程的加载内核开始-启动第一个进程)


    容器相对于kvm的优势

    • 容器启动速度快
    • 性能高
    • 资源消耗少

    容器的弱点

    • 只能使用linux的系统

    使用chroot监狱限制ssh用户访问制定目录和使用制定命令

    https://linux.cn/article-8313-1.html


    docker容器

    docker是通过内核虚拟化技术(namespace和cgroups)

    namespace: 提供隔离环境(独立的系统文件, ip地址, 主机名)

    cgroups: 限制进程资源的使用(多少内存, 多少CPU, 硬盘的读写)


    docker的主要目标是构建,传输, 处处运行

    所以 docker又叫是一种软件的打包技术


    • 构建

      做一个docker镜像

    • 运输

      docker pull

    • 运行

      启动一个容器

    每一个容器都有自己的系统文件 rootfs


    docker安装

    https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/


    • 更换成阿里云的基础yum仓库

    https://developer.aliyun.com/mirror

    $  mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    $  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    

    • 下载docker源
    $  wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
    

    • 把软件仓库地址替换为 TUNA
    $  sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    

    • 安装
    $  yum makecache fast
    $  yum install docker-ce
    

    • 启动服务
    $  systemctl start docker
    $  systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to 
    

    docker组件

    docker主要组件有: 镜像, 容器, 仓库

    镜像是一个模板, 容器就是基于模板做的链接克隆, 仓库中存储镜像

    容器----镜像----仓库


    docker安装nginx

    • 配置docker镜像加速
    $  vim /etc/docker/daemon.json
     {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    
    }
    $  systemctl restart docker
    

    • 安装nginx
    $  docker run -d -p 80:80 nginx
    

    • 启动nginx
    $  docker run -d -p 80:80 nginx
    c1c07622a1956eb52a6c59b4756baf928def2c84afb44f19ab810ab3f1d9adfe
    

    docker的镜像管理


    search  搜索镜像
    pull	下载镜像
    list	查看镜像列表
    save	导出镜像
    load	导入镜像
    rmi		删除镜像
    inspect	查看镜像属性
    

    搜索镜像

    docker search <镜像名>

    $ docker search zabbix
    

    获得镜像

    docker pull (push)

    镜像加速器: 阿里云加速器, daocloud加速器, 中科大加速器, docker中国官方加速器(https://registry.docker-cn.com

    • 获取默认仓库镜像
    $ docker pull centos:6.8
    

    $ docker login daocloud.io
    $ docker pull daocloud.io/library/tomcat:8.0.45-jre7
    

    查看镜像

    $ docker image ls
    $ docker images
    

    删除镜像

    $ docker image rm centos:6.8
    $ docker rmi alpine:latest
    

    导出镜像

    $ docker save nginx:latest > docker_nginx.tar.gz
    

    导入镜像

    $ docker image load -i docker_nginx.tar.gz
    

    docker容器管理

    run		创建并启动一个容器
    stop	停止容器
    kill	杀死容器
    ps		查看容器列表
    start	启动容器
    rm		删除容器
    exec	进入容器
    inspect	查看容器属性
    

    创建并运行一个容器

    $ docker run -d -p 80:80 nginx
    

    参数解释

    run  创建并运行一个容器
    -d  放在后台
    -p  端口映射
    nginx   docker镜像的名字
    

    创建并运行一个容器并分配一个可交互式的终端

    $ docker run -it --name centos6 centos:6.9 /bin/bash
    

    参数解释

    -it  分配交互式终端
    --name  指定容器的名字
    /bin/bash  覆盖容器的初始命令
    

    容器的启动和停止

    • 查看正在运行的容器
    $ docker ps
    

    • 查看所有容器
    $ docker ps -a
    

    • 停止容器
    $ docker stop zen_poincare
    

    • 杀死容器
    $ docker kill zen_poincare
    

    • 启动容器
    $ docker start zen_poincare
    

    删除容器

    $ docker rm romantic_hertz
    $ docker rm 56be582f3d06
    

    批量删除容器

    $ docker ps -a -q
    e65225739c98
    806e34c28fd1
    47e837a4d0c5
    cf41a5216d0f
    69a6bcef55f2
    2dc5e5fcacb7
    c1c07622a195
    b3d165f8fabb
    49dc5c719043
    
    $ docker rm `docker ps -a -q`
    

    进入容器

    • docker attach <容器id>
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    3e1ed93fe4fd        centos:6.9          "/bin/bash"         10 seconds ago      Up 10 seconds                           pedantic_banzai
    $ docker attach 3e1ed93fe4fd
    [root@3e1ed93fe4fd /]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 11:51 pts/0    00:00:00 /bin/bash
    root         13      1  0 11:52 pts/0    00:00:00 ps -ef
    

    ctrl+p, 松手, ctrl+q, 暂时退出容器, 容器不会停止, 只是退出当前终端, 如果使用ctrl+d退出容器, 则容器就会停止


    • docker exec -it <容器id> <初始命令>
    $ docker exec -it 3e1ed93fe4fd /bin/bash
    $ ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 11:51 pts/0    00:00:00 /bin/bash
    root         15      0  0 11:58 pts/1    00:00:00 /bin/bash
    root         26     15  0 11:58 pts/1    00:00:00 ps -ef
    

    这个方法使用ctrl+d退出容器, 则容器不会停止


    注意

    docker容器内的第一个进程必须一致处于前台运行的状态(必须夯住), 否则这个容器, 就会处于退出状态


    错误例子

    $ docker run -d centos:6.9 /bin/bash
    $ docker run centos:6.9 /bin/bash
    $ docker run -it centos:6.9 sleep 20
    $ docker run -it centos:6.9 pwd
    

    查看容器是否运行

    docker ps -a 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    21bc7b582e7f        centos:6.9          "/bin/bash"         12 seconds ago      Exited (0) 12 seconds ago                       sharp_allen
    bcb9e2683fce        centos:6.9          "/bin/bash"         30 seconds ago      Exited (0) 30 seconds ago                       festive_maxwell
    b26595453064        centos:6.9          "sleep 20"          14 minutes ago      Exited (0) 14 minutes ago                       intelligent_swirles
    36af735df051        centos:6.9          "pwd"               14 minutes ago      Exited (0) 14 minutes ago                       suspicious_robinson
    

    docker的数据卷管理

    上传自己的代码到容器的nginx的目录

    $ mkdir -p /opt/nginx/
    $ cat >> /opt/nginx/index.html<<EOF
    > test
    > EOF
    
    $ docker rm -f `docker ps -a -q`
    

    • docker run -d -p 80:80 -v src(宿主机目录):dst(容器的目录) nginx:latest
    $ docker run -d -p 80:80 -v /opt/nginx:/usr/share/nginx/html nginx:latest
    

    如果要修改网络内容, 在宿主机上改就行了


    • docker run -d -p 81:80 --volumes-from <容器名> nginx:latest
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    572504d4ca37        nginx:latest        "nginx -g 'daemon of…"   11 minutes ago      Up 11 minutes       0.0.0.0:80->80/tcp   blissful_mendeleev
    
    $ docker run -d -p 81:80 --volumes-from blissful_mendeleev nginx:latest
    60e457b7c1d7d06b060211454bbe67d7e619e6ef69b46248b3cae3e20b7a3a1e
    
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    60e457b7c1d7        nginx:latest        "nginx -g 'daemon of…"   6 seconds ago       Up 5 seconds        0.0.0.0:81->80/tcp   quirky_curie
    572504d4ca37        nginx:latest        "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       0.0.0.0:80->80/tcp   blissful_mendeleev
    


    基于nginx启动一个容器, 监听80和81, 访问80, 出现nginx默认的欢迎首页, 访问81, 出现test

    • 宿主机上准备配置文件
    $ cat >> /opt/nginx/index.html<<EOF
    > test
    > EOF
    
    $ cat >> /opt/nginx.conf<<EOF
    > server {
    >     listen       81;
    >     server_name  localhost;
    > 
    >     location / {
    >         root   /opt/nginx;
    >         index  index.html index.htm;
    >     }
    >     }
    > EOF
    

    • 删除镜像并创建新镜像
    $ docker rm -f `docker ps -a -q`
    

    • 启动新容器
    $ docker run -d -p 80:80 -p 81:81 -v /opt/nginx.conf:/etc/nginx/conf.d/nginx.conf -v /opt/nginx:/opt/nginx nginx:latest
    


  • 相关阅读:
    SqlServer_小工具_时间格式化
    SqlServer_小工具_字符填充(左)
    SqlServer_小工具_获取北京时间
    JS写入Json到CSV并下载
    写入数据到CSV
    写入数据到Excel
    批量插入数据
    Json填充Object工具
    Json|XMl|Object互相转化-小工具
    TODO:用python实现aws签名
  • 原文地址:https://www.cnblogs.com/cjwnb/p/11938198.html
Copyright © 2020-2023  润新知