Docker
. 一、容器
容器是一种基础工具;泛指任何可用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;
人类使用容器的历史至少有十万年,甚至有数百万年的历史
如:瓶、罐、箱、桶、袋
. 二、LXC
主机级虚拟化
Type-I:
Type-II:VMware、kvm、zen
Linux Namespace:
UTS:以名称空间为单位进行隔离,在同一个内核上创建多个名称空间,每个空间可以有单独的名称
Mount:也是名称空间,可以把挂载的文件系统切分为多个
IPC:内核级管理的资源,可以再内核切换为Docker,每一个里边的进程可以IPC通信,但是不能跨边界
PID:不同用户的进程就是通过pidnamespace隔离开的,且不同 namespace 中可以有相同PID
User:每个container可以有不同的 user 和 group id, 也就是说可以以container内部的用户在container内部执行程序而非Host上的用户。
Net:有了 pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过netnamespace实现的
nmp
machine + swarm + compose
mesos + marathon
kubernetes à k8s
. 三、Docker 的安装使用
安装
清华大学镜像网源:wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@C7-1 yum.repos.d]#vim docker-ce.repo
%s@https://download.docker.com/@https://mirrors.tuna.tsinghua.edu.cn/docker-ce/@g # 下载后是docker的官方源,修改为清华大学源
yum install docker-ce # 安装
配置文件
docker-ce:/etc/docker/daemon.json
docker镜像加速
docker cn
阿里云加速器
中国科技大学
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
配置加速
[root@C7-1 ~]#mkdir /etc/docker
[root@C7-1 ~]#vim /etc/docker/daemon.json
docker
docker version
docker info
常用操作
docker search:搜索
docker pull:下载到本地
[root@C7-1 ~]#docker pull quay.io/coreos/flannel:v0.11.0-arm64
docker images:
[root@C7-1 ~]#docker image pull nginx:1.14-alpine # 下载镜像
[root@C7-1 ~]#docker image ls # 查看下载的镜像
docker container:
docker container run # 创建并启动
-t:打开tty终端
-i:交互式
--name:名字
--network:网络
--rm :停止容器后直接删除
-d --detach:后台
docker container exec
docker commit # 制作镜像
-a --author string:作者
-c --change list:修改原有基础镜像的指令
-p --pause:现将容器暂停
docker tag # 打标签
docker push
docker login
-u,--username 用户名 registry.cn-hangzhou.aliyuncs.com 后便可以跟服务器地址
docker logout
docker save 导出
-o:名字
docker load 导入
docker network
docker network ls # 查看网络
[root@C7-1 ~]#docker inspect web1
使用例子
[root@C7-1 ~]#docker pull busybox # 下载 [root@C7-1 ~]#docker image pull nginx:1.14-alpine [root@C7-1 ~]#docker container run --name b1 -it busybox:latest # latest是标签 [root@C7-1 ~]#docker container run --name web1 -d nginx:1.14-alpine # 后台运行 [root@C7-1 ~]#docker container run --name kvstor1 -d redis:4-alpine # 如果没有则会从网络中下载 [root@C7-1 ~]#docker container exec -it kvstor1 /bin/sh # 进入容器的终端
联合挂载使用到的文件
Aufs(advanced multi-layered unfication filesystem):高级多层统一文件系统,Aufs是之前UnionFS的重新实现,由Junjiro Okajima开发
Storage:现在Centos7使用的就只这种文件系统,overlay2需要建立在也已经用的文件系统上,所以在Cetno7中,前端使用overlay2后端使用xfs
Registry
由某特定的docker镜像的所有迭代版本组成的镜像仓库
每个仓库明可以包含多个tag,每个tag对应一个镜像,每个镜像可以对应多个tag
制作镜像:docker commit
生成途径
dockerfile
基于容器制作
Docker Hub automated builds
居于容器制作:
[root@C7-1 ~]#docker run --name b1 -it busybox # 制作一个容器 / # mkdir -p /data/html # 创建目录 / # echo "<h1>busybox httpd server.</h1>" > /data/html/index.html # 创建主页文件 # 再开一个终端,应为如果退出的话容器就会停止 [root@C7-1 ~]#docker commit -p b1 # -p暂停容器 [root@C7-1 ~]#docker image ls # 查看 REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 7cfd827c15d4 6 seconds ago 1.2MB [root@C7-1 ~]#docker tag 7cfd827c15d4 p-pp/busybox_httpd:v0.1-1 # 打标签 [root@C7-1 ~]#docker image ls # 打完标签后查看 REPOSITORY TAG IMAGE ID CREATED SIZE p-pp/busybox_httpd v0.1-1 7cfd827c15d4 2 minutes ago 1.2MB [root@C7-1 ~]#docker tag p-pp/busybox_httpd:v0.1-1 p-pp/busybox_httpd:latest # 打一个新的标签 [root@C7-1 ~]#docker image ls # 再次查看,可以看到两个,Id是一样的 REPOSITORY TAG IMAGE ID CREATED SIZE p-pp/busybox_httpd latest 7cfd827c15d4 4 minutes ago 1.2MB p-pp/busybox_httpd v0.1-1 7cfd827c15d4 4 minutes ago 1.2MB [root@C7-1 ~]#docker commit -a "Mrxuan<www.p-pp.cn>" -c 'CMD [ "/bin/httpd","-f","-h","/data/html" ]' -p b1 p-pp/busybox_httpd:v0.2-1 [root@C7-1 ~]#docker run --name p2 p-pp/busybox_httpd:v0.2-1 # 再打开一个终端,使用命令查看ip [root@C7-1 ~]#docker inspect p2 "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", [root@C7-1 ~]#curl 172.17.0.3 <h1>busybox httpd server.</h1>
将自己的docker镜像保存至dockerhub:docker push
申请账号:https://hub.docker.com/signup
示例:
[root@C7-1 ~]#docker login -u dong9205 #登录,用户名为dong9205 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 # 登录成功的提示 [root@C7-1 ~]#docker image ls # 名字要和创建的仓库名一致 REPOSITORY TAG IMAGE ID CREATED SIZE dong9205/busybox v0.2-1 8f6be032912d 31 minutes ago 1.2MB dong9205/busybox v0.1-1 7cfd827c15d4 About an hour ago 1.2MB [root@C7-1 ~]#docker push dong9205/busybox # 像dockerhub推送
镜像推到阿里云仓库
注册阿里云账号,之后打开网站:https://cr.console.aliyun.com,或https://dev.aliyun.com
[root@C7-1 ~]#docker tag dong9205/busybox:v0.2-1 registry.cn-hangzhou.aliyuncs.com/dong9205/busybox:v0.2-1 #标签更改一致 [root@C7-1 ~]#docker logout # 退出dockerhub的账号 [root@C7-1 ~]#docker login --username=socket轩 registry.cn-hangzhou.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 [root@C7-1 ~]#docker push registry.cn-hangzhou.aliyuncs.com/dong9205/busybox # 推送
镜像的导入导出
[root@C7-1 ~]#docker save -o myimages.gz dong9205/busybox:v0.2-1 dong9205/busybox:v0.1-1 [root@C7-1 ~]#docker load -i myimages.gz