1. 免 sudo 使用 docker 命令

  • 如果还没有 docker group 就添加一个
sudo groupadd docker
  • 将用户加入该 group 内
sudo gpasswd -a ${USER} docker
  • 重启 docker 服务
sudo service docker restart
  • 切换当前会话到新 group 或者重启 X 会话
newgrp - docker

注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。

2. Docker 镜像操作

Docker 运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker 会尝试先从默认镜像仓库下载 https://hub.docker.com/,用户也可以通过配置,使用自定义的镜像仓库。

1. 获取镜像

docker  pull NAME[:TAG]

其中,NAME 是镜像仓库的名称(用来区分镜像),TAG 是镜像的标签 ( 往往用来表示版本信息) 。如果不显式指定 TAG,则默认会选择 latest 标签,这会下载仓库中最新版本的镜像。

~/docker$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
7b8b6451c85f: Pull complete
ab4d1096d9ba: Pull complete
e6797d1788ac: Pull complete
e25c5c290bde: Pull complete
Digest: sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39
Status: Downloaded newer image for ubuntu:16.04

2. 查看镜像

docker  images

列出本地主机上已有的镜像,各个字段信息分别为来自于哪个仓库(REPOSITORY)、镜像的标签信息(TAG )、镜像的唯一ID号(IMAGE ID)、创建时间(CREATED)、镜像大小(SIZE)。

~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

3. 修改本地镜像标签

docker tag

为本地镜像添加新的标签:

~/docker$ docker tag ubuntu:16.04 ubuntu:test
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              test                a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

不同标签的镜像 ID 完全一致,说明它们实际上指向了同一个镜像文件,只是别名不同而已。

4. 查看镜像详细信息

docker inspect

docker inspect 命令可以获取该镜像的详细信息,详情如下:

