Docker 简单笔记(一)
类似jvm一样直接跑在系统上提供所有依赖,配置。快速部署应用。(Linux container技术的封装后。“pxe—>cobbler”)
主机级别的虚拟化:
1.直接在硬件上安装虚拟化软件
2.在一个特定系统上使用虚拟化(kvm xen)
docker可以使一个完整的,被隔离的裸机( container)跑在系统上。namespace+cgroups这两种机制来实现虚拟化。
虚拟机的隔离性:
linux 内核3.8+默认原生支持这6种namespace名称空间。也就是centos7以后。
1.UTS #主机名和域名
2.MOUNT #文件系统树
3.IPC #信号,消息队列。
4.PID #进程树都有独立的“init”
5.USER #用户
6.NETWORK #网络设备
资源分配
内核通过cgroeps把系统资源(bikio、cpu、memory等)分配给各container使用。
namespace+cgroups这两种机制来实现虚拟化。
docker 架构
c/s架构
Containers:容器
Images:镜像、映像
Registry:Image Repositories
docker客户端传递指令———>服务端监听,通过镜像来创建实例。<————registry提供镜像仓库。
registry:
提供镜像
提供用户认证
风格:
nginx:latest
nginx:1.0
镜像和container关系:
镜像就像可执行文件(rm)他不变。
container就像rm开启的进程,可以rm不同的文件,基于rm命令。
docker管理的对象(增删改查):
image、container、network、volumes、plugins等
docker安装
1.内核3.10+
2.extras基本源内会提供一个老版本的
1.下载repo:
wget -O /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
由于网路原因,可以把里面的url改成清华大学源相应的位置.
直接截取了一部分:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
:%s$https://download.docker.com/$=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/$
2.安装docker #此处叫docker-ce
[ZW@localhost ~]# yum install docker-ce
3.修改配置文件:
配置主文件:/etc/docker/daemon.json
#默认不存在,可以手动建立编辑:
#添加加速器,k-v风格的数组,可以添加多个。
[ZW@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
4.重启服务即可
docker简单使用
查看docker当前版本:
[ZW@localhost ~]# docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:03 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:25:29 2018
OS/Arch: linux/amd64
Experimental: false
docker 常用命令:
docker search XXX 搜索镜像
docker pull XXX:YYY 下载镜像
docker rm XXX:YYY 删除镜像
docker image ls 列出镜像
docker create [OPTION] IMAGE 创建一个容器
docker run [OPTION] IMAGE 创建并且运行一个容器
#-it 创建出一个交互式界面(镜像有的话)
#-name 指定名字
#-d 后台
docker pause/unpause 暂停/开启一个服务
docker kill 相当于kill -9
docker start/stop
docker exec [option] CONTAINER 在容器内执行操作
docker logs CONTAINER 查看日志
例子:
[ZW@localhost ~]# docker run --name tom nginx:latest
运行一个容器;他会执行镜像默认的命令 “ docker info | grep cmd ” 可以看到
[ZW@localhost ~]# docker exec -it tom /bin/sh
# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
#
在容器内执行操作;
[ZW@localhost ~]# docker inspect tom
查看容器信息;
[ZW@localhost ~]# docker logs tom
172.17.0.1 - - [21/Oct/2018:05:48:40 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
查看容器日志;
docker状态转换结构:
docker镜像基础操作:
docker镜像含有启动容器文件系统和内容的。最底层为bootfs引导容器启动有BootLoader(grub?lilo?)和kernel,上面为rootfs是文件系统,不过和centos刚启动时一样默认是只读的,如果想要修改会再抽出一层进行读写,在容器上每启动一个服务或者配置其他功能都会抽出独立的一层进行修改,然后挂载使用(分层构建,联合挂载)。docker container rm 时那些可写层会被删除。
默认搜索或者下载镜像docer deamon会去找docker hub。
所以docker文件系统一定得用特殊的文件系统。
Aufs:乌班图在用
overlay:centos在用,构建在xfs上的二级文件系统。信息里可以看到
[ZW@localhost ~]# docker info | grep -A 3 Storage
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
registry=repository+index
公共registry---->修改镜像---->推送到自己的registry---->下载使用
docker镜像制作
A:基于已有的容器制作 commit
B:docker file 用“build”
docker commit使用:
[ZW@localhost ~]# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-p 暂停(pause)
-c 修改默认运行的指令
-a 作者
例子:
[ZW@localhost ~]# docker run -it --name AA busybox
/ # echo "AA" > a.txt
/ # ls
a.txt bin dev etc home proc root sys tmp usr var
/ # exit
[ZW@localhost ~]# docker commit AA
sha256:90b6168c4e41d87299bfc631041c94ddb561e3845b0397f3d7d23a6d8acf9df7
[ZW@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
90b6168c4e41 About a minute ago 1.15MB
nginx latest dbfc48660aeb 5 days ago 109MB
新制作的没有仓库和标签。 #一个镜像可以有多个标签(软链接?)删除 一个标签不会真的删除。
制作标签:
docker tag hub账号/仓库名:标签
[ZW@localhost ~]# docker tag 90b6168c4e41 haha:hehe
[ZW@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
haha hehe 90b6168c4e41 10 minutes ago 1.15MB
也可以制作时修改命令及标签(命令可以在容器里–help一下)
docker commit -a “ZW” -c “CMD [”/bin/httpd","-f","-h","/data/html"]" web hehe:web
对于自己镜像管理可以推送到网上,也可以直接导入导出。
推送镜像push方法:
1.登录hub账号
[ZW@localhost ~]# docker login -u ZW
Password:
2推送,会吧仓库全推到hub上
#docker push 账号/仓库 注意本地自己建立的名字要和网上的一样
[ZW@localhost ~]# docker push ZW/haha
如果不是hub上,那就需要把网址路径写全。假设是阿里云
地址是https://dev.aliyun.com/search.html
可以注册一下,打开管理中心,创建镜像仓库。会给操作指南。
登录 登录密码是单独设定的registry密码
[ZW@localhost ~]# docker login --username=郑伟的号吧 registry.cn-qingdao.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
修改标签:
[ZW@localhost ~]# docker tag hehe:zw2 registry.cn-qingdao.aliyuncs.com/zhengw/haha:latest
推送
docker push registry.cn-qingdao.aliyuncs.com/zhengw/haha:latest
然后可以登录验证
镜像导入导出方法:
直接打包去另外机子上使用
打包:
[ZW@localhost ~]# docker save haha:hehe -o image.gz
[ZW@localhost ~]# ls
anaconda-ks.cfg image.gz
使用:
[ZW@localhost ~]# docker load -i image.gz
是时候吃饭了。。。。