这个系列的文章是准备深入学习和研究容器和容器编排相关技术的,当然不能免俗的先写写docker的基本操作。上一篇介绍了docker基本的启动和获取对象,这里深入的说下镜像、dockerfile、提交等相关操作吧。
首先是docker镜像的概念,第一篇文章已经介绍过关于容器的概念,docker的创新就是除了Linux基本提供的隔离等技术外带来的容器镜像的概念,容器镜像可以简单的看成一个模板,一个可以继承的模板,在已有模板提供的功能上形成容器。docker官方提供了大量的可以用的镜像当然也有第三方制作的或者开源软件官方制作的大量好用的镜像。比如centos的镜像,Ubuntu的镜像,php的镜像等。
也许有人会问为啥会有centos的镜像为啥会有Ubuntu的镜像?这和Linux下kvm虚拟机有什么区别?这里呢先简单的说下,会有专门文章介绍这块。首先不同于虚拟机,centos和Ubuntu的镜像只有目录结构,没有内核,docker和kvm最大的不同是,kvm虚拟了整个硬件,而docker没有,docker的容器和宿主机是共享一个操作系统即Linux内核的。 所谓centos镜像就是centos一个常见目录结构和基本包管理工具yum等。为啥要这样做呢?这里简单的说就是保持统一性。
废话写了一堆,看下镜像基本操作:
docker pull php:tag
获取某个tag的php镜像,从docker hub获取的,但是因为众所周知的原因国内的网络环境未必能让你我们从容获取镜像,因此有了mirror的概念,可以利用阿里云。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://u7g484go.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
我们也可以通过将自己的docker镜像提交给docker hub或者阿里云用来给别人共享或者私有使用。
sudo docker login --username=lokiewang registry.cn-hangzhou.aliyuncs.com
sudo docker login --username=lokiewang registry.cn-hangzhou.aliyuncs.com
sudo docker tag [ImageId] registry.cn- hangzhou.aliyuncs.com/lokie/dmj-api:[镜像版本号]
sudo docker push registry.cn-hangzhou.aliyuncs.com/lokie/dmj-api:[镜像版本号]
关于镜像,还有一种方式是从容器提交一个镜像,这种用法就是先在一个镜像的基础上启动一个容器,对容器进行修改后可以commit成一个新的镜像,操作如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
这是一种创建新镜像的方法,还有第二种就是通过dockerfile去用docker build进行。dockerfile可以看成构建docker镜像的脚本。先来看一个简单的dockerfile
FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py
解释下:
1.从ubuntu:15.04版本构建镜像,每个镜像都有个基础
2.将构建目录下的文件复制到镜像内app文件夹下
3.运行make命令
4.当容器运行是执行python /app/app.py
对于docker文件只要:
docker build . -t app:latest
之后在本地通过docker images命令就可以看到这个docker镜像了。
通过docker run命令可以运行docker镜像。以上就是关于docker镜像的简单操作,对于dockerfile的作用和高级用途请看官方文档。
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang