Docker:
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。由于使用LXC来创建和管理虚拟机不方便。
在 LXC 的基础上 Docker 进行了进一步的封装,就是用户创建容器的一个工具。让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
Docker容器的六种模式空间:名称空间;用户空间;文件系统空间;网络空间;进程id的空间;传输空间
Docker 容器只是为了运行单个应用程序的。(管理方便高效)
LXC: LinuX Container (Linux容器)
chroot,根切换;
namespaces:名称空间
CGroups:控制组
简单使用:
lxc-checkconfig:
检查系统环境是否满足容器使用要求;
lxc-create:创建lxc容器;
lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:启动容器;
lxc-start -n NAME -d
Docker的使用和安装:
配置yum仓库:
首先要配置extras源:(去官网查和本机系统所匹配的源:如系统是centos7.4然后源也必须是7.4的)
vault.centos.org (centos官网地址)
[extras]
name=extras
http://vault.centos.org/7.4.1708/extras/x86_64/
gpgcheck=0
在配置docker源地址:(可以去阿里云上去查找)
[docker]
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
最后还需要配置epel源,应为docker包依赖epel源里的包。
yum install docker-ce (安装docker包)
配置文件:/etc/docker/daemon.json (文件夹和文件都需要自己建立)
添加镜像加速器:
vim /etc/docker/daemon.json
{
"registry-mirrors": [“https://registry.docker-cn.com”]
} (添加此行)此为官网的镜像加速器,还可以使用阿里云的镜像加速器。
systemctl start docker.service (启动服务)
docker命令:
Containers:管理容器
Images:管理镜像、映像
docker version (查看版本信息)
docker info (查看详细信息;运行的容器个数;暂停的个数;镜像个数等)
镜像的管理:
docker search:(搜寻官网上的docker镜像,)例如:docker search nginx (搜寻nginx的镜像)
docker image pull:(下载docker镜像,从官网上)例如:docker pull nginx (下载搜索的nginx镜像)
docker image list :(列出本地所有的docker镜像)
docker image list nginx (只列出本地nginx版本的镜像)
docker image rm : (删除下载下来的本地镜像) 例如:docker image rm nginx:1.14-alpine (镜像+标签)
容器的创建:(如果本地没有镜像文件,启动时会自动到官网上下载)
docker create:(创建docker容器)例如:docker create -it –name b1 busybox:latest (只是busybox需要添加-it的命令来创建)其他容器的创建:docker create –name b2 nginx
docker start:(启动docker容器) docker start -i b1 :(b1:为创建容器的自定义的名称;-i 也只是busybox镜像启动的所添加的选项;启动不成功可以通过-i -a这两个选项来调节,)其他容器的启动:docker start b1
docker run:(直接创建运行docker容器);如果本地没人镜像文件docker会自动去官网上查询并下载。
例1 :docker run –name b1 -it busybox:latest (b1为自定义的容器名称;-it 为开启交互式界面,既打开容器的界面,busybox:latest :为打开的镜像名称和标签号)
例2: docker run –name web1 -d nginx (运行nginx的镜像;-d 不要运行在后台,因为此docker容器只有一个程序;如果运行在后台,容器上没有运行的程序,默认会终止此容器)
例3 :docker run –name red1 -d redis:4-alpine (创建一个redis镜像,版本号不指定,默认安装的时latest,由于本地没有镜像,会去官网上自动去下载)
下载下来的镜像存放到本地,可以使用:docker image ls 来查看。
docker container ls -a (查看处于停止状态下的docker容器)
交互式的连接一个已经启动的容器:
-i:–interactive,交互式;
-t:Allocate a pseudo-TTY
docker exec -it red2 /bin/sh (以交互式的方式进入到已经开启的容器里面去)
docker ps:(列出容器的详细信息在运行的容器)或者:docker container ps docker container ls 等命令都可以
docker ps -a (列出所有容器,包括运行的和不在运行的)
docker image ls (列出本地的所有的镜像文件)
docker restart:(重新启动docker容器) docker restart b1 (b1:为创建容器时定义的名称)
docker stop:(停止docker容器)docker stop b1 (b1:为创建容器时定义的名称)
docker kill:(强行停止docker容器)docker kill b1 (b1:为创建容器时定义的名称)
docker rm (删除创建的容器) docker rm b1 (b1:为创建容器时定义的名称)
Docker镜像:
官网上查找镜像及版本号(tags)
在官网上搜寻docker的镜像文件。 https://hub.docker.com/(官网搜寻地址)
docker pull nginx:1.14-alpine (后面为版本信息,在官网啊地址上搜寻的结果)如果不加版本信息:
docker pull nginx 则下载下来的默认标签为latest(最新的)的版本的。
docker image list (查看已经下载下来的镜像)
Docker镜像的原理及组成
Docker镜像含有启动容器所需要的文件系统及其内容,因此, 其用于创建并启动docker容器 。
结构:
采用分层构建机制,最底层为bootfs,其之为rootfs
bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完 成后会被卸载以节约内存资源;
rootfs:位于bootfs之上,表现为docker容器的根文件系统;
传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式, 完整性自检完成后将其重新挂载为读写模式
docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂 载一个“可写”层;
位于下层的镜像称为父镜像(parent image),最底层的称为基础 镜像(base image)
最上层为“可读写”层,其下的均为“只读”层
Registry (docker镜像仓库)
在下载镜像时,如果不指定路径,默认是下载Docker Hub官方的镜像仓库里的镜像文件。
如果也没有指定tags(版本号);则默认下载latest(最新的)的版本。
Registry用于保存docker镜像,包括镜像的层次结构和元数据
Repository :由单个类型的docker镜像的所有迭代版本组成的镜像仓库 ;在镜像仓库之下。(例如:nginx;下面有多个版本的镜像文件,都是nginx的标签;但他都是nginx的镜像文件)
一个 Registry是由多个Repository镜像仓库所组成的。
https://quay.io/ (另一个镜像网站)
如果在此网上上下载格式为:docker pull quay.io/coreos/flannel:v0.10.0-arm64
(quay.io:官网地址:/coreos/flannel ;下图中所搜寻的flannel的前缀;:v0.10.0-arm64:版本号)
镜像的制作:
1 . 基于已有的容器,经过修改后,在制作后镜像:
docker run –name b1 -it busybox:latest (启动一个容器)
进去之后添加一个html的文件:
mkdir -p /data/html
cd /data/html/
vi index.html
hello
不能将容器关闭或者退出,在容器运行状态下,另外开启一个linux的终端界面:
docker commit -p b1 (基于b1做新的镜像文件)由于此处并没有命名所以此镜像只有id号而没有名称:
docker tag 2e8b205a2902 magedu/http:1.0 (由于刚创建的镜像没有名称和标签,使用不方便,可以创建名称和标签:创建时要使用其id号来引用)
docker tag magedu/http:1.0 magedu/http:1.1 (给同一个镜像创建多个标签)
当一个镜像有多个标签时,删除一个标签不会将镜像删除,如果只有一个标签了,删除了最后一个标签就会将镜像删除了。
docker image rm magedu/http:1.1 (删除其中一个镜像标签)
docker inspect nginx (查看具体的镜像里的内容)
docker run –name ttt -it magedu/http:1.0 (开启新建的镜像)
将镜像推送到官网:
首先要在官网上注册一个个人的账号:https://hub.docker.com/
登陆后创建一个仓库:Create Repository
magedu/httpd (仓库的名称)
登陆:
docker login -u lvchenyang (如果是推送到官网上,不用写服务器的地址;如果不是则需要写服务器的地址)
推送:
docker push magedu/httpd (如果不添加标签的化默认推送magedu/httpd;所有版本的)
推送到阿里云的个人仓库:
https://cr.console.aliyun.com/cn-hangzhou/repositories (官网)
注册账号,创建新的镜像仓库。
想要将自己的镜像推送到阿里云上要将镜像重新打上阿里云的标签
53天第3个视频里有:70分钟左右
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104294