• docker基础


    0. 仓库:
    1. 镜像:
    2. 容器:
    ---------------------------
        docker  vs   vmware
    ---------------------------
    
    一.镜像相关命令:
        1. Usage: docker search 名字   //搜索镜像
            例如:  docker search centos7
            
        2. Usage: docker pull  镜像名:tag  //下载镜像
            例如: docker pull centos7
    
        3. Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]  //更改镜像名:标签名
            例如: docker tag docker.io/nickistre/centos-lamp:latest lamp:lamp
    
        4. Usage: docker save oldIMAGE [OPTIONS] newIMAGE //将镜像导出到本地
            例如: docker save docker.io/nickistre/centos-lamp  -o lamp01
            
        5. Usage: docker load -i 镜像名   //将加载本地镜像文件
            例如: docker load -i  lamp03    
    
        6. docker images  //查看所有已经下载的镜像
        
        7. docker inspect 镜像ID  //查看指定镜像的相关信息
        
        8. docker rmi 镜像ID|镜像名   //删除镜像名
        
    保存和加载:
        docker save ...
        docker load ...
        
    二.容器相关命令:
        1. Usage: docker ps -a  //查看所有容器
        
        2. Usage: docker ps   //查看正在运行的容器
        
        3. Usage: docker rm 容器ID|容器名  //删除容器
        
        4. Usage: docker create -it 镜像名|镜像ID /bin/bash  //通过指定镜像名创建容器
            [root@Docker images]# docker create -it 57d8c48a14b1 /bin/bash
            56606f50d1d09d1050e9cb6c51af5d7751daf53c15d65b01f016a11d6a9a3b24
            [root@Docker images]# docker ps -a
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            56606f50d1d0        57d8c48a14b1        "/bin/bash"         6 seconds ago       Created                                 jovial_murdock
            [root@Docker images]# 
    
        5. Usage: docker start|stop 容器ID|容器名  //打开|停止容器
        
        6. Usage: docker export  old容器ID|old容器名 -o newContainer  //将容器导出到文件
            例如: docker export  05af39e8b263 -o newContainer  //将容器05af39e8b263导出为文件newContainer
            
        7. Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] //将容器导入变成一个镜像
            例如: docker import newContainer //将本地的之前导出的文件newContainer变成一个镜像
    导入和导出:
        docker import ...
        docker export ...
        
    三. 运行和管理容器
        
        1. Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]   //进入到容器,需要提前开启容器
            例如: docker exec -it 56606f50d1d0 /bin/bash
            
        2. Usage: docker run -itd 镜像ID|镜像名 /bin/bash
            例如: docker run -itd -p 12345:80 httpd:latest /bin/bash  //通过镜像httpd生成容器,并指定本地12345端口映射到容器80端口
        
        3. Usage: docker run -d -v /data01:/data01 -v /data02:/data02 --name web httpd:centos  //创建一个名为web的容器,在宿主主机创建数据卷/data01和/data02,分别挂载到容器里面,并与宿主机的/data01,/data02关联
    
        4. 根据镜像docker.io/centos创建一个打开的容器web005
           Usage: docker run -itd --name web005 docker.io/centos /bin/bash  //容器名为web005,后台运行web005
           Usage: docker run -it --name web005 docker.io/centos /bin/bash  //容器名为web005,前台运行web005    
           
        5. 容器间共享数据
           Usage: docker run -it --volumes-from web --name db01 httpd:latest    //web为源容器,db01为生成容器
           
        6. 端口映射
           Usage: docker run -d -P httpd:latest  //docker随机映射一个端口范围49000-49900的端口到容器内部开发的网络端口
           
           Usage: docker run -d -p 49888:80 httpd:latest  //docker指定端口映射
    
        7. 容器互联--通过容器的名称在容器间建立一条专门的网络通信隧道,
           在源容器和接收容器之间建立一条隧道,接收容器看到源容器指定的信息
           docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,
           并且接收容器可以获取源容器的一些数据,如源容器的环境变量
               --link的格式:
               --link <name or id>:alias
               其中,name和id是源容器的name和id,alias是源容器在link下的别名。
           Usage: 
                    7.1 docker run -d -P --name source_web01 httpd:latest  //创建源容器
                    7.2 docker run -d -P --name destination_web02 --link source_web01 httpd:latest //创建容器并链接到源容器
                    
        8. 创建一个新的 Docker 网络。
         docker network create -d bridge test-net  #网络名称为test-net
         docker run -itd --name test1 --network test-net ubuntu /bin/bash  #为指定创建的容器指定网络
         
        9.在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
    
            {
              "dns" : [
                "114.114.114.114",
                "8.8.8.8"
              ]
            }
            设置后,启动容器的 DNS 会自动配置为 114.114.114.1148.8.8.8。
            配置完,需要重启 docker 才能生效。
            
        10.在指定的容器设置 DNS,则可以使用以下命令:
            docker run -it --rm -h host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu
            
                --rm:容器退出时自动清理容器内部的文件系统。
                -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
                --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
                --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。        
                如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS        
        12. 创建一个名称为web99,容器的主机名为vm_web1,容器的dns指向114.114.114.114;容器退出时自动清理容器内部的文件系统
        docker run -it --name web99 -h vm_web1 --dns 114.114.114.114 --rm  lamp  /bin/bash
    
            
            
    
    四. docker镜像创建方法
             基于已有运行的容器创建: 
             基于本地模板创建
             基于Dockerfile创建
    
         1. 基于已有运行的容器创建<docker commit ...>: 把一个容器里面运行的程序及其运行环境打包生成新的镜像
            Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
                    Create a new image from a container's changes
            例如: docker commit  --help //查看命令帮助
            [root@Docker ~]# docker commit -a "vmsysjack" -m "Hello,Everyone" -p  56606f50d1d0 vm1:vm2 //将容器56606f50d1d0打包成为一个镜像,名称为vm1,tag为vm2
            
    
        2. 基于本地模板创建:
            2.1. 从网上下载模板
            2.2. cat 模板文件 | docker import - 镜像名:tag名
        
        3. 基于Dockerfile创建: 使用dockerfile自动生成镜像,dockerfile由一组指令组成的文件
              
                           1.基础镜像信息 
              dockerfile   2.维护者信息
               组成部分       3.镜像操作指令
                           4.容器启动时执行指令
                           
            vim dockerfile
            
        使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,
        其中包含一组指令来告诉 Docker 如何构建我们的镜像。    
        
        开始构建:
         docker build  -t hello:latest .  #在dockerfile文件目录下构建镜像文件
            -t :指定要创建的目标镜像名
            .  :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
        
    -------------------------------
    #第一行必须指明基于的基础镜像
    FROM centos
    #维护该镜像的用户信息
    MAINTAINER The Centos Project
    #镜像操作指令
    RUN yum -y update
    RUN yum install -y openssl-server
    RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
    RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    #开启22端口
    EXPOSE 22
    #启动容器时执行指令
    CMD ["/usr/sbin/sshd","-D"]
    --------------------------------
    命令解释:
        from镜像:    指定新镜像所基于的镜像,每创建一个镜像就需要一条FROM指令
        
        maintainer名字:    说明新镜像的维护人信息
        
        run命令:    在所基于的镜像上执行命令,并提交到新的镜像中
        
        cmd["要运行的程序","参数1","参数2"]: 指令启动容器时要运行的命令或者脚本,dockerfile只能有一条CMD命令,指定多条则只能最后一条被执行
        
        expose端口号:    指定镜像加载到docker时要开启的端口
        
        ENV环境变量变量值:     设定一个环境变量的值,会被后面的RUN使用
        
        add 源文件  /目录目标文件/目录:     将源文件复制到目标文件,源文件要与dockerfile位于相同目录中,或者是一个URL
        
        copy 源文件 /目录目标文件/目录:     将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
        
        volume["目录"]:     在容器中创建一个挂载点
        
        user 用户名/uid:     指定运行容器时的用户
        
        workdir 路径:    为后续的RUN,CMD,ENTRYPOINT指定工作目录
            例如: workdir /root/nginx  进入到真实机/root/nginx
        
        onbuild 命令:    指定所生成的镜像作为一个基础镜像时所要运行的命令
        
    ############################################################################################
        
    注意:
        add run.sh  /run.sh
        cmd [ "/run.sh" ]
        -----------------------------------
        cmd [ "/usr/sbin/init" ]  #表示在启动容器的时候自动加载/usr/lib/systemd/system/下的脚本文件
        当使用cmd ["/usr/sbin/init" ]来加载配置文件后,再次使用docker run -it ... /bin/bash时,
        容器不能够使用systemctl命令,只能够使用docker run -d ....
        -----------------------------------
        docker run -itd --privilged=true nginx:centos init /bin/bash (X)
        
        --------------------------
        
    ############################################################################################
        
        
        
        
        
        
  • 相关阅读:
    android studio 模拟器控制台发送短信和定位
    android获取超级权限
    android拦截获取别人发送过来的短信
    stackflow看到的获取手机联系人 contact 的代码
    surfaceview绘制矩形 drawRect
    Dialog自定义setView按钮点击没反应
    腾讯移动端性能测试利器PerfDog使用
    Mac下第一个Python程序:HelloWorld
    Mac 系统下安装 PyCharm 的实践
    如何用Chrome浏览器打开Axure原型的start.html文件
  • 原文地址:https://www.cnblogs.com/vmsysjack/p/14198810.html
Copyright © 2020-2023  润新知