Docker学习笔记(一)

Docker的使用场景:

1.使用Docker容器开发、测试、部署服务
2. 创建隔离的运行环境
3. 搭建测试环境
4. 构建多用户的平台即服务(PaaS)基础设施
5. 提供软件即服务(SaaS)应用程序
6. 高性能、超大规模宿主机部署

Docker的组成

docker client和docker server。

Docker的组件

镜像(Image)(相当于一个完整的操作系统)、容器(Container)(通过镜像启动,用来运行应用,相互隔离)、仓库(Repository)(集中存放镜像文件)
在这里插入图片描述
  容器和镜像是docker最核心的部分,使用docker时就是在容器里面运行一个镜像。容器是运行在虚拟机上的一个进程,只不过加入了对资源的隔离和限制。docker的三大核心功能就是CGroups、Namespace和UnionFS。CGroups技术用来限定一个进程的资源使用;Namespace技术用来划分不同的命名空间,在一个操作系统上,用户ID,机器名等资源是全局的,运行的进程间都是访问同一份资源,为了达到隔离的目的,出现了Namespace技术;UnionFS用来出来分层镜像。镜像相当于容器中的文件系统,镜像和容器也可以相互转换。

docker用到的namespace技术:

PID(Process ID) 进程隔离
NET (Network) 管理网络接口
IPC (InterProcess Communication) 管理跨进程通信的访问
MNT (Mount) 管理挂载点
UTS (Unix Timesharing System) 隔离内核和版本标识

docker用到的CGroups技术:

资源限制
优先级设定
资源计量
资源控制

docker容器的能力

文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源隔离和分组:使用CGroups将CPU和内存之类的资源独立分配给每个docker容器

docker的守护式容器:

能够长期运行
没有交互式会话
适合运行应用程序和服务
以守护形式运行容器:
步骤:

  • docker run -i -t IMAGE /bin/bash
  • 按Ctrl+P和Ctrl+Q
    上述两步变成守护式,如果还想回到容器,则用如下命令:
  • docker attach CONTAINER ID或者names
    即用容器ID或者容器名字可回到容器。
docker常用的命令:

docker search --搜索镜像,如docker search centos
docker pull repository[:tag] --获取镜像,如docker pull ubuntu,如docker pull ubuntu:14.04
docker push 镜像名 向dockerHub推送镜像
docker images [-a][-q][镜像名]–查看镜像
在这里插入图片描述
docker inspect 容器名/容器ID/镜像:版本(即repository:tag)
docker rmi --删除镜像,需要跟镜像id
docker info --查看运行状态及版本信息的命令
docker run --name -h hostname --启动容器
在这里插入图片描述
后面的名字是自动生成的,可以重新起个名字。
启动交互式容器命令格式:
docker run -i -t IMAGE /bin/bash

docker run --name myDocker -it centos /bin/bash

可以看到已经进入了一个容器里
在这里插入图片描述
给容器重新命名为myDocker,-it是两个参数,-i让容器输入终端保持打开,-t是开一个伪终端。

docker run -d --name mydocker1 centos

在后台启动一个名字为mydocker1的守护式容器。-d和–name可以交换位置。返回一个很长的容器id
在这里插入图片描述
docker start [-i] CONTAINER ID --启动已终止的容器
docker stop CONTAINER ID --停止容器
docker ps --查看容器,docker ps -a 查看所有运行和已停止的容器,docker ps -l 查看最近运行的容器
docker exec|docker attach --进入容器
docker rm CONTAINER ID–删除容器
进入一个后台运行的容器:
docker ps -l --查看上次运行的容器
查看容器日志:

  • docker logs [-f][-t][–tail] 容器名/容器id
    -t 输出时间戳
    -f 不断输出更新的日志
    –tail 输出最新的日志
docker  logs -tf  --tail 10 dct  //输出最新的十条,输出时间戳并不断更新,dct为容器名字。

查看容器内进程

  • docker top 容器名/容器id

在运行的容器中启动新进程

  • docker exec [-d][-i][-t] 容器名/容器id 命令和参数

停止守护式容器,两种方式。

  • docker stop 容器名/容器id 发送信号给容器,等待容器的停止,默认有10s的时间
  • docker kill 容器名/容器ID kill会直接停止容器

可以使用 man docker-命令 来查看docker具体命令的介绍

在容器中部署静态网站

设置容器的端口映射:run [-P][-p]
docker的run命令后面跟大写的P,是将容器暴露的端口,随机映射到宿主机上。
如:docker run -P -it ubuntu /bin/bash --将容器暴露的所有端口,随机映射到宿主机上。
docker run -P 80 ubuntu /bin/bash --将容器的80端口,随机映射到宿主机的一个端口上。
使用小写的p,是将指定容器的端口,映射到宿主机的一个端口,有四种形式:

  • containerPort
    docker run -p 80 -it ubuntu /bin/bash
    将容器端口80随机映射到宿主机上
  • hostPort:containerPort
    docker run -p 8080:80 -it ubuntu /bin/bash
    将容器80端口映射到宿主机8080端口上
  • ip::containerPort
    docker run -p 0.0.0.0::80 -it ubuntu /bin/bash
  • ip:hostPort:containerPort
    docker run -p 0.0.0.0:8080:80 -it ubuntu /bin/bash
    ip均是宿主机的ip

用例:在容器中部署静态网站–Nginx

* 运行一个带端口映射的交互容器
 docker run -p 80 --name web -it ubuntu /bin/bash
* 进入容器后,安装nginx,注意一定要先update。
  apt-get update && apt-get install -y nginx

在这里插入图片描述
*安装vim命令
apt-get install -y vim
*安装好vim命令后,在容器下建目录
mkdir -p /var/www/html
在这里插入图片描述
*之后进入到该路径下,编辑一个静态页面
vim index.html
进入编辑模式后,按i进入插入模式,输入如下内容:
在这里插入图片描述
编辑完成后,按ESC,输入:wq 保存退出。
*通过 whereis nginx命令查看nginx安装到哪:
在这里插入图片描述
列出/etc/nginx目录下的文件及文件夹:ls /etc/nginx
在这里插入图片描述
列出sites-enabled目录下的文件
在这里插入图片描述
查看并修改default文件:
在这里插入图片描述
修改root后的内容为刚才创建的目录
在这里插入图片描述
返回至容器的根目录,运行nginx
在这里插入图片描述
按ctrl +pq后,输入ps -ef后,可看到nginx已经在运行了。
在这里插入图片描述
运行docker ps后可看到将容器的80端口映射到了主机的32768端口,
注意:IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。 在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由
可以通过docker port docker top这些命令看端口映射及进程。
在这里插入图片描述
运行之后使用curl命令,查看是否正常:
curl http://127.0.0.1:32768
返回如下:
在这里插入图片描述
表示正常,也可以在Ubuntu的浏览器中访问:
在这里插入图片描述
或者查看容器的ip地址,在Ubuntu系统浏览器访问容器,ctrl+pq退出容器,输入docker inspect 容器名/容器ID
在这里插入图片描述
在这里插入图片描述
如下,可得到相同的结果
在这里插入图片描述
容器的80端口默认不写。当把该容器stop之后,再启动起来,则这个容器的ip地址会被重新分配,再curl原来的地址就不能用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值