docker_1

  • docker_1已关闭评论
  • 184 次浏览
  • A+
所属分类:linux技术
摘要

由于传统的方式,不能打包环境,而环境的配置也及其繁琐,及其耗费时间,而docker就可以非常有效的解决这个问题


Docker概述

Docker为何要出现

由于传统的方式,不能打包环境,而环境的配置也及其繁琐,及其耗费时间,而docker就可以非常有效的解决这个问题

docker的思想来源于集装箱,docker的核心思想!打包装箱,也就是说每个箱子都是隔开的,docker通过这种机制可以吧服务器利用到极致

docker为什么这么多人喜欢用

在类似docker这种技术出现之前,我们用的都是虚拟机,而虚拟机和docker都称为虚拟化技术,不同的则是:

  • 虚拟机安装和启动相当于一个全新的操作系统,体积十分的大
  • docker则是直接运行在宿主机的,而且每个容器是相互隔离的,每个容器都有属于自己的文件系统,而每个容器相同的东西是共用的,互不影响,也十分的小巧

docker是基于go语言开发的,是一个开源项目

docker官网:https://www.docker.com/

docker的官方文档:https://docs.docker.com/

docker的镜像仓库:https://hub.docker.com/

  • 应用更快熟的交付和部署
  • 更便利的升级的扩展,删减
  • 更简单的系统运维
  • 更高效的计算机资源利用

Docker安装

参考官方文档和百度以及Google

Docker的基本组成

  • 镜像(images)

    可以通过镜像来创建多个容器

  • 容器(container)

    利用容器化技术,独立运行应用,通过镜像来创建,目前可以理解为一个简易的linux

  • 仓库(repository)

    存放镜像的地方,分为私有和公有,国内结合阿里云的容器的镜像加速服务使用

Docker的常用命令

帮助命令

docker version  # 查看docker的版本信息 docker info # 查看docker的系统信息,包含镜像和容器的数量 docker 命令 --help #帮助命令,帮助文档:https://docs.docker.com/engine/reference/commandline/build/ 

镜像命令

docker images # 查看本地主机上的所有镜像,也可以用docker image ls # 解释  #REPOSITORY # 镜像的仓库源 #TAG # 镜像的标签  #IMAGE ID # 镜像的id #CREATED # 镜像的创建时间  #SIZE # 镜像的大小 docker search # 搜索镜像 docker pull #下载镜像 docker rmi # 删除镜像 

docker pull下载镜像

#下载镜像 docker pull 镜像名[:tag] ❯ docker pull gcc Using default tag: latest latest: Pulling from library/gcc #不写tag默认就是latest b9a857cbf04d: Already exists # 分层下载 docker images的核心,联和文件系统 d557ee20540b: Already exists 3b9ca4f00c2e: Already exists 667fd949ed93: Already exists 4ad46e8a18e5: Already exists 6b12d912e8a1: Pull complete 469a7950a2b4: Pull complete b0ef12232a36: Pull complete c261ba6eb26c: Pull complete Digest: sha256:f418921b872c4831dfc9bc33aaec2a8480d37e46190da766c3497cd8d5fedb75 # 防伪签名 Status: Downloaded newer image for gcc:latest docker.io/library/gcc:latest # 真实地址 

docker rmi删除镜像

docker rmi -f 镜像id #删除指定的镜像 docker rmi -f 镜像id 镜像id 镜像id 镜像id#删除指定的镜像 docker rmi -f $(docker images -aq) #删除全部的镜像 

容器命令

docker run 镜像id # 新建容器并启动  docker ps # 列出所有运行的容器 docker container list docker rm 容器id # 删除指定容器 docker start 容器id # 启动容器  docker restart 容器id # 重启容器  docker stop 容器id # 停止当前正在运行的容器  docker kill 容器id # 强制停止当前容器 

注:我们有了镜像才可以创建容器,linux

> docker container  Usage:  docker container COMMAND  Manage containers  Commands:   attach      Attach local standard input, output, and error streams to a running container # 当前shell下 attach连接指定运行的镜像   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  Run 'docker container COMMAND --help' for more information on a command. 

新建容器并启动

