【docker】docker学习(一)

 

什么是docker

docker是容器平台
docker公司开发,开源,托管github

跨平台,支持Windows/linux/MacOS

docker思想

集装箱

标准化

  • 运输方式
  • 存储方式
  • API接口

隔离

docker解决了什么问题

问题1:我程序本地运行没有问题,换台电脑为何启动不了---------docker解决了运行环境不一致的问题

问题2:系统好卡,谁写了死循环吧-----------docker的隔离性。避免公用的服务器,资源会容易受到其他用户的影响。

问题3:双11来了,服务器撑不住了--------docker可以轻松部署更多的服务器,善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展

补充:

  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。

走进docker

三个关键词:镜像/仓库/容器

镜像就是docker思想的集装箱

仓库就是超级码头

容器就是运行程序的地方

docker运行一个程序的过程:去仓库把镜像拿到本地,然后用一条命令把镜像运行起来,变成容器

Docker镜像

镜像(Image)就是一堆只读层(read-only layer)的统一视角

1.png

从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在主机(译者注:运行Docker的机器)的文件系统上访问到。统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

镜像解释来自于:http://dockone.io/article/783


一个镜像是一个可执行的包,其中包括运行应用程序所需的所有内容-代码、运行环境、libraries、环境变量和配置文件。

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

Docker容器

容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

要点:容器 = 镜像 + 读写层。并且容器的定义并没有提及是否要运行容器。

容器解释来自于:http://dockone.io/article/783

 


同一个镜像可以生成多个容器,而且他们的运行互不干扰。多个容器可以在同一台机器上运行


容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新run,数据却不会丢失。

来自于http://dockone.io/article/6051


Docker仓库

docker仓库是集中存放镜像文件的地方。

https://hub.docker.com/

c.163.com

docker在windows下的安装

1.下载

windows10:https://www.docker.com/products/docker#/windows

非windows10:https://www.docker.com/products/docker-toolbox

如果访问不到,可以去菜鸟看看http://www.runoob.com/docker/windows-docker-install.html

2.安装(默认安装)

3.运行

安装完成后,打开Docker Quickstart Terminal,因为第一次加载很慢。可以看到一直在找一个文件boot2docker

你可以下载这个文件:https://pan.baidu.com/s/1qYyc0ag

copy到路径C:\Users\pc\.docker\machine\cache

4.输入命令docker version。下面这样,则安装成功。

ps:其他系统的安装,去菜鸟看看http://www.runoob.com/docker/windows-docker-install.html

docker在linux下开发出来的,linux系统下会更稳定

第一个docker镜像

输入命令查看镜像

查看镜像:
$ docker images

输入命令拉取镜像 docker pull [OPTIONS] [REPOSITORY[:TAG]]

拉取镜像:
$ docker pull hello-world

诸如hello-world的镜像,在docker.io官网可以查到。当你拉取镜像,没有指明地址。默认是 Docker Hub 公共镜像源

第一个docker容器

这种方式是前台启动

前台启动:
$ docker run hello-world

 

Client、DOCKER_HOST在本机上

docker pull:输入命令后,告诉docker daemon我要拉取某一镜像,docker daemon先在本机检查是否有该镜像(版本也相同),如果没有,去镜像仓库找到该镜像,如果找到,就会存到本地。

docker run:把命令发送到docker daemon,docker daemon先在本机检查是否有该镜像(版本也相同),如果有,通过一定的方式运行起来,变成docker容器,如果本地没有,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载,如果找到,就会存到本地,再成docker容器。

Docker 运行nginx镜像

网易云蜂巢的镜像中心:https://c.163yun.com/hub#/m/home/

nginx:持久运行的容器;前台挂起、后台运行;进行容器内部

https://c.163yun.com/hub#/m/search/?keyword=nginx

可以查看本机上正在运行的容器:
$ docker ps

docker运行nginx镜像应该使用后台运行的方式

后台运行:
$ docker run -d hub.c.163.com/library/nginx:latest

 返回一个字符串,是容器的id

停止运行的命令:
ctrl+c 
如果没有反应,
$ docker stop<container id>

 

查看进入容器命令帮助:
$ docker exec --help
进入容器:
$ docker exec [参数] 容器名 命令
示例:
// d3是containerId的开头,写d也可以,因为现在运行的容器很少
$ docker exec -it  d3 bash

进入容器后:

就像进入linux系统,linux的命令都可以执行


遇到个问题:

输入

$ ps -ef

command not found

解决问题:因为容器里面没有安装 ps 命令

1、先在容器里面执行:apt-get update 2,然后,执行安装 ps命令 :apt-get install procps


退出容器:
$ exit

Docker网络

网络类型

  • Bridge 
  • Host 
  • None

端口映射(默认Bridge模式)

eth0(Host:图中最下面eth0):主机的网卡

host模式:容器会直接连接到主机的网卡上,容器内看到的网络和主机的网络是一样的。

bridge模式:启动容器时,会有一个虚拟网卡,与网桥相连。通过这种方式与主机通信。

启动镜像并映射端口:
$ docker run -d -p 8080:80 hub.c.163.com/library/nginx:latest
查看当前运行的镜像信息:
$ docker ps
$ netstat -na|grep 8080

访问http://localhost:8080http://127.0.0.1:8080/

但是拒绝访问,重新输入http://192.168.99.100:8080/

192.168.99.100

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值