验证安装
docker run hello-world
# 分析上面指令结构:
# docker: 告诉操作系统,正在使用docker程序
# run: 子指令,创建并运行容器
# hello-world: 告诉docker哪个image被导入容器
打印如下:
完美,你的电脑上已经成功安装docker了。现在我们开始了解第一个概念:容器。按照下面的操作来,先有个感官的认识,稍后会详细解释容器。
查看container
从上面的指令可以知道,我们的docker已经安装成功了。我们可以用下面的命令查看自己正在运行的容器:
docker ps //显示所有正在运行的容器
当然,也可能显示没有正在运行的容器(刚开始安装,还没有运行任何容器)。我们给它加个参数就能查看所有容器,包括没有运行的、正在运行的和运行过的。如下:
docker ps -a
结果图:
这样就可以看到所有的容器,你一定能找到 hello-world这个运行过的容器。
镜像
镜像,就是一个文件系统,查看自己local的镜像命令:
docker images //显示的是本地镜像
镜像保存到本地的好处:当加载image的时候,会直接在本地加载,不用去远程下载。节省时间,节省宽带。查找镜像地址: https://store.docker.com/comm...
镜像和容器的区别:容器只是镜像的一个实例,镜像被加载只是创建了一个实例。我们通过上面指令查看镜像,显示的可能比容器(docker ps -a) 要多。因为还有一些镜像只是下载在本地,却没有被加载,好比maven有个本地仓库。
删除容器
docker rm [id/name]
#删除所有
docker rm `docker ps -a -q` #-q表示只返回容器的id
需要注意的是:上面的命令只是删除容器,不是删除镜像。
构建自己的镜像
首先创建一个Dockerfile文件,这个文件是一个菜单。由files,environment,commonds 来构建一个images.
创建一个mydocker文件夹
mkdir mydocker
// 进入该目录下
cd mydocker
在新建目录下创建Dockerfile文件
touch Dcokerfile
//用vim打开编辑
vim Dockerfile
开始编写Dockerfile
下面FROM指令的意思是,告诉Docker你要基于哪个镜像进行构建
FORM docker/whalesay:latest
下面RUN指令,给镜像安装一个软件fortunes(因为whalesay是基于ubuntu的,所以下面可以执行一些对象的指令)
RUN apt-get -y update && apt-get install fortunes
下面的CMD指令, 告诉镜像(这里是指成功后的镜像)最后需要去运行的指令
CMD /usr/games/fortune -a | cowsay
好了,一切就绪。开始构建吧!
在Dockerfile同级目录下运行,用docker build 来构建,-t (tag)是给镜像一个tag,方便后面运行。表示Dockerfile在当前目录下
docker build -t robin-whale .
我们可以看看执行的打印输出,可以了解下详细的执行过程,成功会打印输出:Successfully built c5857....
查看下自己构建的镜像
还记得怎么查看吗?对,你猜对了!就是用images来查看
docker images
可以看到第一行,就是我们刚刚构建的镜像。
Docker Hub
注册一个Docker Hub账户
在这里创建账号
创建仓库
注册账号后,登陆。在自己的主页面,点击 create Repository创建一个自己的仓库。
Visibility 这里选择public,这样才能分享给他人使用,我们是要拥抱开源。
给你的images打上你的标志
在上传镜像之前,先给你的images打上你自己的标签吧!证明这是我的images,可能一不小心,你就出名了,哈哈!!!
账户名/镜像:版本
这里[账户名/]就是你的标签,官方给出的是,标签用你的docker hub账户名。给某个镜像打标签用 docker tag
docker tag c58570c0ad0d robinyang0909/robin-whale:latest
//docker tag 镜像id 新标签:版本
再来执行 docker images 看看
可以看到 robinyang0909/robin-whale这个镜像生成了。再看时间,可以发现,并没有新建一个镜像,只是新建了一个images名,指向了robin-whale这个镜像。
万事俱备,现在可以上传自己的镜像了!你已经迫不及待出名了吗?别慌,先登录下你的账户。
登陆自己的账户
docker login
执行上面命令,然后输入你的账户名和密码,出现 Login Succeeded 登陆成功。
开始push镜像
docker push robinyang0909/robin-whale
回车,开始push你的镜像,过程估计有点慢,因为docker hub 毕竟不是我们做的,等谁有能力了,你们就去整一个牛逼的开源技术,然后服务器就放在我们自己国家。
push成功后显示结果:
怎么测试我们push到docker hub上的是一个完整的镜像呢?对,你猜对了!删除本地镜像,然后重新从仓库下载。
删除本地镜像
有的程序员有“洁癖”,不想在自己的电脑放一些没用的东西占内存,比如刚开始下载的 hello-world镜像,我就想删掉!
docker rmi c58570c0ad0d # 你的id肯定跟这里不一样
要是上面的命令删不掉的话,用下面的试试:
docker rmi -f c58570c0ad0d #强制删除
当然,刚开始学习,你的机器上估计也没有什么重要的镜像,应该都可以删除吧!这里教你一招,清空!慎用!
docker rmi -f `docker images -a -q`
体验下载自己容器的快乐
好了,经理上面的删除镜像,相信你已经删除完那个上传的镜像。开始下载运行自己的镜像吧!怎么做?相信你没有忘记,就在最上面, 对!docker run ..
docker run robinyang0909/robin-whale
记得加上自己账户名,回车,开始下载。估计有点慢,因为我们上传到的是docker hub上,不是国内服务器。
看到上图的话,说明你自己构建镜像,上传,下载,运行这几步都是成功的!恭喜你成功了迈出了第一步。现在你已经慢慢入门的,可以去说,我会使用docker了,哈哈!
这里再来回想一个问题:上面我们在上传镜像之前对自己的镜像打了tag,为什么要这么做?
在下载自己上传的镜像,相信你已经想到了,如果不加上自己账户名的话,那么大家都上传,要是遇到同名的镜像咋办!下载该下载谁的!加上自己的用户名,就是起一个namespace的作用,类似java里的包名作用。用户名是不会重复的,因为你注册的时候,保证了你的用户名具有唯一性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。