docker日常操作集合

Published: 09 Dec 2018 Category: docker

一、commit

基于已有的docker容器,做一新的dokcer image.

$ docker commit <container_id> <image_name>

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

目标: 首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为learn/ping。

提示:运行docker commit,可以查看该命令的参数列表。 你需要指定要提交保存容器的ID。(译者按:通过docker ps -l 命令获得) 无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版本号)

正确的命令:

$docker ps -l
$docker commit 698 learn/ping

实操

abc@BDSHYF000135355:~/Docker$ docker ps
CONTAINER ID        IMAGE                                            COMMAND             CREATED             STATUS              PORTS               NAMES
377993ef5f69        registry.baidu-int.com/acu-voice/basegpu:1.0.0   "bash"              9 minutes ago       Up 9 minutes                            musing_keller

abc@BDSHYF000135355:docker run -it registry.baidu-int.com/acu-voice/basegpu:1.0.0 bash
// 一顿非常华丽的操作
// 退出
[root@377993ef5f69 packet]# exit
exit

abc@BDSHYF000135355:~/Docker$ docker ps -l
CONTAINER ID        IMAGE                                            COMMAND             CREATED             STATUS                      PORTS               NAMES
377993ef5f69        registry.baidu-int.com/acu-voice/basegpu:1.0.0   "bash"              11 minutes ago      Exited (0) 12 seconds ago                       musing_keller

abc@BDSHYF000135355:~/Docker$ docker commit 377993ef5f69 local/dongle-basegpu:1.0.0
sha256:fe9c80b2c7559b5698765cc8d7255608c6fa8c24863ef3b6a1fac4c04c4aa54d

abc@BDSHYF000135355:~/Docker$ docker images
REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
local/dongle-basegpu                                1.0.0               fe9c80b2c755        41 seconds ago      1.06GB
<none>                                              <none>              7854f189b179        12 hours ago        916MB
registry.baidu.com/public_team/safedongle-centos7   0.8                 be417a3daa9a        2 weeks ago         365MB
registry.baidu-int.com/acu-voice/basegpu            1.0.0               363478e3efb1        6 months ago        916MB

在列出的所有顶层(top-level)镜像信息中,可以看到几个字段信息

  • REPOSITORY: 来自于哪个仓库,比如 ubuntu
  • TAG: 镜像的标记,比如 14.04
  • IMAGE ID: 它的 ID 号(唯一)
  • CREATED: 创建时间
  • SIZE: 镜像大小

    abc@BDSHYF000135355:~/Docker$ docker save -o dongle-basegpu.tar local/dongle-basegpu:1.0.0 // 出去上个厕所 abc@BDSHYF000135355:~/Docker$ ls Dockerfile basegpu.tar dongle dongle-basegpu.tar

二、load、save和export

查看镜像:

docker images

保存镜像

docker save spring-boot-docker -o spring-boot-docker.tar

加载镜像

docker load -i spring-boot-docker.tar
// 或
docker load < spring-boot-docker.tar

跑起来

docker run -p 8081:8080 -d spring-boot-docker

容器导出

docker export <container-id>

创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到 的内容。 expoxt后的容器再import到Docker中,只有一个容器当前状态的镜像;而save后的镜像则不同, 它能够看到这个镜像的历史镜像。

三、docker history

这个命令可以查看镜像使用了哪些image layers

docker history IMAGE

四、pull 和 push

获取镜像

docker pull centos:centos6

实际上相当于 docker pull registry.hub.docker.com/centos:centos6 命令,即从注册服务器 registry.hub.docker.com 中的 centos 仓库来下载标记为 centos6 的镜像.

上传镜像

ocker push hainiu/httpd:1.0

用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。上例中,用户将镜像推送自己的镜像到仓库中。

五、容器相关

5.1 启动容器

docker start <container-id>

Docker start命令为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。

运行实例:

#通过名字启动
$ docker start -i centos6_container

#通过容器ID启动
$ docker start -i b3cd0b47fe3d

5.2 进入容器

docker exec <container-id>

在当前容器中执行新命令,如果增加 -it参数运行bash 就和登录到容器效果一样的。

docker exec -it centos6_container bash

5.3 其他

停止容器

docker stop <container-id>

删除容器#

docker rm <container-id>

(删除镜像: docker rmi <image-id>)

运行容器

docker run <image-id>

docker run就是docker create和docker start两个命令的组合,支持参数也是一致的。 如果指定容器名字时,容器已经存在会报错,可以增加 --rm 参数实现容器退出时自动删除。

运行示例:

docker create -it --rm --name centos6_container centos:centos6

六、inspect

docker inspect <container-id> or <image-id>

docker inspect命令会提取出容器或者镜像最顶层的元数据。