docker run [可选参数] images | docker container run [可选参数] image #参数说明书 --name="Name" # 容器名字 tomcat01 tomcat02 用来区分容器  -d # 后台方式运行 -it # 使用交互方式运行,进入容器查看内容 -p # 指定容器的端口 -p 8080(宿主机):8080(容器) 	-p ip:主机端口:容器端口  	-p 主机端口:容器端口(常用)  	-p 容器端口 -P(大写) 随机指定端口 # 测试 ❯ docker run -it centos Unable to find image 'centos:latest' locally latest: Pulling from library/centos 7a0437f04f83: Already exists Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest i[root@8f62df7602af /]# ls bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var dev  home  lib64  media       opt  root  sbin  sys  usr [root@8f62df7602af /]# exit # 退出容器到主机 exit 

查看当前正在运行的容器

❯ docker ps CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES 565c3e0b43ca   centos    "/bin/bash"   12 seconds ago   Up 11 seconds   practical_hermann 

退出容器

exit # 直接退出容器 ctrl+p+Q # 容器不停止退出 

删除容器

docker rm 容器id # 删除指定容器,不能删除正在运行的容器,可以使用rm -rf强行删除 docker rm -f $(docker ps -aq) # 删除指定的容器 docker ps -a -q|xargs docker rm #删除所有的容器 

启动和停止容器的操作

docker start 容器id # 启动容器 docker restart 容器id # 重启容器 docker stop 容器id # 停止当前正在运行的容器 docker kill 容器id # 强制停止当前容器 

常用的其它命令

后台启动命令

# docker run -d 镜像 ❯ docker run -d centos 0a739d000eafcb8e190e890ed06832de1b7ee2f1544d59fcd60390699f1612fe ❯ docker ps CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES # 常见的坑,docker容器使用后台运行,就必须要有一个前端进程,docker发现没有应用,就会自动停止 

查看日志

# 显示日志  -tf # 显示日志信息(一直更新) --tail number # 需要显示日志条数  docker logs -t --tail n 容器id # 查看n行日志  docker logs -ft 容器id # 跟着日志 

查看镜像的元数据

❯ docker inspect centos #centos为容器id或名称 [     {         "Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",         ..........     } ] 

进入当前正在运行的容器

docker exec -it 容器id bashshell # 进入当前容器重开一个终端,可以在里面操作 docker attach 容器id # 进入当前容器正在执行的终端 

从容器拷贝到主机上

docker cp 容器id:容器内路径 主机 

Docker镜像讲解

镜像是什么

镜像其实就是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,将所有的应用和环境打包成docker镜像,即可直接运行

Docker镜像加载原理

  • UnionFs(联合文件系统)

    我们下载的时候看见的一层层的就是这个

    也就是一种分层,轻量级并且高性能的文件系统,支持对文件系统修改作为一次提交来一层层叠加,同时可以将不同的目录挂载在同一个虚拟文件系统下,是docker镜像的基础,镜像可以分层继承

    特性:可以一次加载多个文件系统,但总体就一个文件系统,联和加载会把各层文件系统叠加起来,最终的文件系统就会包含底层的所有文件和目录

分层

最大的好处就是资源共享,查看镜像分层的方式可以通过docker images inspect来查看

理解

所有的docker都起始于一个基础的镜像层,当进行修改的或者新加内容时,就会在当前的镜像层之上新建镜像层,类似于游戏打补丁

Docker通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统 一的文件系统

Linux上可用的存储引撃有AUFS、 Overlay2、 Device Mapper、Btrfs以及ZFS。顾名思义,每种存储引擎都基于 Linux中对应的文件系统或者块设备技术,井且每种存储引擎都有其独有的性能特点

Docker在 Windows上仅支持 windowsfilter 一种存储引擎,该引擎基于NTFS文件系统之上实现了分层 和CoW

docker镜像都是只读的,当容器启动的时候,一个新的可写层加载到镜像的顶部,这一层就是我们常说的容器层,容器之下的都叫镜像

commit镜像

# 和git的原理类似 docker commit -m="描述" -a="作者" 容器id 目标镜像名[:TAG]