虚拟化,容器的理解

2019-04-12  本文已影响0人  赛亚人之神

要想使用 linux 容器,至少 linux 内核要支持 namespaces,cgroups(control groups),可以在用户空间,使用一些工具,并利用linux内核所提供的这些技术,从而实现容器运行。

docker 在容器运行、使用简化的道路上更进一步,提供了镜像(而且是分层构建镜像),使得容器技术的使用更加被简化

docker 程序环境:
    环境配置文件:
        /etc/sysconfig/docker-network
        /etc/sysconfig/docker-storage
        /etc/sysconfig/docker
    unit file:
        /usr/lib/sytemd/system/docker.service

    Docker Registry 配置文件
        /etc/containers/registries.conf

    ----------------------------- 上面的环境我安装完 docker-cn 后并未在相关路径下找到,有待确认 ----------------------------

    docker-ce
        配置文件: /etc/docker/daemon.json

        
docker 镜像加速
    docker cn
    阿里云加速器
    中国科技大学
    {
        "registry-mirrors": ["https://registry.docker-cn.com"]
    }

    注意:registry-mirrors 的值是个数组,可以配置多个

alpine: 镜像的微型发行版,提供了程序运行的基础环境,但是体积非常小,(缺点:缺少调试工具,建议在测试中使用)


docker image
    作用: Manage images
    语法: docker image COMMAND

    Commands:
      build       Build an image from a Dockerfile
      history     Show the history of an image
      import      Import the contents from a tarball to create a filesystem image
      inspect     Display detailed information on one or more images
      load        Load an image from a tar archive or STDIN
      ls          List images
      prune       Remove unused images
      pull        Pull an image or a repository from a registry
      push        Push an image or a repository to a registry
      rm          Remove one or more images
      save        Save one or more images to a tar archive (streamed to STDOUT by default)
      tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE


docker container
    作用: Manage containers
    语法: docker container COMMAND

    Commands:
      attach      Attach local standard input, output, and error streams to a running container
      commit      Create a new image from a container's changes
      cp          Copy files/folders between a container and the local filesystem
      create      Create a new container
      diff        Inspect changes to files or directories on a container's filesystem
      exec        Run a command in a running container
      export      Export a container's filesystem as a tar archive
      inspect     Display detailed information on one or more containers
      kill        Kill one or more running containers
      logs        Fetch the logs of a container
      ls          List containers
      pause       Pause all processes within one or more containers
      port        List port mappings or a specific mapping for the container
      prune       Remove all stopped containers
      rename      Rename a container
      restart     Restart one or more containers
      rm          Remove one or more containers
      run         Run a command in a new container
      start       Start one or more stopped containers
      stats       Display a live stream of container(s) resource usage statistics
      stop        Stop one or more running containers
      top         Display the running processes of a container
      unpause     Unpause all processes within one or more containers
      update      Update configuration of one or more containers
      wait        Block until one or more containers stop, then print their exit codes


docker run:
    作用:Run a command in a new container
    
    语法:
        docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    
    Options:
        -a, --attach list                    Attach to STDIN, STDOUT or STDERR 【附加到标准输入,标准输出,标准错误输出】
        -d, --detach                         Run container in background and print container ID 【容器在后台运行)
        -e, --env list                       Set environment variables【设置环境变量】
        -h, --hostname string                Container host name 【设置容器主机名】
        -i, --interactive                    Keep STDIN open even if not attached 【始终保持标准输入打开】
        -l, --label list                     Set meta data on a container【设置容器元数据】
        --name string                        Assign a name to the container,【指定容器名称】
        --network string                     Connect a container to a network (default "default") 【指定网络 默认是 bridge】
        --rm                                 Automatically remove the container when it exits 【当容器停止后自动删除容器,英文说明有问题】
        -t, --tty                            Allocate a pseudo-TTY,【分配伪终端】
        -v, --volume list                    Bind mount a volume 【指定卷】
        -w, --workdir string                 Working directory inside the container 【指定工作目录】


    可以使用 docker network ls 查看所有网络信息

docker network
    作用:Manage networks
    语法:docker network COMMAND

    Commands:
      connect     Connect a container to a network
      create      Create a network
      disconnect  Disconnect a container from a network
      inspect     Display detailed information on one or more networks
      ls          List networks
      prune       Remove all unused networks
      rm          Remove one or more networks



例子:
    1、 下载一个 busybox 镜像,并在 busybox 中使用 httpd 命令启动一个 web 服务,打印出 hello docker
        docker image pull busybox:latest
        docker run --name b1 --rm -it busybox:latest
            注意:这里启动容器时使用了 --rm 选项,意思是容器停止后容器会自动被删除

        在 busybox 交互式命令中,创建 httpd 所需的文件
            mkdir /home/data -p
            echo "hello docker" > /home/data/index.html
            httpd -f -h /home/data/

            备注:
                httpd:
                    所用: Listen for incoming HTTP requests
                    -f              Don't daemonize 【避免后台运行】
                    -v[v]           Verbose
                    -p [IP:]PORT    Bind to IP:PORT (default *:80)
                    -h HOME         Home directory (default .) 【指定家目录位置】

        启动好 httpd 服务后,使用 docker container inspect b1 查看【b1】容器的 ip 为 172.17.0.2
        另外打开一个终端,使用 curl 172.17.0.2 看到控制台输出了 “hello docker”

    2、 下载并运行一个名为 web1 的 nginx 容器
        docker run --name -d web1
        docker ps                       查看所有运行中的容器
        docker inspect web1             查看容器的 ip 地址
        curl 172.17.0.3                 使用 curl 访问 ip,查看输出内容

    3、  下载并运行一个名为 redis 的容器
        docker run --name redis -d redis
        docker ps
        docker exec -it redis /bin/sh   执行 reids 容器中的 /bin/sh 程序
        redis-cli                       运行 redis-cli,测试可以正常对 redis 进行操作


        注意:
            docker exec
                作用:Run a command in a running container
                语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

                Options:
                  -d, --detach               Detached mode: run command in the background
                      --detach-keys string   Override the key sequence for detaching a container
                  -e, --env list             Set environment variables
                  -i, --interactive          Keep STDIN open even if not attached
                      --privileged           Give extended privileges to the command
                  -t, --tty                  Allocate a pseudo-TTY
                  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
                  -w, --workdir string       Working directory inside the container

    4、  使用 docker logs web1 查看容器的日志



基于容器创建镜像,使用 docker commit 指令
    作用: Create a new image from a container's changes
    语法: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

    Options:
      -a, --author string           Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
      -c, --change list             Apply Dockerfile instruction to the created image
      -m, --message string          Commit message
      -p, --pause                   Pause container during commit (default true)

    例子:创建 nginx 容器,将其重新打成镜像,tag号为v1

        1. docker commit -p web1 nginx:v1
        2. docker commit -p web1
           docker tag conatiner-id ngixn:v1

    使用 docker inspect busybox 查看 busybox 的默认运行的程序是位于 /bin 下的 sh,如何修改呢?
    修改镜像默认的运行程序: 使用 -c 选项
        docker commit -p -c 'CMD ["/bin/httpd","-f","-h","/home/data"]' b1 mybusybox:v3


docker push
    语法: docker push [OPTIONS] NAME[:TAG]
    作用:Push an image or a repository to a registry

    Options:
          --disable-content-trust   Skip image signing (default true
          
docker login
    语法: docker login [OPTIONS] [SERVER]
    作用:Log in to a Docker registry

    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
上一篇下一篇

猜你喜欢

热点阅读