docker 重要概念

流行的自动化运维平台:
Ansible / Git / Jenkins / Docker

平台化、自动化、分类(配置类、搭建类)、容器化

在物理机上安装docker并启动
# yum install -y docker


传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所
需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有
进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Docker重要概念:镜像(Image)、容器(Container)、仓库(Repository)
镜像采用了AUFS(联合文件系统),采用了分层结构,镜像是只读的,基础镜像一旦构建完成
就不能再改了,但是可以在它上面封装一个层次,把改动的内容放到高层中。
容器:相当于是镜像的一次执行,容器也相当于是镜像可读写副本。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
不要假定容器会永远运行,而应该假定容器随时可能出现故障,出现故障后,也不会再去修复它
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡

一个 Docker Registry中可以包含多个仓库(Repository)。每个仓库可以包含多
个标签(Tag);每个标签对应一个镜像。
我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。
如果不给出标签,将以 latest 作为默认标签。

容器、镜像的使用
# docker run busybox echo 'Hello World'
# 如果本机没有busybox:latest,将会到仓库中下载,然后启动容器,
# 容器运行echo命令后,退出
# 因为容器只是宿主机上的一个进程,echo是个临时进程,运行后就退出,所以容器也就结束了
# 因为容器只是个进程,不是一个完整的系统,所以如果希望它一直处于运行状态,就必须
# 使容器内的进程在前台运行,不要让前台程序退出

[root@room8pc16 day06]# docker run -it centos bash
如果执行exit退出,容器又停止运行了,如果希望退回到宿主机的shell但不要停掉容器,
可以按ctrl+p/ctrl+q

进入容器的方法:
(1)不启动新进程
[root@room8pc16 day01]# docker attach 831b
(2)启用新进程
[root@room8pc16 day01]# docker exec -it 831b bash


创建镜像的方法:
1、基于原始镜像启动容器,修改容器,完毕后commit成新镜像。不推荐 !!!
2、使用dockerfile
(1) 每个dockerfile的指令都会增加一层,所以要注意书写,不要出现太多层次
[root@room8pc16 day01]# mkdir cent1
[root@room8pc16 day01]# cd cent1/
[root@room8pc16 cent1]# vim dockerfile
FROM centos
RUN echo 'hello' > /tmp/hi.txt
RUN echo 'workd' > /tmp/abc.txt
[root@room8pc16 cent1]# docker build -t centos:v1 .
[root@room8pc16 cent1]# docker history centos:v1 # 新镜像增加了两层
上面dockerfile应该改为以下样式:
FROM centos
RUN echo 'hello' > /tmp/hi.txt
&& echo 'workd' > /tmp/abc.txt
[root@room8pc16 cent1]# docker build -t centos:v2 .
(2) 构建上下文
默认情况下,构建镜像时,docker会将当前目录所有内容拷贝到context上下文环境中,在
dockerfile中的当前目录(.)实际上指的是context中的当前目录。
(3) 构建时,应该创建一个空目录,将所需文件拷贝到空目录中,然后构建。
(4) 常用指令FROM / COPY / CMD / ENTRYPOINT / RUN / EXPOSE


指定容器的name和主机名
[root@room8pc16 day01]# docker run -it --name centos1 -h mycent centos bash


在物理机上搭建私有仓库
根据CLOUD最后一天的案例搭建私有仓库,再将kubernetes目录中的images导入到私有仓库
1、
[root@room8pc16 day01]# vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.4.254:5000"]
}
[root@room8pc16 day01]# systemctl restart docker
[root@room8pc16 day01]# docker run -d -p 5000:5000 registry
2、
[root@room8pc16 kubernetes]# tar xvzf images.tar.gz
[root@room8pc16 kubernetes]# docker load < images/mysql.tar
3、
[root@room8pc16 day01]# docker tag mysql 192.168.4.254:5000/mysql
[root@room8pc16 day01]# docker push 192.168.4.254:5000/mysql
4、查看
[root@room8pc16 day01]# curl http://192.168.4.254:5000/v2/_catalog

原文地址:https://www.cnblogs.com/lsgo/p/10684274.html