• Docker介绍及常用操作演示(一)--技术流ken


    Docker简介

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    一个完整的Docker有以下几个部分组成:

    1. dockerClient客户端
    2. Docker Daemon守护进程
    3. Docker Image镜像
    4. DockerContainer容器                                                                                                         

    容器:

    存储、运输工具

    实现对容器内部的物品实现包含(实现了一个相对隔离的环境)

    容器:模拟(虚拟)出一个相对隔离的空间

    镜像:

    用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等

    Docker与Kvm的对比

    kvm:

    1. 虚拟机

    2. 使用复杂

    3. 启动过程相对慢(分钟)

    4. 模版文件较大

    5. 和物理完全隔离

    6. 模拟的是一个完整系统,可以登录并实现管理

    docker:

    1. 直接虚拟出来一个用户空间

    2. 使用简单

    3. 启动非常块(秒级)

    4. 模版文件很小

    5. 在一定程度上和物理机隔离

    6. 仅仅是模拟一部分用户空间,不方便管理

    Docker使用理由

    1. 快速部署服务

    2. 多租户

    3. 实现隔离

    4. 让一个主机运行多个容器

    5. 提高开发效率

    6. 简化配置过程

    7. 实现软件的跨平台

    Docker镜像加速配置

    第一步:打开阿里云网站

     https://www.aliyun.com/?utm_content=se_1000301910

    第二步:进行阿里云注册

    第三步:点击控制台

    第四步:点击产品与服务>镜像与服务

    第五步:点击镜像加速器,记住自己的加速器地址

    Docker的安装与配置

    安装docker需要配置网络yum源,centos7自带的版本太低了

    第一步:下载阿里云的docker安装包

    在yum仓库的目录之下

    [root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    还需要使用到extra和epel源

    [extra]
    name=centos extra
    enabled=1
    gpgcheck=0
    baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
    [epel]
    name=epel
    enabled=1
    gpgcheck=0
    baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/

    第二步:使用yum即可进行安装

    docker-ce是社区版,是免费的

    docker-ee是企业版,是收费的

    这里我们下载社区版的

    [root@ken ~]# yum install docker-ce -y

     第三步:添加加速器地址

    把刚才注册得到的镜像加速地址如下步骤填写进去

    [root@ken ~]# mkdir /etc/docker
    [root@ken ~]# cat /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
    }

    第四步:重启docker

    [root@ken ~]# systemctl restart docker

    Docker有关镜像的操作命令详解

    第一步:获取镜像的使用帮助

    [root@ken ~]# docker image --help
    
    Usage:    docker image COMMAND
    
    Manage images

    第二步:docker镜像的使用命令详解

      build       从docker文件里面创建镜像
      history     显示一个镜像的历史
      import      从tarball导入内容以创建文件系统映像
      inspect     显示一个一个或多个镜像的详细信息
      load        加载一个镜像从tar压缩包或者标准输入
      ls          列出镜像
      prune       移除没有被使用的镜像
      pull        从注册处拉取一个镜像或者镜像库
      push        把一个镜像或者镜像库推送至注册处
      rm          移除一个或多个镜像
      save        保存一个或者多个镜像到tar压缩包,默认情况下流式传输到
      tag         创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE

    Docker镜像的操作命令演示

    一. 查看注册表中是否有nginx镜像

    [root@ken ~]# docker search nginx
    NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                                                  Official build of Nginx.                        10326               [OK]                
    jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con??  1471                                    [OK]
    richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of??  650                                     [OK]
    jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p??  441                                     [OK]
    kong                                                   Open-source Microservice & API Management la??  249                 [OK]                
    webdevops/php-nginx                                    Nginx with PHP-FPM                              117                                     [OK]
    kitematic/hello-world-nginx                            A light-weight nginx container that demonstr??  112                                     
    ...

    二.下载nginx镜像

    [root@ken ~]# docker image pull nginx

    三:查看本地镜像

    [root@ken ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              e81eb098537d        10 days ago         109MB

    四:导入镜像

    这里我准备了一个redis的镜像压缩包

    这样就获取到了redis的镜像

    压缩包不需要解压

    [root@ken ~]# docker image load < redis_img.tar.gz 
    d626a8ad97a1: Loading layer [==================================================>]  58.46MB/58.46MB
    fd0ff4158c63: Loading layer [==================================================>]  338.4kB/338.4kB
    f1e69ab74fb6: Loading layer [==================================================>]  3.034MB/3.034MB
    5935063a73de: Loading layer [==================================================>]  24.83MB/24.83MB
    72ebea29957d: Loading layer [==================================================>]  1.536kB/1.536kB
    56631ad86187: Loading layer [==================================================>]  3.584kB/3.584kB
    Loaded image: redis:latest
    [root@ken ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              e81eb098537d        10 days ago         109MB
    redis               latest              55cb7014c24f        5 months ago        83.4MB
    [root@ken ~]# 

    五:镜像导出

    写成压缩包的形式

    [root@ken ~]# docker image save  nginx > /tmp/nginx.tar.gz
    [root@ken ~]# ls /tmp/nginx.tar.gz
    /tmp/nginx.tar.gz

    六:显示nginx镜像的详细信息

    [root@ken ~]# docker inspect nginx
    [
        {
            "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
            "RepoTags": [
                "nginx:latest"
            ],
            "RepoDigests": [
                "nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
            ],
            "Parent": "",
            "Comment": "",
            "Created": "2018-11-16T13:32:10.147294787Z",
            "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
            "ContainerConfig": {
                "Hostname": "d4fa15093ad8",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
    ...

    七:删除nginx的镜像

    [root@ken ~]# docker image rm nginx
    Untagged: nginx:latest
    Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
    Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
    Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
    Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
    Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
    [root@ken ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    redis               latest              55cb7014c24f        5 months ago        83.4MB

    Docker有关容器的操作命令详解

    第一步:获取容器的命令的使用帮助

    [root@ken ~]# docker container --help
    
    Usage:    docker container COMMAND
    
    Manage containers

    第二步:docker容器的使用命令详解

      attach      将本地标准输入,输出和错误流附加到正在运行的容器
      commit      根据容器的更改创建新镜像
      cp          在容器和本地文件系统之间复制文件/文件夹
      create      创建一个新的容器
      diff        检查容器文件系统上的文件或目录的更改
      exec        在正在运行的容器中运行命令
      export      将容器的文件系统导出为tar存档
      inspect     显示一个或多个容器的详细信息
      kill        杀死一个或多个正在运行的容器
      logs        获取容器的日志
      ls          列出容器
      pause       暂停一个或多个容器中的所有进程
      port        列出端口映射或容器的特定映射
      prune       删除所有已停止的容器
      rename      重命名容器
      restart     重启一个或多个容器
      rm          删除一个或多个容器
      run         在新容器中运行命令
      start       启动一个或多个已停止的容器
      stats       显示容器资源使用情况统计信息的实时流
      stop        停止一个或多个正在运行的容器
      top         显示容器的运行进程
      unpause     取消暂停一个或多个容器中的所有进程
      update      更新一个或多个容器的配置
      wait        等待,直到一个或多个容器停止,然后打印退出代码

    Docker容器的操作命令演示

    一.启动redis容器

    --name:指定容器名字

    -d:表示后台运行

    [root@ken ~]# docker container  run --name redis1 -d redis
    4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd

    二.查看容器

    使用ls

    [root@ken ~]# docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   39 seconds ago      Up 38 seconds       6379/tcp            redis1

    三.查看所有的容器

    ps -a: 列出所有的容器包括运行和停止的

    ps: 仅仅列出正在运行的

    [root@ken ~]# docker container ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   About a minute ago   Up About a minute          6379/tcp            redis1
    054bc8b8aab7        redis               "docker-entrypoint.s??   2 minutes ago        Exited (0) 2 minutes ago                       confident_goldstine

    四.查看容器的详细信息

    inspect后面加上容器名字即可获取有关容器的详细信息

    [root@ken ~]# docker container  inspect redis1
    [
        {
            "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
            "Created": "2018-11-26T20:22:23.099937767Z",
            "Path": "docker-entrypoint.sh",
            "Args": [
                "redis-server"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
    ...

    五.停止容器

    使用stop

    [root@ken ~]# docker container stop redis1
    redis1
    [root@ken ~]# docker container ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    六.启动容器

    使用start

    [root@ken ~]# docker container start redis1
    redis1
    [root@ken ~]# docker container ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   8 minutes ago       Up 1 second         6379/tcp            redis1

    七.登录容器

    第一种方法:

    exec -it   容器名 /bin/sh

    -i: 表示启动为交互模式

    -t:表示分配一个终端

    登录进去之后发现我们可以执行有挂redis的命令了

    [root@ken ~]# docker container exec -i -t redis1 /bin/sh 
    # 
    # 
    # redis-cli
    127.0.0.1:6379> set ken 520
    OK
    127.0.0.1:6379> get ken
    "520"

    退出之后容器没有停止

    [root@ken ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   13 minutes ago      Up 4 minutes        6379/tcp            redis1

    第二种方法:

    attach:会导致当退出的时候,自动停止容器

    不建议使用

    [root@ken ~]# docker container attach redis1
    
    
    
    
    ^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown...
    1:M 26 Nov 20:36:44.315 # User requested shutdown...
    1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting.
    1:M 26 Nov 20:36:44.327 * DB saved on disk
    1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye...
    [root@ken ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    第三种方法:

    基于nsenter进入

    第一步:启动容器

    [root@ken ~]# docker container start redis1
    redis1
    [root@ken ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   16 minutes ago      Up 6 seconds        6379/tcp            redis1

    第二步:获取容器的pid

    [root@ken ~]# docker container inspect -f '{{.State.Pid}}' redis1
    6036

    第三步:登录容器

    -t: 从中获取名称空间的目标进程

    -u: 输入UTS名称空间(主机名等)

    -i: 进入System V IPC命名空间

    -n: 输入网络命名空间

    -p:输入pid命名空间

    [root@ken ~]#  nsenter -t 6036 -u -i -n -p
    [root@4cd31fa09d48 ~]# ps
      PID TTY          TIME CMD
     2595 pts/0    00:00:01 bash
     6216 pts/0    00:00:00 nsenter
     6217 pts/0    00:00:00 bash
     6250 pts/0    00:00:00 ps

    退出时不会停止容器

    [root@4cd31fa09d48 ~]# exit
    logout
    [root@ken ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    4cd31fa09d48        redis               "docker-entrypoint.s??   23 minutes ago      Up 6 minutes        6379/tcp            redis1

    八.删除容器

    第一步:需要停止容器

    [root@ken ~]# docker container stop redis1
    redis1
    [root@ken ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    第二步:删掉容器

    [root@ken ~]# docker container rm redis1
    redis1
    [root@ken ~]# docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

      

    补充:一次性删除全部已经退出的容器

    [root@ken1 ~]# docker rm  $(docker ps -aq)
  • 相关阅读:
    测试用例的优先级的概念
    Day02.测试用例和测试方法
    day01.测试理论
    开发python 面试题
    4.路径页面接口开发
    ps命令没有显示路径找到命令真实路径
    Linux软链接和硬链接
    Linux文件元数据和节点表结构
    jinjia2语言
    Ansible之YAML语言
  • 原文地址:https://www.cnblogs.com/kenken2018/p/10022220.html
Copyright © 2020-2023  润新知