docker 使用总结

docker 使用总结

基本概念

  1. 容器:
    可以把容器理解为一台机器,或者一个虚拟机,可以对它进行开机,关机,并且关机后程序不消失。(相比于虚拟机,docker容器更加轻量,docker不会为一个容器单独分配计算机资源[计算资源,存储资源,网络资源],而是与宿主机共享这些资源)
  2. 镜像:
        -→ 容器1
镜像  -->  容器2
        -→ 容器3

镜像对应了一个系统环境,你可以将一个安装了某个服务的环境生成镜像。你可以从镜像启动容器。这样这个容器就自带了你安装了的那个服务。

        -→ 容器1
镜像  -->  容器2
 ↑____  -→ 容器3

同时你也可以把任何一个容器生成镜像
3. 远端仓库
仓库用来存储镜像,本地仓库存储本地镜像。docker远端仓库地址 hub.docker.com, 上面有大量的镜像,基本覆盖了常用的各种服务, 你可以拉取远端镜像到本地仓库,也可以将本地镜像提交到远端仓库

使用场景

个人接触的docker使用场景如下:

  1. 快速部署,在部署各种服务时,通常会遇到很多问题,比如操作系统兼容性导致的,网络导致的,文件缺失导致的,等等等,而这些问题都是由于服务运行环境不够标准化导致。虽然在处理这些问题时可以提升很多能力,但是却在一些本可以避免的地方浪费了很多时间,而且有些时候在客户机器上需要快速部署的能力。 所以docker提供的能力: 你可以将搭建好服务的环境生成镜像,其他人直接下载镜像(hub.docker.com同时也有各种各样的镜像可供下载),并直接启动容器,即可启动服务
  2. 应用隔离,可以将各种不同的服务运行在不同的容器中,降低各个服务间的耦合度,同时将服务的操作均限制在容器内,防止服务运行高危操作,危害宿主主机。(降低服务间耦合,提升系统整体安全性)
  3. 环境隔离&复用, 有个场景,假设你想同时启动两个服务,只是版本不同,所以他们会修改同一个库同一个表,如果你想隔离开,通常情况是修改两个服务的配置文件,访问不同的库。而使用docker,你可以启动两个mysql容器。 将两个服务链接到不同的mysql容器即可。同时如果你希望的是仅测试一个版本有没有问题,那么你测完直接删掉容器就可以了。不会对宿主机产生其他负担

使用

查看

  1. ‘docker images’ 查看所有镜像
镜像名                版本                镜像id              创建时间             镜像大小
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mongo                latest              621ceef749d4        6 days ago          361MB
ubuntu               latest              c52f673d4c05        7 days ago          88.9MB
  1. ‘docker ps -a’ 查看所有容器
容器id              创建于哪个镜像        启动命令                  创建时间            现在状态             端口映射                   容器名
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
98dcccc8333f        redis               "docker-entrypoint.s…"   6 days ago          Up 6 days           0.0.0.0:6379->6379/tcp     redis
7908c11d6d89        0211fd230f23        "bash"                   2 months ago        Up 7 weeks                                     test

拉取镜像

  1. ‘docker pull nginxdemos/hello’
    即从 hub.docker.com 拉取 https://hub.docker.com/r/nginxdemos/hello 这个镜像到本机
    ‘docker pull nginxdemos/hello:latest’
    指定拉取的版本
    ‘docker pull mysql:5.7.0’
    拉取mysql 的5.7.0这个版本镜像

启动,停止,删除 容器

从某个镜像启动一个容器

  1. ‘docker run [创建配置] [镜像标识] [启动命令]’
  2. 示例 ‘docker run -it mysql:5.7.0 /bin/bash’
    从mysql:5.7.0这个镜像启动一个容器。启动方式是交互终端的方式
  3. docker run 主要做两件事情,创建容器+启动容器
  4. 启动参数
    '[创建配置]'可以无,则直接创建并启动容器,启动后通过 ‘docker ps -a’ 查看容器状态
    '[镜像标识]'可以是镜像名,也可以是镜像id前缀[需要唯一]
    '[启动命令]'是希望启动容器后立即执行的命令,比如/bin/bash
  5. 常用配置:
    1. ‘docker run -it [镜像标识] [启动命令]’
      以交互终端方式启动容器,即启动后可以像ssh或telnet那样实时交互
    2. ‘docker run --name hello [镜像标识] [启动命令]’
      启动容器后指定容器名字为hello,不指定的话 docker会随机产生一个名字
    3. ‘docker run --expose 80 [镜像标识] [启动命令]’
      暴露容器的80端口,可以通过 容器ip:80 访问被暴露的端口,但是不能通过 宿主机ip:80访问
    4. ‘docker run -p 80:80 -p 8080:8080 -p 443:443 [镜像标识] [启动命令]’
      指定端口映射,’-p 宿主机端口: 容器内端口’
    5. ‘docker run -e PROJ_ENV=“dev” -e MYSQL_ROOT_PASWORD=“xxx” [镜像标识] [启动命令]’
      添加环境变量
    6. ‘docker run --link mysql5.7:mysql -e MYSQL_HOST=“mysql” [镜像标识] [启动命令]’
      可以添加链接到另一个容器 ‘–link 容器名:地址别名’

停止某个容器

‘docker stop [容器标识]’

开启某个关闭状态的容器

‘docker start [容器标识]’

删除某个容器

‘docker rm [容器标识]’

连接,退出

  1. ‘docker exec -it [容器标识] /bin/bash’
    以交互终端方式进入容器,并执行/bin/bash
  2. ‘exit’
    退出与容器的连接

容器状态查看

  1. 通过前面介绍过的’docker ps -a’
  2. ‘docker logs [容器标识]’
    查看这个容器的标准输出日志,通常可以看到报错
  3. ‘docker inspect [容器标识]’
    查看这个容器的信息,通常可以看到各种参数,如端口映射情况,容器链接,环境变量,启动命令参数,启动路径等等各种容器本身信息
  4. ‘service docker status -l’
    1. 可以查看到容器的端口占用情况
    2. 可以查看到docker服务状态
    3. 可以查看到容器相对于宿主机的ip

容器信息修改

  1. 创建时指定参数
    可以在创建容器时指定参数,即前面介绍的 'docker run -p -e --name --net --link [镜像标识] /bin/bash’等等

  2. 查看容器信息
    可以查看一个任何状态(已创建,运行中,已退出)的容器信息,即前面介绍的 ‘docker inspect [容器标识]’

  3. 创建后修改容器参数

    1. 创建后可以通过修改配置文件的方式修改容器参数
    2. ! 修改配置文件时需要容器处在 关闭状态,修改完后需要’service restart docekr’重启docker,再’docker start [容器标识]'启动容器生效
    3. 配置文件路径可以通过前面介绍的 'docker inspect [容器标识]'找到, 其中的HostnamePath, HostsPath是容器的配置文 件。

    例子: 任意一个容器的配置文件路径为 /var/lib/docker/containers/容器id/

    "HostnamePath": "/var/lib/docker/containers/059e89ecdd629ecdde43bd5948dfc203434f5ef8660e9f28e253e0467380c37b/hostname"  
    "HostsPath": "/var/lib/docker/containers/059e89ecdd629ecdde43bd5948dfc203434f5ef8660e9f28e253e0467380c37b/hosts"    
    
  4. 下面以创建时指定的参数维度,来描述这些参数的配置文件修改位置

  • docker run –expose 80 参数,指定容器暴露的端口
    配置修改位置
    /var/lib/docker/containers/容器id/config.v2.json
    {
           
        "Config": {
           
            "ExposedPorts":{
           
                "80/tcp":{
           
    
                }
            }
        }
    }
    
  • docker run -p 5080:80 参数,指定端口映射
    配置修改位置
    /var/lib/docker/containers/容器id/config.v2.json
    {
           
        "NetworkSettings": {
           
            "Ports":{
           
                "80/tcp":[
                    {
           
                        "HostIp":"0.0.0.0",
                        "HostPort":"5080"
                    }
                ]
            }
        }
    }
    
    配置修改位置2
    /var/lib/docker/containers/容器id/hostconfig.json
    {
           
        "PortBindings": {
           
            "80/tcp":[
                    {
           
                        "HostIp":"0.0.0.0",
                        "HostPort":"5080"
                    }
            ]
        }
    }
    
  • docker –name hello 参数,指定容器名
    配置修改位置
    /var/lib/docker/containers/容器id/config.v2.json
    {
           "Name":"xxx"}
    
  • docker run -e xxx=“xxx” 指定环境变量
    修改位置
    /var/lib/docker/containers/容器id/config.v2.json
    {
           
        "Config": {
           
            "Env": [
                "xxx=xxx"
            ]
        }
    }
    
  • docker run –link mysql5.7:mysql 指定容器链接
    修改位置
    /var/lib/docker/containers/容器id/hostconfig.json
    {
           
        "Links": ["mysql5.7:mysql"]
    }
    

从容器生成镜像

‘docker commit -a “作者” -m “提交说明” [容器标识] [镜像标识]’

你可能感兴趣的:(Linux,docker)