zoukankan      html  css  js  c++  java
  • 玩转容器技术

    实践中,了解镜像和容器的操作

    什么是docker? Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制.

    镜像的几个小操作

    搜索镜像
    docker search nginx

    下载镜像到local
    docker pull image_name

    归档镜像
    docker image save image_name > xxx.tar

    加载一个tar到环境中
    docker image load < xxx.tar

    容器的基本操作

    docker有个基本的要求:一个容器,一个application.

    创建nginx的容器
    docker container run -d -e test=123 -p 8848:80 -h docker172.0 --name ngin3 -m="10m" --memory-swap="100m" --cpus=".5" --oom-kill-disable nginx
    列出最新创建的容器
    docker ps -l
    查看容器资源使用率
    docker states name
    进入容器和启停

    docker exec -it container_id bash|sh
    docker start/stop/restart container_id
    

    查看容器的日志

    docker logs --tail=200 containerid
    -d 后台运行
    -e 设置环境变量
    -p 设置端口转发
    -P 任意端口转发
    -h 设置容器的hostname 
    --name 设置容器的name
    -m 分配内存
    --cpus 分配的cpu core
    --oom-kill-disable 禁用,内存溢出会自动kill进程,容器不加限制的话建议不加该选项
    

    容器的数据卷

    推荐两种数据卷的方式volume,bind mount

    volume

    特点:
    1.没创建会自动创建,默认目录/var/lib/docker/volume/_data
    2.容器的文件系统与数据卷的数据共享,可以最容器的数据的持久化
    3.可以共享多个容器,docker迁移
    4.可以动态修改的文件

    创建数据卷
    docker volume create 卷名    
    Commands:
      create      Create a volume
      inspect     Display detailed information on one or more volumes
      ls          List volumes
      prune       Remove all unused local volumes
      rm          Remove one or more volumes
    docker container run -d --mount src=nginx_vol,dst=/usr/share/nginx/html  nginx 
    

    bind mount

    特点:
    1.挂载宿主机任意的文件系统到容器,容器内目录以宿主机那侧为主
    2.应用发布,主机文件系统与容器的需要一致
    docker container run -d --mount type=bind,src=/mnt,dst=/usr/share/nginx/html nginx

    docker网络模式

    桥接 bridge
    默认模式 容器创建后会创建个docker0的网桥,默认创建的容器都会添加到这个网桥(网关)

    主机模式 --net=host
    与宿主机公用一个network namespace 除了网络不隔离 其他都隔离,直接用host的ip访问容器,但是docker host上的端口不能用了,网络性能好 但是隔离性差,网络不隔离,share端口范围,文件系统和进程列表隔离

    none
    独立network namespace,网络隔离 但是ip得自己配

    container:name/ID
    和设置的容器用一个network namespace ,网络不隔离,进程列表和文件系统都隔离

    自定义
    和bridge相似,需要先创建一个网桥,创建后有一个自定义DNS,可以主机名和容器名互信

    docker network create 网络模式名称
    docker run -itd --name test1 --net=test busybox
    

    制作镜像Dockerfile

    流程:
    1.FROM 基于的镜像
    2.MAINTAINER 作者名/网址
    3.RUN shell的命令
    4.COPY 将文件copy到容器
    5.EXPOSE 80 声明端口
    CMD ["run.sh"] 容器创建后执行命令,可以被docker run指定的命令覆盖

    nginx基础dockerfile代码

    [root@192-168-1-218 dockerfile_workdir]# cat Dockerfile-nginx
    FROM centos:7
    MAINTAINER Mark
    RUN yum -y install gcc gcc-c++ automake pcre pcre-devel zlip 
        zlib-devel openssl openssl-devel net-tools telnet wget curl && 
        #优化
        yum clean all && rm -fr /var/cache/yum/*
    
    RUN wget http://nginx.org/download/nginx-1.17.8.tar.gz && tar xf nginx-1.17.8.tar.gz && 
         cd  nginx-1.17.8 && 
        ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module 
        --with-http_realip_module  --with-threads && make && make install &&  
        ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
    ENV PATH $PATH:/usr/local/nginx/sbin
    #COPY /dockerfile_workdir/test.txt /root
    WORKDIR /usr/local/nginx
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

    构建镜像
    docker build -t nginx:v1 -f Dockerfile-nginx .
    -t 镜像名和tag
    -f Dockerfile的文件
    . dockerfile里的文件位置,比如COPY 就必须要放文件在这个.的目录下

  • 相关阅读:
    python3使用cx_Oracle连接oracle时,怎么传参sid或service_name
    CSS选择器
    Java + selenium Timeout接口用法介绍
    Selenium 中ExpectedConditions 用法说明
    jmeter跨线程调用参数
    Android Studio常用插件汇总
    js、jQuery实现文字从下到上(从右到左)无缝轮播、滚动效果
    package.json中的版本号
    mac 下检测网络状态的命令
    git clone 需要用户名密码的一个小问题
  • 原文地址:https://www.cnblogs.com/linux-error/p/12380514.html
Copyright © 2011-2022 走看看