docker

 

介绍

一次封装,到处运行

仓库:存放镜像的地方,dockerhub
镜像:容器的模板
容器:
  镜像的实例就是容器(模板)
  每个容器相互隔离
  可以看做是一个简易版的linux环境(包括 用户权限,进程空间,用户空间,网络空间)和运行在其中的应用程序。

集装箱:容器
鲸鱼:docker

linux 容器:linux containers, LXC
容器与虚拟机不同,不需要捆绑一套操作系统,只需要软件工作需要的库资源和设置

虚拟机:
  hypervisor 硬件虚拟化,需要单独的操作系统
docker:
  操作系统层虚拟化(容器),直接利用宿主机内核

容器是将操作系统层虚拟化虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。

操作系统层虚拟:
  亦称容器化
  可以实现软件的即时迁移(Live migration),使一个软件容器中的实例,即时移动到另一个操作系统下,再重新运行起来。但是在这种技术下,软件即时迁移,只能在同样的操作系统下进行。
  由于在同一台服务器上的容器实例共享同一个系统内核,因此在运行上不会存在实例与主机操作系统争夺RAM的问题发生,从而能够保证实例的性能 

 

hypervisor vs container

docker_第1张图片

docker_第2张图片 docker_第3张图片docker_第4张图片

 

 

 

 

命令

docker run hello-world

docker version
docker info
docker --help

docker images --help
docker images 本地镜像
docker images -a 本地镜像,包含镜像的中间层

docker search -s 30 --no-trunc tomcat 星超过30的

docker pull tomcat =>docker pull tomcat:lastst
docker rmi -f image1 image2:lastst 不加tag默认最新
docker rmi -f $(docker images -qa) 删除所有镜像

docker run --name="容器名字" -it centos(镜像名称) 交互式启动

 

  docker start -ia 2ea90f309a16 重新进入exit的容器

 


--name="容器新名字": 为容器指定一个名称,不指定随机生成
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
      ip:hostPort:containerPort
      ip::containerPort
      hostPort:containerPort
      containerPort

exit:容器停止并退出

ctrl+p+q:容器不停止退出

docker start xx

docker kill/stop xx

docker rm -f $(docker ps -a -q)  docker ps -a -q |xargs docker rm //删除多个容器

docker run -d centos  后台式启动

  docker ps --no-trunc 正在运行

    -a 所有

    -l 最近一次

    -n 2 指定最近次数

 

docker容器后台运行,必须有一个前台进程,解决方式,将你要运行的程序以前台进程的形式运行

 

  docker logs -t -f --tail 10 3bcfb8b57a88

    -t 打印时间

    -f 追加

    --tail 最近条数

  docker inspect 3bcfb8b57a88 查看容器内部细节

 

  #会启动新进程

  docker exec -it 3bcfb8b57a88 ls -al

  docker exec -it 3bcfb8b57a88 ls /bin/sh 

  

  #不启动新进程

  docker attach xxx

  docker cp 3fa4e2af10c6:/tmp/ /tmp/a 拷贝文件到宿主机

 

  端口映射

  docker  run -it -p 8888(主机端口):8080(docker端口) tomcat 

   制作新镜像

  docker commit 提交容器副本使其成为一个新的镜像

  docker commit -m"提交信息" containerId

  commit -a'jksong' -m"tomcat_new" 2e78acdfa04c  jksong/tomcat:1.0

镜像

阿里云镜像加速器

docker_第5张图片docker_第6张图片

 

   

#brew镜像
https://mirror.tuna.tsinghua.edu.cn/help/homebrew/

git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
git -C "$(brew --repo homebrew/cask-fonts)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git
git -C "$(brew --repo homebrew/cask-drivers)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git

 

  unionfs:联合文件系统

    对文件的修改作为一次提交来一层层的叠加,同时可以把不同的目录挂载到同一个虚拟文件系统下。

    一次同时加载多个文件系统,但从外面看只来只有一个文件系统

    优点:共享资源

 

  镜像:

    轻量级,可独立执行的软件包,用来打包软件运行环境基于运行环境开发的软件,包括代码、运行库、环境变量、配置文件。

    镜像都是只读的

  

数据卷

  卷就是目录或文件,存在一个或多个容器中,由docker挂载到容器但不属于联合文件系统

  解决:容器删除后数据丢失

  目的:数据持久化,容器间共享数据

  特点:

    卷中的更改可以立刻生效

    卷的更改不包含在镜像中

    卷的生命周期一直持续到没有容器使用它为止

 

  docker run -it -v /tmp/dataVolumeHost(宿主机):/dataVolumeContainer(容器) centos 目录不存在则自动创建

  docker run -it -v /tmp/dataVolumeHost:/dataVolumeContainer:ro centos 容器中只读权限

  docker inspect containerId 查看 Mounts 部分

"Mounts": [
            {
                "Type": "bind",
                "Source": "/tmp/dataVolumeHost",
                "Destination": "/dataVolumeContainer",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

  

 

 

Dockerfile

  dockerfile是用来构建docker镜像的构建文件,dockerfile->docker build->docker run

  样例文件

FROM scratch #基础镜像
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20200504" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-05-04 00:00:00+01:00"

CMD ["/bin/bash"] #默认执行命令

   每条指令都会创建一个新的镜像,并对镜像进行提交

  执行流程:

     1、docker从基础镜像运行一个容器

     2、执行每一条指令并对容器作出修改,类似commit操作提交一个新镜像

     3、基于提交的镜像运行一个容器

     4、执行下一个命令,直到所有命令执行完成

 

 

 

 

参考:

  操作系统层虚拟化

      Hypervisor(硬件虚拟化)

  LXC,其名称来自Linux软件容器(Linux Containers)

    清华大学开源软件镜像站

  

 

你可能感兴趣的:(docker)