Docker学习笔记

本文详细介绍了Docker的基础知识,包括容器、镜像、仓库的原理和概念,以及在Ubuntu和Windows上的安装过程。还涵盖了Docker的使用,如启动、停止和重启容器,部署静态网页,端口映射以及Nginx的配置。同时,文章也讨论了Docker在Linux内核特性上的依赖,如Namespace和Control Groups。
摘要由CSDN通过智能技术生成

容器

一种虚拟化方案
操作系统级别的虚拟化
只能运行相同或相似内核的操作系统
依赖于Linux内核特性

Docker基本组成

Ch0NM4.png

Docker Image 镜像

容器的基石,一个层叠的文件系统

Docker Container容器

通过镜像启动,就会产生一个可写层,这个可写层就是容器产生的内容。而另外下面的几个文件系统就是之前镜像提供的东西,这两样东西相结合就形成了容器。容器还有一个重要的内容就是写时复制(copy on write)

Ch0UsJ.png

Ch0aL9.png

Docker Registry 仓库

公有 私有 Docker Hub

Docker运用Linux的内核特性

Namespace 命名空间
Control groups(cgroups)控制组 —>用来分配资源

Namespace
对于编程而言,是一种封装=代码的隔离,对于操作系统而言是一种系统资源(进程,网络,文件系统)的隔离

Ubantu中安装Docker

首先还是得检查
1.内核版本

   uname -a

2.检查Device Mapper

  ls -l /sys/class/misc/device-mapper

下面就是安装了
1.Ubuntu维护的版本

sudo apt-get update
  sudo apt-get install docker.io

注意这里是docker.io

2.Docker维护的版本,推荐安装Docker维护的版本,因为它的版本较新,以前那一种利用脚本安装的好像出了点问题 这部分有点烦人,按照官方文档去实现下载不太行,总是报错,最后就参考了一波下面这个网址的安装方法,终于装好,mmp,这里我用的是Ubuntu16.04 64位版本
http://www.runoob.com/docker/ubuntu-docker-install.html

sudo docker run hello-world 检测一下是否安装好,安装好就会出现一定的回显

如果不想一直都要输入sudo,也就是当要以非root用户可以直接运行docker时,需要执行 sudo usermod -aG docker 你的用户名 命令,然后重新登陆,记得要注销,不然还是会报错

对比一下版本确实docker维护的版本较新,^_^
C5cTN4.png
C5cbC9.png

开启守护进程

 sudo service docker start

对于Docker服务其他的相关命令

 sudo service docker stop
 sudo service docker restart

运行第一个容器命令

sudo docker run ubuntu echo 'hello'

如果想要其他版本的Linux的话把中间的Ubuntu改为centos即可,还可以改版本,例如sudo docker run ubuntu:15.10 echo "Hello world"

Windows下的安装

这是要下载专门的Docker for Windows这个东西上面的网址也有提及到,win10就专门利用的这个东西,但win7 还有 win8 的就用的是docker toolbox,Windows安装很容易出毛病,最典型的是如果你Win10上有虚拟机,开了Docker两者就会不兼容,因为Docker得开启win10自带的Hyper-V虚拟化,跟虚拟机会产生冲突,后续每次启动关闭都得重启,别问我为什么知道。。因为我都试过了。。-_-||

下面的过程我就默认直接是非root用户使用docker了

Docker使用

docker run ubuntu echo 'hello'

在输出hello world之后镜像也就关闭了,无法交互
如果想要交互界面的话,看下面

运行交互式的容器

docker的两个参数 -i -t,让docker运行的容器实现bash交互

-t:在新容器内指定一个伪终端或终端。
• -i:允许你对容器内的标准输入 (STDIN) 进行交互
   docker run  -i -t ubuntu /bin/bash

命令exit就可以退出交互式界面了,并且是直接把容器退出的

确认容器是否在运行,可以通过 docker ps [-a] [-l]查看,没有参数默认查看运行容器的进程

-a: all    可查看运行过的容器
-l: latest
停止容器

我们使用 docker stop 命令来停止容器:

  docker stop 容器ID号

停止之后记得docker ps一波查看是否真正关闭

自定义容器名字

 docker run --name 自定义名 -i  -t IMAGE /bin/bash

删除停止的命令

 docker rm 容器名
重新启动停止的容器
    docker start -i 容器名或ID
  -i参数指的是是否要交互界面

