0、基本概念
镜像
Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令
$ docker images
镜像可以发布为不同版本,这种机制我们称之为标签(Tag)。
容器
Docker容器可以使用命令创建:
$ docker run imagename
它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。
对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。
如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。
1、配置
1.1 安装
$ sudo apt-get update
$ sudo apt-get install docker
编辑/etc/default/docker增加如下配置,自定义docker镜像存放路径
DOCKER_OPTS="--graph=/home/david/opt/docker"
sudo service docker start #启动
sudo service docker stop #关闭
sudo service docker restart #重启
1.2 pull一个镜像
查看镜像:此时应该没有镜像
docker images
下载镜像
sudo docker pull ubuntu
1.3 创建容器
docker ps命令
$ sudo docker ps #列出当前所有正在运行的container
$ sudo docker ps -l #列出最近一次启动的,且正在运行的container
$ sudo docker ps -a #列出所有的container
启动容器,并且进入到Ubuntu容器的bash命令
$ sudo docker run -itv /home/david/docker:/home/davida/gitlab ubuntu /bin/bash
其中,
1.4 提交容器
退出容器,使用 docker commit 命令来提交更新后的副本。
$ sudo docker commit -m 'xmo run evn' -a 'david' bde4f2f2db5f ubuntu-ruby:v1
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的作者信息;之后是用来创建镜像的容器的ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。v1是tag(版本号)
$ sudo docker inspect ubuntu-ruby
查看详细信息
1.5 Dockerfile提交容器
Dockerfile的指令是忽略大小写的,建议使用大写,使用 # 作为注释,每一行只支持一条指令,每条指令可以携带多个参数。
Dockerfile的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。
1)FROM 基础image
基础image可以是官方远程仓库中的,也可以位于本地仓库。
FROM <image>
或者
FROM <image>:<tag>
制定某个tag版本
1.4 用SSH访问容器
先安装ssh
apt-get update
apt-get install openssh-server
需要修改/etc/ssh/sshd_config文件中内容
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登录
重启sshd服务
/etc/init.d/ssh stop
/etc/init.d/ssh start
2、常用命令
docker start和docker run
docker run 命令先是利用镜像创建了一个容器,然后运行这个容器。
docker run命令类似于git pull命令。git pull命令就是git fetch 和 git merge两个命令的组合,同样的,docker run就是docker create和docker start两个命令的组合。
docker ps
docker ps 命令会列出所有运行中的容器。这隐藏了非运行态容器的存在,如果想要找出这些容器,我们需要使用docker ps -a
docker images
docker images命令会列出了所有顶层(top-level)镜像。实际上,在这里我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level 镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层(top-level)镜像,并且每一个顶层镜像下面都隐藏了多个镜像层。
docker images -a
docker images –a命令列出了所有的镜像,也可以说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,可以使用docker history来查看。
docker stop <container-id>
docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。
docker commit <container-id>
docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。
dockesr exec <running-container-id>
docker exec 命令会在运行中的容器执行一个新进程。
docker save <image-id>
docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。
docker export <container-id>
docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(expoxt后 的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)。
网友评论