~/docker$ docker inspect ubuntu
[]
Error: No such object: ubuntu
~/docker$ docker inspect ubuntu:16.04
[{"Id": "sha256:a51debf7e1eb2018400cef1e4b01f2e9f591f6c739de7b5d6c142f954f3715a7","RepoTags": ["ubuntu:16.04","ubuntu:test"],"RepoDigests": ["ubuntu@sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39"],"Parent": "","Comment": "","Created": "2018-11-19T21:23:53.455319926Z","Container": "f4879d05f303ba132b6cc82988306e44819b9d0872dc891d864374d3a9b51b08","ContainerConfig": {"Hostname": "f4879d05f303","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"/bin/bash\"]"],"ArgsEscaped": true,"Image": "sha256:d6ab6854552cda39995558786e1690e20092af93f8145294473ac62fd76c9b1b","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {}},"DockerVersion": "17.06.2-ce","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/bash"],"ArgsEscaped": true,"Image": "sha256:d6ab6854552cda39995558786e1690e20092af93f8145294473ac62fd76c9b1b","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 116379573,"VirtualSize": 116379573,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/712e9847e3ad03a267475d1d9a0ac4b048db2d019bdaff2c5d5c2c16aebb5c9f/diff:/var/lib/docker/overlay2/1f8d82d0ffea021b7c60a7dc6fff9cec089134d21e6eadea33324806ca3af969/diff:/var/lib/docker/overlay2/dc48b79aa28f9229192998904dc8ebad58e4f6247e6a2efb8f24fa569fc10c09/diff","MergedDir": "/var/lib/docker/overlay2/93bcd26c8df6ca3c8c30cedeb039ceea2d353cdd5780fa0ab928a730011a1974/merged","UpperDir": "/var/lib/docker/overlay2/93bcd26c8df6ca3c8c30cedeb039ceea2d353cdd5780fa0ab928a730011a1974/diff","WorkDir": "/var/lib/docker/overlay2/93bcd26c8df6ca3c8c30cedeb039ceea2d353cdd5780fa0ab928a730011a1974/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:41c002c8a6fd36397892dc6dc36813aaa1be3298be4de93e4fe1f40b9c358d99","sha256:647265b9d8bc572a858ab25a300c07c0567c9124390fd91935430bf947ee5c2a","sha256:819a824caf709f224c414a56a2fa0240ea15797ee180e73abe4ad63d3806cae5","sha256:3db5746c911ad8c3398a6b72aa30580b25b6edb130a148beed4d405d9c345a29"]},"Metadata": {"LastTagTime": "2018-12-04T22:07:50.559903444+08:00"}}
]

5. 查找镜像

docker search

docker search 命令可以搜索远端仓库中共享的镜像,默认搜索官方仓库中的镜像。用法为 docker search TERM,支持的参数主要包括:

  • –automated=true| false: 仅显示自动创建的镜像,默认为否;

  • –no-trunc=true| false: 输出信息不截断显示,默认为否;

  • -s,–stars=X: 指定仅显示评价为指定星级以上的镜像,默认为0,即输出所有镜像。

~/docker$ docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7465                [OK]
mariadb                                                MariaDB is a community-developed fork of MyS…   2407                [OK]
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   557                                     [OK]
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       149                                     [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          102
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   79                                      [OK]
centurylink/mysql                                      Image containing mysql. Optimized to be link…   59                                      [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          47                                      [OK]
centos/mysql-57-centos7                                MySQL 5.7 SQL database server                   43
mysql/mysql-cluster                                    Experimental MySQL Cluster Docker images. Cr…   35
tutum/mysql                                            Base docker image to run a MySQL database se…   31
bitnami/mysql                                          Bitnami MySQL Docker Image                      23                                      [OK]
schickling/mysql-backup-s3                             Backup MySQL to S3 (supports periodic backup…   23                                      [OK]
linuxserver/mysql                                      A Mysql container, brought to you by LinuxSe…   17
zabbix/zabbix-proxy-mysql                              Zabbix proxy with MySQL database support        17                                      [OK]
centos/mysql-56-centos7                                MySQL 5.6 SQL database server                   12
circleci/mysql                                         MySQL is a widely used, open-source relation…   7
mysql/mysql-router                                     MySQL Router provides transparent routing be…   6
openshift/mysql-55-centos7                             DEPRECATED: A Centos7 based MySQL v5.5 image…   6
dsteinkopf/backup-all-mysql                            backup all DBs in a mysql server                5                                       [OK]
openzipkin/zipkin-mysql                                Mirror of https://quay.io/repository/openzip…   1
jelastic/mysql                                         An image of the MySQL database server mainta…   1
ansibleplaybookbundle/mysql-apb                        An APB which deploys RHSCL MySQL                0                                       [OK]
cloudfoundry/cf-mysql-ci                               Image used in CI of cf-mysql-release            0
cloudposse/mysql                                       Improved `mysql` service with support for `m…   0                                       [OK]

6. 删除镜像

docker rmi IMAGE[IMAGE...]

docker rmi 命令可以删除镜像,命令格式为 docker rmi IMAGE[IMAGE…],其中 IMAGE 可以为标签或ID。

~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              test                a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ docker rmi ubuntu:test
Untagged: ubuntu:test
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

当同一个镜像拥有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像 a51debf7e1eb 的标签而已。

当使用 docker rmi 命令,并且后面跟上镜像的 ID ( 也可以是能进行区分的部分 ID 串前缀 ) 时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。

  • 先创建一个容器:
~/docker$ docker run ubuntu:16.04 echo "Hello, world"
Hello, world
  • 使用 docker ps -a 命令可以看到本机上存在的所有容器:
~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                      PORTS               NAMES
f632ff0305aa        ubuntu:16.04        "echo 'Hello, world'"   46 seconds ago      Exited (0) 45 seconds ago                       eloquent_swartz
33197473a278        hello-world         "/hello"                3 days ago          Exited (0) 3 days ago                           frosty_galileo
  • 试图删除该镜像,Docker 会提示有容器正在运行,无法删除:
~/docker$ docker rmi ubuntu:16.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:16.04" (must force) - container f632ff0305aa is using its referenced image a51debf7e1eb
  • 先删除依赖该镜像的所有容器,再使用ID 来删除镜像:
:~/docker$ docker rm f6
f6
:~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
33197473a278        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                       frosty_galileo

7. 创建镜像

创建镜像有三种方法:

  1. 基于已有镜像的容器创建
  2. 基于本地模板导入
  3. 基于 Dockerfile 创建

基于已有镜像的容器创建:
该方法主要是使用 docker commit 命令。命令格式为

docker commit[OPTIONS]CONTAINER[REPOSITORY[:TAG]]

主要选项包括:

  • -a,–author="":作者信息
  • c,–change=[]:提交的时候执行 Dockerfile指令,包括CMD|
    ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
  • -m,–message="":提交消息
  • p,–pause=true:提交时暂停容器运行

创建新镜像示例

先启动一个镜像,并在其中进行修改操作,例如创建一个 test 文件,之后退出。

~/docker$ docker run -ti ubuntu:16.04
root@c53b34da8804:/# touch test.sh
root@c53b34da8804:/# pwd
/
root@c53b34da8804:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  test.sh  usr
boot  etc  lib   media  opt  root  sbin  sys  tmp      var
root@c53b34da8804:/# exit
exit
~/docker$

容器 ID 为 c53b34da8804,该容器跟原来的 ubuntu 镜像相比已发生变化。使用 docker commit 命令提交为一个新的镜像,提交时使用 ID 或者名称来指定容器。

~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c53b34da8804        ubuntu:16.04        "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                       mystifying_sanderson
33197473a278        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           frosty_galileo
~/docker$ docker commit -m "add new file" -a "wohu1104" c53b34da8804  test_image
sha256:1cd880207b3efc2ce140237803672344fe3ec7ed3970dffc63c113cac262ed50
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        18 seconds ago      116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              latest              93fd78260bd1        2 weeks ago         86.2MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

8. 导出和导入镜像

  • 使用 docker save 命令用来将镜像导出到本地文件
~/docker$ docker save -o ubuntu.tar ubuntu:16.04
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        9 minutes ago       116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              latest              93fd78260bd1        2 weeks ago         86.2MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ ls
ubuntu.tar

其中 -o 和 > 表示输出到文件,ubuntu.tar 为目标文件,ubuntu:16.04 是源镜像名(name:tag)

  • 使用 docker load 将导出本地文件再导入到本地镜像库
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        14 minutes ago      116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ docker load -i ubuntu.tar
Loaded image: ubuntu:16.04
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        15 minutes ago      116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

其中 -i 和 < 表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

9. 上传镜像

使用 docker push 命令上传镜像到仓库,默认上传到 Docker Hub官方仓库 ( 需要登录 )。命令格式为:

docker push NAME[:TAG] |[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

参考:
https://www.cnblogs.com/lsgxeva/p/8746644.html

Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像相关推荐

  1. Docker 入门系列(8)— 免 sudo 使用 docker 命令、进入未启动的容器

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  2. Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像

    2019独角兽企业重金招聘Python工程师标准>>> 在前一篇文章:Docker入门系列之一:在一个Docker容器里运行指定的web应用 里, 我们已经成功地将我们在本地开发的一 ...

  3. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  4. Docker入门系列(一):目标和安排

    Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...

  5. 免 sudo 使用 docker

    免 sudo 使用 docker 如果还没有 docker group 就添加一个: sudo groupadd docker 将用户加入该 group 内.然后退出并重新登录就生效啦. sudo g ...

  6. Docker 入门系列(3)- Docker 容器(创建、启动、终止、进入、删除、导入、导出容器、容器和镜像转化)

    Docker 容器 简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层. 如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其他系 ...

  7. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  8. Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)

    Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 来快速创建自定义的镜像. 1. 基本结构 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行. ...

  9. Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)

    基于底层存储实现,Docker 提供了三种适用于不同场景的文件系统挂载方式:Bind Mount.Volume 和 Tmpfs Mount. Bind Mount 能够直接将宿主操作系统中的目录和文件 ...

最新文章

  1. 查看python安装路径-Mac查看Python安装路径和版本
  2. QDir, QFileInfo 和 QDirIterator 区别
  3. 传统生成API文档弊端
  4. 5W字高质量java并发系列详解教程(上)-附PDF下载
  5. Netflix CEO:入华谈判进展顺利 或很快获牌照
  6. SQL Server 默认跟踪报表
  7. JavaFX官方教程(九)之转换
  8. linux操作系统之信号量、互斥量在进程间的同步、文件锁
  9. Flex 流式布局 之 滚动条篇
  10. Freeswitch NAT问题
  11. c语言函数指针学习心得,c语言 函数指针 学习C语言笔记
  12. android拉勾轮播,拉勾网顶部轮播图的实现(一)以及简单闭包的应用
  13. java读取配置文件的详细写法,Properties配置文件读取相关java知识
  14. 基于JAVA_JSP电子书下载系统
  15. Representation Learning with Contrastive Predictive Coding 论文阅读
  16. UnityEditor代码分享导出材质贴图和Mesh本体
  17. am335x linux 的uboot工作流程.doc,am335x uboot2016.05 (MLO u-boot.img)执行流程(转)
  18. IE、360、百度三者的比较
  19. SAP ABAP DUMP GETWA_NOT_ASSIGNED 指针未分配错误
  20. 推荐系统(五)——SIGIR‘21用反事实推断缓解点击诱饵,还在为标题党烦躁吗?请看这篇文章

热门文章

  1. 2022-2028年中国蛋制品行业市场专项调查及前瞻分析报告
  2. VS Code 安装 Go 插件、自定义扩展配置、断点调试
  3. STL库(C++11)提供的异步执行方法的方式
  4. Bert代码详解(一)重点详细
  5. pycharm设置编写的脚本页面长行实现自动换行(windows版)
  6. tf.shape()
  7. 先进一站式IP及定制
  8. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解
  9. RecyclerView 判断滑动到顶部和底部
  10. Android 删除无用的导包