docker笔记

来源:互联网 发布:相片冲印软件 编辑:程序博客网 时间:2024/04/30 12:16

  • 一 docker是什么
  • 二 为什么使用docker
  • 三docker有哪些不足
  • 四Docker组件
  • 五 mac中安装docker
  • 六 docker常用操作

一 、docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上。区别于VM,docker只包含应用程序以及依赖库,共享宿主机操作系统已有的一些基础功能服务,所以Docker的资源占用很低,非常的轻量高效。

这里写图片描述

二 、为什么使用docker

1. 快速的交付和部署    试想一下当我们在一个新服务器中部署一个javaweb应用时,我们需要安装jdk,web服务器、数据库等环境,以及各种配置文件,    还要处理不同版本系统间的软件兼容问题,想想是不是就觉得很繁琐。但是有了docker我们可以把各种环境和配置打包成docker    镜像,部署时只需安装好docker然后从仓库中把打包的镜像pull下来启动容器就搞定2. 高效的虚拟化    Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率3. 轻松的迁移和扩展    Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性    可以让用户把一个应用程序从一个平台直接迁移到另外一个4. 更简单的管理    使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理

三、docker有哪些不足

  1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
  2. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
  3. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
  4. 网络管理相对简单,主要是基于namespace隔离
  5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
  6. docker对disk的管理比较有限
  7. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

四、Docker组件

docker主要由三个部分组成1. Docker Client:命令行工具,是用户使用Docker的主要方式,  Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon2. Docker Daemon:运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互3. Docker hub/registry:共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry

这里写图片描述

五、 mac中安装docker

mac中安装docker有两种方式:docker for mac 和 docker toolbox前者安装更加的简单方便,本文只讲第一种方式的安装,如果想使用后者可以阅读官方文档安装环境要求:1. Mac必须是2010或者以后出的,cpu支持MMU、EPT技术2. OS X 10.10.3 Yosemite或更新的系统3. 最低4G内存4. 未安装过4.3.30之前的VirtualBox,因为与Docker for Mac有冲突下载链接:<https://docs.docker.com/docker-for-mac/>

这里写图片描述

喜欢体验新特性的读者可以下载测试版本,本文下载的是稳定版本安装步骤略过,启动后的样子

这里写图片描述

安装完后打开终端测试一下:docker --versionDocker version 1.12.1, build 6f9534cdocker-compose --versiondocker-compose version 1.8.0, build f3628c7docker-machine --versiondocker-machine version 0.8.1, build 41b3b25输出正常说明安装成功

在进入hello world前先来了解一下docker中的三个个重要的东西:
镜像(image)仓库(存储装镜)和容器(container)它们像是这样的关系

Docker 面向对象 容器 对象 镜像 类

所以在运行容器前我们需要先取得镜像
在命令行中敲入:docker images

bogon:~ always$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

可以看到当前在我们的电脑里是没有任何镜像的,然后再敲入下面的命令

bogon:~ always$ docker run hello-worldUnable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-worldc04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for hello-world:latest后略

docker run hello-world 命令run主要做了两件事,从本地查找是否有名称为hello-world的镜像,如果没有则自动
从镜像仓库中下载,然后使用该镜像自动创建一个容器,最后启动该
容器

再次输入docker images

bogon:~ always$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEhello-world         latest              c54a2cc56cbb        3 months ago        1.848 kB

可以看到关于hello-world镜像的详细信息,到此docker初体验完成

另外mac上有docker的可视化管理工具Kitematic,配置和操作也是非常的简便,可以尝试一下,它看起来是这样的:

这里写图片描述

六、 docker常用操作

1、查看本地所有镜像:

docker images

2、拉取镜像
docker pull imageName

docker pull ubuntu

3、创建容器
docker create [option] imageName

docker create --name ubuntu01 ubuntu

使用create命令创建一个ubuntu系统的容器,镜像名为ubuntu,并指定容器名称为ubuntu01,该命令只创建容器不会运行容器

4、创建并启动容器
docker run [option] imageName

docker run -d -p 8888:80 --name webserver nginx

使用run命令创建一个nginx容器,–name webserver:指定容器名称为webserver,-d:以后台方式运行,-p 8888:80为端口映射,想要从外部访问容器的80端口只需访问宿主机的8888端口,端口可以绑定多个,
启动成功后这时我们可以通过:http://localhost:8888访问容器中的nginx

5、启动已创建的容器
docker start containerName/containerId

docker start ubuntu

使用start命令启动一个叫ubuntu的容器

6、停止容器
docker stop containerName/containerId

docker stop ubuntu

7、查看容器
查看所有:

docker ps -a

查看运行中:

docker ps

8、删除容器
docker rm containerName/containerId

docker rm ubuntu

9、进入容器进行管理
docker exec -it containerName/containerId

docker exec -it ubuntu /bin/bash

10、退出容器管理

Ctrl+P Ctrl+Q

11、删除镜像
docker rmi imageName/imageId,删除前需要先删除关联的容器

docker rmi ubuntu

12、保存镜像
docker commit containerName/containerId imageName/imageId

ALWAYSdeMacBook:/ always$ docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES0689af155777        ubuntu              "/bin/bash"         48 seconds ago      Up 46 seconds                           ubuntu01ALWAYSdeMacBook:/ always$ docker commit 0689af155777 ubuntusha256:11a9fa3b4de15da8e3437461f8e81f67220342d8633d4cb4298c3a4a9f2104f9

对运行的容器安装了软件或者做了其它的修改时需要把新的内容保存到镜像中去,否则该镜像新创建的容器运行时又恢复成原样

0 0
原创粉丝点击