查看某个容器更加详细的信息

docker inspect 容器唯一ID或名字

启动容器(后台模式/守护式容器)

一般用于开启服务,没有会话,长期运行
怎么理解这个东西,看下面

尝试下面的命令,然后docker ps发现该容器仍在后台执行

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

C52ySs.png
此时我们输入docker logs 容器ID
会显示容器内的标准输出
C52wTS.png

一般的话我们在运行一个交互式的bash的时候

 docker run -i  -t ubuntu /bin/bash

用的是 ctrl+Pctrl+Q键去退出这样就会在后台一直运行

要想回去怎么办?运用附加命令

 docker attach 容器ID或者名字

C5Rk0f.md.png

我们还可以直接用-d参数启动docker容器

docker run -d ubuntu [COMMAND][ARG…]  也就是这部分一开头的例子

这里再来详细讲下docker logs命令

 docker logs [-f][-t][--tail] 容器ID/名字
-f可以理解为是动态追踪
-t是显示时间 还有其他参数可查看官方文档  

一般我都是不带参数的。。。

查看容器内的进程
 docker top 容器ID/名字 
在容器内执行新的进程
docker exec [-d] [-i] [-t] 容器名 [command]
停止守护式容器的方法
1 docker stop 容器ID/名字    
2 docker kill 容器ID/名字

区别在于第一种是等待容器内进程结束再关闭,另外一种是直接结束容器

想了解更多使用docker帮助文档

 man命令
如
man docker-run
man docker-top
...

Docker中部署静态网页

设置容器的端口映射
 docker run   [-P][-p]
-P: 对容器所有的端口进行映射
-p: 指定映射哪些容器的端口

下面是几个例子

containerPort 只指定容器的端口,宿主机的端口随机映射
docker run -p 80 -i  -t /bin/bash
hostPort:ContainerPort 同时制定宿主机端口以及容器端口
 docker run -p 8080:80 -i -t /bin/bash
 ip:containerPort 指定ip和容器的端口
 docker run -p 0.0.0.0:80 -i -t /bin/bash
 ip:hostPort:ContainerPort 同时制定ip以及宿主机端口以及容器端口
 docker run -p 0.0.0.0:8080:80 -i -t /bin/bash
Nginx部署流程

先运行一个带端口映射的容器并命名为web

docker run -p 80 --name web -i -t ubuntu /bin/bash

然后安装Nginx

apt-get install -y nginx

安装Vim编辑器 ,主要是为了方便修改东西

apt-get install -y vim

新建一个工作目录

    mkdir -p /var/www/html

切换到工作目录下,编辑一个静态页面

  cd /var/www/html
 vim index.html

自己喜欢写点啥就写啥吧

查找一下Nginx文件的位置

 whereis nginx

查看etc下面的Nginx

ls /etc/nginx

进去里面的sites-enabled目录里面,发现一个default文件打开编辑

ls /etc/nginx/sites-enabled
 vim default

改变root的值为你的网页目录

root: /var/www/html

开始运行nginx

 nginx

ps -ef 查看相关进程是否启动

让它继续后台运行
可以用下面几个命令查看端口号

 docker ps 
 docker port 容器ID/名字
 docker top 容器ID/名字

然后再curl一波就知道,是否安装成功

curl 127.0.0.1:32770

也可以本机的浏览器里面打开。。

还可以用容器的ip地址去实现在本机浏览器的浏览

 docker inspect 容器ID/名字

可以看到容器ip地址和映射端口

“IPAddress”: “172.17.0.2”
“HostPort”: “32768”

访问

curl http://172.17.0.2

这就不需要指定端口号了,用默认的80端口就可以访问
停止该容器,然后再次启动

我们需要注意一旦我们关闭并且重新启动的话,docker分配的映射ip以及端口地址都会改变,需要重新查看

镜像标签

TAG 
 ubuntu:latest
 ubuntu:14.04 

啥都不写默认latest标签

删除镜像

 docker rmi 镜像名:标签/ID

搜索镜像

 docker search 

拉取镜像

 docker pull 你搜到的镜像名
docker push命令可以将某一个镜像发布到官方网站。

利用DockerFile构建镜像 ,这个东西有时候还是很好用的

 docker build -t='自定义名字' DockerFile

欢迎大家多来踩踩我的博客:0verwatch.top

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值