1. 安装Docker
三种方式安装Docker
1. Extras Repository
CentOS-6.2.32支持Docker,红帽以补丁方式补充。有很多不稳定因素,此处选用CentOS7。
自带的有版本太老,自行搜索安装方法。
2. 清华镜像安装
Extras-repository默认是启用的。
docker-ce.repo:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
复制上述文件,下载到 yum.repos.d 文件夹中。
更改下载下来的repo文件,使其下载镜像走清华镜像。
1 | vim docker-ce.repo |
发现它走的还是 docker 网站,速度非常慢。
找指定版本:
从地址栏可以看到,只要更改源下载目录即可。
https://mirrors.tuna.tsinghua.edu.cn/docker-ce 这个是地址栏上截取到 linux的父目录替换docker-ce.repo即可。
vim中使用命令:
1 | :%s@待替换字符串@新字符串@ |
替换后效果如下图:
验证比较看是否出错:
1 | # Extras包 |
参考3,定制镜像加速器。
3. 阿里云镜像加速器参考文章(推荐)
0-Docker(配置国内免费registry mirror).md
Docker程序环境:
Docker命令预备知识
1 | # 使用下面命令可以列出docker所有的子命令 |
可以看到有两类命令,一类是Management Commands ,一类是 Commands。
这两个子命令集合可以理解为是新老命令。
为了兼容老的命令,如下举例:
1 | # 如创建容器 |
建议以后使用新的分组管理的命令。
查看docker-client-version版本
1 | docker version |
docker info 查看详细信息
最后一项说明加速器生效。
2. Docker常用操作
下面图中给出的还是老命令,没有带中间分组。
1. 镜像有关操作
1. 搜索镜像 docker search
docker search nginx
以Nginx为例,去 dockerhub 搜索nginx,Tags标签下有不同的docker发行版本
Nginx可以被Ubuntu/CentOS安装,也可以被其他的小发行版本安装,alpine是用来构建非常小的镜像的微型发行版本,可提供程序运行的基础环境,但体积非常小,缺乏生产需要的一些工具,所以一般都是自己定制镜像。
2. 下载镜像 + 显示镜像 + 删除镜像
下载+显示
1 | # 两套方法都可以 |
可以在下载一个busybox为例,再演示一次
下载+显示
1 | # 不加标签,默认是latest |
删除
1 | # 两个都可以 |
3. 容器有关
1 | docker container --help |
显示网络
1 | docker network |
容器启动时如果不指定网络,默认在docker桥上。
以启动busybox为例,创建一个首页并访问它
1 | # 新建并启动busybox容器,取名为 b1,交互式访问。 |
1 | ps |
在另外一个终端内,访问启动起来的busybox
1 | # 查看busybox是否已经起来 |
1 | # 停止busybox |
以启动nginx为例,并访问它
1 | # -d 以后台方式运行 |
以启动redis为例,并访问它
1 | # 如果本地没有当前镜像,会去下载 |
要访问redis需要有客户端,我们可以绕过容器的边界访问它。
1 | docker exec -it kvstor1 /bin/sh |
查看日志
1 | docker logs web1 |
docker event state
3. Docker镜像基础
Aufs
docker info 查看容器镜像系统鞥
Docker Registry
Docker Registry分类
Registry(repository and index)
云原生
面向云环境运行程序,调用云系统本身既有的功能。为了云计算环境而生。
Docker Hub
*docker pull
默认从docker hub拉取镜像,我们也可以从其他第三方库拉取镜像,如:quay.io。
不指定端口,默认是443,即HTTPS默认端口。
1 | docker pull quay.io/coreos/flannel:v0.10.0-amd64 |
Namespace
4. 镜像相关操作
1. 基于容器制作镜像 docker commit
举例:将busybox中新添加的 index.html 这个可写层作为镜像,基于这个镜像,每次启动,都有了 index.html 页面。
容器启动后,添加自己的变更,不能关闭容器,可以另起终端,制作镜像。
1 | # 基于运行时容器制作镜像,可能容器还在产生新的内容,加上-p 即commit时暂停容器 |
commit之后打标签
1 | docker tag --help |
再打标签
1 | docker tag haoransun/httpd:v0.1-1 haoransun/httpd:latest |
可以看到这两个镜像的 ID是一样的,删除一个镜像,只要他的引用计数不为0,就会一直存在。
1 | # untagged |
commit时打标签
镜像定义了基于此镜像启动容器后默认要运行的程序(Cmd)。
1 | # 查看要运行的Cmd |
busybox
nginx
期望容器运行后,不再运行默认的shell,而是运行我们指定的命令。
1 | # -a 添加作者+邮箱(前提是本地有这个邮箱文件) |
1 | # 启动容易 |
2. 推镜像到docker hub
将制作好的镜像push到自己的docker hub仓库内
创建一个httpd仓库
推的时候要使用 docker login 登录
1 | docker login -u haoransun |
docker hub 可以查看
3. 推镜像到阿里云
推送到阿里云镜像仓库
点击管理,看到打标签要以 registry.cn-hangzhou.aliyuncs.com/haoransun/httpd
开头
1 | docker tag haoransun/httpd:v0.2 registry.cn-hangzhou.aliyuncs.com/haoransun/httpd:v0.2 |
设置登录镜像仓库的密码,不是登录阿里云的密码
1 | docker login --username=haoransun registry.cn-hangzhou.aliyuncs.com |
网页查看
4. 镜像的导入导出
node1制作了镜像,node2也想要这个镜像。
通过docker hub 或 阿里云 都可以,但还是太麻烦,只是为了做测试用。
可以将做好的镜像打包,在另外一个node上用就ok。
1 | # save 打包,-o 指明打包到那个路径 |
1 | docker load -i myimages.gz |