Docker(2) 基础概念与命令

Posted by BrunoJu on September 10, 2017

Docker 三大基础组件:

  • 仓库 Repository ≈ App Store
  • 镜像 Image ≈ installation package
  • 容器 Container ≈ process

仓库 类似于iPhone手机的APP应用商店,里面存放已经打包好的Docker应用——Docker镜像
镜像 类似于Windows里面的软件安装包
容器 都是基于镜像创建的, 基于一个镜像可以创建若干个名字不同但是功能相同的容器

命令操作对象

首先需要明确知道的一点是:docker命令的操作对象主要针对4个方面

  • 针对守护进程的系统资源和全局信息的获取,如:docker info、docker deamon
  • 针对仓库的查询与下载等, 如:docker search、 docker pull
  • 针对镜像的查询、创建与删除, 如: docker images、docker build
  • 针对容器的查询、创建、开启、停止等,如:docker ps、docker run

Docker指令支持 赋值、解析变量、嵌套等使用

如:获取容器的ID, 根据ID提交到仓库(这也就是创建新镜像的步骤)

$ ID=$(docker run -d ubuntu echo hello world)
$docker commit $ID helloworld

如: 删除所有停止运行的容器

$ docker rm $(docker ps -a -q)

docker_rm_all 这是删除全部的容器的命令,正在运行中的容器会报错,不会被此命令删除。
需要注意:删除容器在默认情况下,会删除容器中的数据。
参数解释:-q, –quiet Only display numeric IDs

Docker的组织架构

docker_on_linux 从上面可见,Docker位于OS和虚拟容器(lxc或libcontainer)之上,它会通过调用cgroups、namesapces、libcontainer等系统层面的接口来完成资源的分配。

内部组织结构 docker_inner 在一台主机上面,首先要启动一个守护进程(docker deamon),所有的容器都被deamon控制。
同时deamon监听并接收docker客户端(Docker Client)指令,并将执行结果返回。

动手实践常用命令

1.查询版本

$ docker -v

2.查询某个名称的镜像

$ docker search tutorial

docker_search_img 每个用户都可以在官方Repo注册自己的账户,发布自己的Docker镜像,使用“用户名/镜像名”的命名方式可以让不同的用户拥有相同的镜像名称而互不干扰。

3.下载镜像

$ docker pull learn/tutorial

运行下载的镜像,并输出“hello world”。为了做到这一点,需要在容器中运行shell命令“echo”
可以看见,在我没有命名容器的名称的时候,它有个默认的名称:happy_rosalind

bruno@Matrix:~$ docker run learn/tutorial echo "hello world"

docker_hello_world

4.修改容器
在容器内部安装ping(learn/tutorial镜像是基于Ubuntu系统构建的)

bruno@Matrix:~$ docker run learn/tutorial apt-get install -y ping

注意:容器会自动加载宿主机的一些配置文件,比如说这里的安装ping安装后就加载了宿主机的/etc/resolv.conf的 DNS 解析配置。

5.创建新镜像
首先找到最后一个创建的容器的ID号,然后用commit将容器提交为新的镜像,最后产生的就是新镜像的ID

bruno@Matrix:~$ docker ps -l
bruno@Matrix:~$ docker commit ed23ed learn/ping

docker_create_img

6.使用新镜像
基于刚才我们创建的新镜像(保存在了本地img目录中,此时并没有push到官网repository中),创建新的容器

bruno@Matrix:~$ docker run learn/ping ping www.google.com

docker_use_new_img

7.查询容器信息
inpect指令可以看到单个容器最为详细的信息,容器ID的前3~4个字符就能指定一个容器了。

bruno@Matrix:~$ docker inspect 1cc6

8.把镜像上传到Repo
首先查看本地Images

bruno@Matrix:~$ docker images

其次在docker的官方Repo(https://hub.docker.com)必须有自己的账号,在本地登录

bruno@Matrix:~$ docker login

最后上传本地镜像到Repo

bruno@Matrix:~$ docker push learn/ping

docker_push_new_img

总结

至此为止,差不多所有常用的docker命令已经全在这里了。如果能够彻底搞清楚repository,image和container的关系,那么学习起这些基础的命令一般是很轻松的。
下一章,我们将深入探讨docker的高级使用。