概要
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。容器是完全使用沙箱机制,相互之间不会有任何接口,容器可以理解为很小的Linux操作系统,这个操作系统中可能只有一些关键性的程序,它需要使用你的主机内核信息,里面可以运行你的应用程序。
1.Docker的安装
参照:http://www.docker.com中相关的介绍,对于linux不需要安装docker-machine,而对于windows和Mac需要安装docker-machine,原因 是docker容器的运行环境是依赖于linux内核的,所以在windows和Mac上安装docker-machine是为了安装linux虚拟机,并统一在虚拟机中执行docker命令并管理虚拟机。而对于每个系统而言需要安装docker和docker-compose(这个可以选择性安装,还是建议安装,蛮有用的)
2. Docker的基本概念和操作
2.1 Docker镜像
Docker的容器是基于镜像搭建的,所谓镜像可以理解为一些已经安装好一些服务(比如jdk等等)很小的Linux操作系统,你使用镜像的时候,镜像默认从docker hub:https://hub.docker.com上下载
2.2 Dockerfile
构造一个容器需要的最小的配置文件,一个Dockerfile例如:
#从docker hub中下载哪个镜像来构造你自己的镜像,这通常包含你的镜像中使用的一些服务
#这个地方下载了一个很小很小的linux镜像
FROM alpine
#Dockerfile的作者
MAINTAINER zhouqiang <zhouqiang@qq.com>
#需要在你的镜像中运行的命令
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
#你的容器中的服务监听的端口
EXPOSE 8080
#在你的容器中需要设置的环境环境变量名是DB,值是db
ENV DB db
#运行你的服务需要执行的命令
CMD ["go-demo"]
#将你本机的哪个文件拷贝到容器的哪个位置
COPY go-demo /usr/local/bin/go-demo
#在容器中为你的文件添加执行权限
RUN chmod +x /usr/local/bin/go-demo
2.3运行docker容器
基于上面的Dockerfile,可以先通过build生成自己的镜像go-demo:docker build -t go-demo .
然后可以基于自己的镜像生成可运行的容器,容器名称是go-demo使用的镜像是go-demo:docker run -itd --name go-demo go-demo
这时候你的服务就已经在docker中运行起来的,如果想进入你的容器可以使用docker ps、docker exec等命令
2.4有关docker-compose
docker-compose其实是简化了docker的命令操作,可以将多个容器的运行相关配置写到一个yaml文件中,然后用docker-compose来管理,yaml文件比较灵活,不再展开介绍,可以参照官网上的相关介绍
2.5创建私有的镜像仓库
基于两点需要创建私有的镜像仓库
a.你自己生成的镜像文件不想外泄,想把它放在你的私有镜像仓库而不是docker hub中
b.镜像文件放到自己的私有仓库中,内部其他机器在使用这个镜像的时候下载会很快,一般是内网会比较快
c.在构建镜像的docker-compose-local.yml文件中添加如下配置:
#在yaml文件中的标识
registry:
#运行起来的容器的名称
container_name: registry
#使用的镜像,会从docker hub中下载
image: registry
#将本机的5000端口和容器的5000端口映射起来
#前面是本机的5000端口,后面是容器的5000端口
ports:
- 5000:5000
#将本机的当前目录挂载到容器的一个目录下面
volumes:
- .:/var/lib/registry
#容器死掉之后,docker daemon会重启这个容器
restart: always
d.将私有仓库运行起来: docker-compose -f docker-compose-local.yml up -d registry
e.pull && push:
docker pull alpine //从docker hub拉下来一个镜像
docker tag alpine abc:5000/alpine //将镜像打标签,假设abc是你本机的主机名称
docker push abc:5000/alpine //将镜像推向你的私有镜像仓库
g.注意docker的私有镜像的pull只支持https的方式,这样你在abc这台主机上搭建了镜像仓库,在其他docker主机上pull的时候如果没有证书会出现问题,解决方法就是在vi /etc/docker/daemon.json中添加:{ "insecure-registries":["abc:5000"] },然后重启你的docker service