docker镜像

文章目录
  1. 1. spring-boot项目image
  2. 2. 镜像仓库
  • docker hub
  • 阿里云docker hub
  • 搭建自己的Docker Harbor
  • Image常见操作
  • container到image
  • container常见操作
  • container资源限制
  • 底层技术支持
  • spring-boot项目image
    1. 创建一个Spring Boot项目

    2. 写一个controller

      @RestController    
      public class DockerController {
      @GetMapping("/dockerfile")
      @ResponseBody
      String dockerfile() {
      return "hello docker" ;
      }
      }
    3. mvn clean package打成一个jar包 在target下找到”dockerfile-demo-0.0.1-SNAPSHOT.jar”

    4. 在docker环境中新建一个目录”first-dockerfile”

    5. 上传”dockerfile-demo-0.0.1-SNAPSHOT.jar”到该目录下,并且在此目录创建Dockerfile

    6. 创建Dockerfile文件,编写内容

      FROM openjdk:8    

      MAINTAINER itcrazy2016

      LABEL name="dockerfile-demo" version="1.0" author="itcrazy2016"

      COPY dockerfile-demo-0.0.1-SNAPSHOT.jar dockerfile-image.jar

      CMD ["java","-jar","dockerfile-image.jar"]
    7. 基于Dockerfile构建镜像

      docker build -t test-docker-image .
    8. 基于image创建container

      docker run -d --name user01 -p 6666:8080 test-docker-image
    9. 查看启动日志

      docker logs user01
    10. 宿主机上访问

      curl localhost:6666/dockerfile
    11. 还可以再次启动一个

      docker run -d --name user02 -p 8081:8080 test-docker-image
    镜像仓库
    docker hub
    1. 访问 hub.docker.com 申请用户名和密码。

    2. 在docker机器上登录
    docker login

    3. 输入用户名和密码

    4. docker push itcrazy2018/test-docker-image
    [注意镜像名称要和docker id一致,不然push不成功]

    5. 给image重命名,并删除掉原来的
    docker tag test-docker-image itcrazy2018/test-docker-image
    docker rmi -f test-docker-image

    6. 再次推送,刷新hub.docker.com后台,发现成功

    7. 别人下载,并且运行
    docker pull itcrazy2018/test-docker-image
    docker run -d --name user01 -p 6661:8080 itcrazy2018/test-docker-image
    阿里云docker hub
    1. 阿里云docker仓库
    https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
    搭建自己的Docker Harbor
    1. 访问github上的harbor项目

    2. 下载版本,比如1.7.1
    https://github.com/goharbor/harbor/releases

    3. 找一台安装了docker-compose,上传并解压
    tar -zxvf xxx.tar.gz

    4. 进入到harbor目录
    修改harbor.cfg文件,主要是ip地址的修改成当前机器的ip地址
    同时也可以看到Harbor的密码,默认是Harbor12345

    5.安装harbor,需要一些时间
    sh install.sh

    6. 浏览器访问,比如39.100.39.63,输入用户名和密码即可
    Image常见操作
    1. 查看本地image列表    
    docker images
    docker image ls

    2. 获取远端镜像
    docker pull    

    3. 删除镜像[注意此镜像如果正在使用,或者有关联的镜像,则需要先处理完]
    docker image rm imageid
    docker rmi -f imageid
    docker rmi -f $(docker image ls)     删除所有镜像

    4. 运行镜像
    docker run image

    5. 发布镜像
    docker push
    container到image

    既然container是基于image之上的,想想是否能够由一个container反推出image呢?肯定是可以的,比如通过docker run运行起一个container出来,这时候对container对一些修 改,然后再生成一个新的image,这时候image的由来就不仅仅只能通过Dockerfile咯。

    1. 拉取一个centos image    
    docker pull centos

    2. 根据centos镜像创建出一个container
    docker run -d -it --name my-centos centos

    3. 进入my-centos容器中
    docker exec -it my-centos bash

    4. 输入vim命令
    bash: vim: command not found

    5. 我们要做的是对该container进行修改,也就是安装一下vim命令,然后将其生成一个新的centos

    6. 在centos的container中安装vim
    yum install -y vim

    7. 退出容器,将其生成一个新的centos,名称为"vim-centos-image"
    docker commit my-centos vim-centos-image

    8. 查看镜像列表,并且基于"vim-centos-image"创建新的容器
    docker run -d -it --name my-vim-centos vim-centos-image

    9. 进入到my-vim-centos容器中,检查vim命令是否存在
    docker exec -it my-vim-centos bash vim

    结论 :可以通过docker commit命令基于一个container重新生成一个image,但是一般得到image的 方式不建议这么做,不然image怎么来的就全然不知咯。

    container常见操作
    1. 根据镜像创建容器    
    docker run -d --name -p 9090:8080 my-tomcat tomcat

    2. 查看运行中的
    container docker ps

    3. 查看所有的container[包含退出的]
    docker ps -a

    4. 删除container
    docker rm containerid
    docker rm -f $(docker ps -a)   删除所有container

    5. 进入到一个container中
    docker exec -it container bash

    6. 根据container生成image
    docker commit

    7. 查看某个container的日志
    docker logs container

    8. 查看容器资源使用情况
    docker stats

    9. 查看容器详情信息
    docker inspect container

    10.停止/启动容器
    docker stop/start container
    container资源限制

    如果不对container的资源做限制,它就会无限制地使用物理机的资源,这样显然是不合适的。 查看资源情况 :docker stats

    1. 内存限制

      --memory    Memory limit 

      如果不设置 --memory-swap,其大小和memory一样

      docker run -d --memory 100M --name tomcat1 tomcat
    1. cpu限制

      --cpu-shares    权重 

      docker run -d --cpu-shares 10 --name tomcat2 tomcat
    1. 图像化资源监控

      https://github.com/weaveworks/scope

      sudo curl -L git.io/scope -o /usr/local/bin/scope 

      sudo chmod a+x /usr/local/bin/scope

      scope launch 39.100.39.63
      # 停止
      scope scope stop

      # 同时监控两台机器,在两台机器中分别执行如下命令
      scope launch ip1 ip2
    底层技术支持

    Container是一种轻量级的虚拟化技术,不用模拟硬件创建虚拟机。 Docker是基于Linux Kernel的Namespace、CGroups、UnionFileSystem等技术封装成的一种自 定义容器格式,从而提供一套虚拟运行环境。

    Namespace:用来做隔离的,比如pid[进程]、net[网络]、mnt[挂载点]等

    CGroups: Controller Groups用来做资源限制,比如内存和CPU等

    Union file systems:用来做image和container分层