Docker 入门
这些天了解了现在流行的容器技术Docker,主要是参考这个系列的博客 http://www.cnblogs.com/CloudMan6/tag/Docker/ 还有Docker中文网 http://www.docker.org.cn
本篇博客主要讲一些命令的操作,至于原理性的东西就不多讲了,这些在网上都可以找到,本篇博客主要是记录一些命令的操作,用于以后用到可以方便的查到。命令是用到的时候再查的,不过原理性的概念还是要了解的,docker这个东西使用的时候不难,没有多少要学的。重要是了解Docker概念后,根据实际项目在进行配置即可。现在了解只是为了以后快速使用而已。
1. 安装
系统使用的是Debian 8.8,先配置Docker的apt源。
apt-get install apt-transport-https ca-certificates curl software-properties-common
增加Docker 官方的GPG
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
注意后面的 - 号, 这里使用ubuntu的gpg
将Docker的源添加到 /etc/apt/sources.list
add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable”
使用Aliyun源
https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.1cbe1991CFEvea
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装Docker
apt-get update apt-get install docker-ce
查看是否安装成功
service docker status docker version
2. 加速
由于Docker Hub的服务器是在国外,下载镜像(image)时会比较慢,有时候网络断开还要重新下载,好在Docker提供私服功能,国内就有好多家公司提供了这样的服务。这里使用 daocloud.io 提供的服务。首先在daocloud.io免费注册一个用户。然后在用户管理界面哪里有个加速器( https://www.daocloud.io/mirror#accelerator-doc )
运行命令后,重启Docker即可。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://71***3.m.daocloud.io service docker restart
3. 运行第一个容器Docker
docker run -d -p 80:80 httpd #运行后自动从服务器上下载image,然后以后台方式运行容器。 docker images #进行查看 docker ps #查看运行情况
然后访问本地的Web服务器
Docker 架构图
4. 基本操作
docker run -it centos #下载并以命令行运行centos
进入后,可以在里面进行操作,基本的操作跟在一台Linux主机上操作是一样的,没有什么区别。如果在容器(Container)里面退出的话,对应的容器也就关闭,假设进入后,还没有退出来。新建一个控制台,然后在里面输入docker ps 就可以查看当前真正运行的容器实例。在容器里面的所有操作,都是暂时的,如果操作后,退出容器,那么是不进行保存的。如果想保存,那么要在另外的控制台用命令保存当前运行的容器,生成一个镜像(image).至于原理性的东西,请参考具体的文章。
在新的控制台中输入 docker ps 查看当前运行的容器,记住运行的Container ID,然后通过下面命令对当前运行的容器生成一个快照镜像(Image)
docker commit 17022396134b centos-new # docker commit ContainerID new-ContainerName
这样就生成一个镜像了。由于容器是分层的,这里保存会很快。然后通过 docker images 可以查看刚才保存的镜像。
5. 通过Dockerfile构建镜像
通过Dockerfile方式构建镜像,底层通过解析Dockerfile文件一条一条命令进行docker commit 一层一层构建新镜像。Docker的分层架构,可以具体去了解一下,设计的很好。
创建一个简单的Dockerfile文件
然后在Dockerfile 文件中输入以下内容
FROM ubuntu RUN sed -i ‘s/archive.ubuntu/mirrors.aliyun/g’ /etc/apt/sources.list #这里用阿里云(网易163)的开源镜像服务器,会快一点。 RUN apt-get update && apt-get install -y vim COPY testfile /
命令行输入命令
docker build -t ubuntu-with-vi-dockerfile .
注意后面的点. 表示从当前目录查找Dockerfile文本文件,然后镜像构建。
然后可以通过 docker images 查看,可以通过 docker history ubuntu-with-vi-dockerfile 查看当前镜像的历史修改信息。
关于Dockerfile语法还比较多,还有很多高级操作,不过我觉得,这个在实际项目中有需要再去查,然后使用即可,这里就不展开说明。
6. 建立私服
这个还是蛮重要的一部分,大部分实际项目都会通过这种方式进行内网部署。虽然现在很多云服务,大部分也通过这种方式进行部署,但是通过网络镜像云部署的,对于个人项目和晓欣项目比较多。稍微复杂一点的,一般公司都会自己组建服务器,即使使用云主机,也是会部署在云主机内网里,不大会将镜像放到外网。
下面就介绍如何搭建私服。
首先下载Docker Hub上官方镜像registry,这个也是Docker image ,是官方提供的。
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest
由于使用-d参数,所以是后台运行。
docker ps
可以看到私服就这样启动了,是不是很容易,这就是Docker容器化的优势。
我们对刚才下载的httpd 复制一份,命名一个新tag。
docker tag httpd:latest localhost-httpd #错误,如果要保存在本地,需要填写对于的域名 docker tag httpd:latest localhost:5000/myuser/httpd
这样就复制了一个,可以通过push 命令推送到本地仓库。
如果省略域名就会默认推送的docker.io上了。(docker push localhost-httpd:latest)
docker push localhost:5000/myuser/httpd
这样就表示推送到本地仓库了。可以在本地的 /myregistry 查看
新开了一个虚拟机,然后通过远程下载对应的镜像。
但是发现好像不能用http,只能用https,我们需要修改一些配置。现在的最新版本修改 /etc/docker/daemon.json 这个配置文件.打开后可以看到里面有我们之前写入的daocloud.io这个加速用的网址。我们在其后面加上如下配置:
{ “insecure-registries” : [“192.168.56.150”] } 服务器端和客户端都要进行配置。配置后如下显示
然后 service docker restart # 重启Docker 要注意看registry 是否还启动着,如果没有,要重新启动。因为重启Docker ,Docker会stop 正在运行的容器,可以试着docker start ID
7. 多说两句
其他高级使用,如使用Docker 自带的对硬件的限制功能。使用Docker-Compose来管理Docker集群等高级功能。
参加工作后,现在没有很多连续的时间,很难像以前那样做一个系列的博客文章。只能利用有空的时间,看一些比较前沿的计算,然后简单的了解一下而已,并不能很好的深入,现在的想法是能学点就多学点,多了解一些,等实际工作中有机会用到的话,再进行深入理解。平时没事,就看看,了解了解。
参考资料:
http://www.docker.org.cn/book/docker/what-is-docker-16.html
http://www.cnblogs.com/CloudMan6/tag/Docker/
http://www.cnblogs.com/zuoxiaobing/p/6259029.html
作者:无脑仔的小明 出处:http://www.cnblogs.com/wunaozai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注“无脑仔的小明”公众号私信我。一定尽力回答。 |