Docker操作命令示例

1. 镜像

1.1 获取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull 。其命令格式为:

 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
[root@rpp local]# docker pull mysql:5.7.30
5.7.30: Pulling from library/mysql
8559a31e96f4: Pull complete 
d51ce1c2e575: Pull complete 
c2344adc4858: Pull complete 
fcf3ceff18fc: Pull complete 
16da0c38dc5b: Pull complete 
b905d1797e97: Pull complete 
4b50d1c6b05c: Pull complete 
d85174a87144: Pull complete 
a4ad33703fa8: Pull complete 
f7a5433ce20d: Pull complete 
3dcd2a278b4a: Pull complete 
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Status: Downloaded newer image for mysql:5.7.30
docker.io/library/mysql:5.7.30
docker pull mysql:5.7.30

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名 称是 mysql:5.7.30 ,因此将会获取官方镜像 library/mysql 仓库中标签为 5.7.30 的镜 像。
从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也 是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结 束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。
在使用上面命令的时候,你可能会发现,你所看到的层 ID 以及 sha256 的摘要和这里的不一 样。这是因为官方镜像是一直在维护的,有任何新的 bug,或者版本更新,都会进行修复再 以原来的标签发布,这样可以确保任何使用这个标签的用户可以获得更安全、更稳定的镜 像。

如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。

如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址,如下

docker pull registry.hub.docker.com/mysql:5.7.30 

如果从 Docker Hub 下载镜像非常缓慢,可以参照 镜像加速器 一节配置加速器。

1.2 查看镜像信息

docker images 或者docker image ls

[root@rpp local]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.30              9cfcce23593a        5 months ago        448MB
hello-world1        1.0                 bf756fb1ae65        10 months ago       13.3kB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

可以通过man docker-images查看更多命令参数

列表包含了 仓库名 、标签 、镜像 ID 、创建时间 以及 所占用的空间 。
镜像 ID 则是镜像的唯一标识,一个 镜像可以对应多个标签。因此,在上面的例子中,我们可以看到 hello-world1:1.0 和
hello-world:latest 拥有相同的 ID,因为它们对应的是同一个镜像。

  • 镜像体积

如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。 比如, ubuntu:16.04 镜像大小,在这里是 127 MB ,但是在 Docker Hub 显示的却是 50
MB 。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是 保持着压缩状态的,因此 Docker Hub 所显示的大小是网络传输中更关心的流量大小。而
docker image ls 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空 间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。
另外一个需要注意的问题是, docker image ls 列表中的镜像体积总和并非是所有镜像实际硬 盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为 使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保 存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。

[root@rpp local]# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              2                   1                   448.1MB             448.1MB (99%)
Containers          2                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B
  • 查看虚悬镜像:既没有仓库名,也没有标签,均为 。
docker images -f dangling=true
  • 中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可 能会看到一些依赖的中间层镜像。默认的 docker images 列表中只会显示顶层镜像,如果 希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。

docker images -a

这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层 镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依 赖丢失而出错。实际上,这些镜像也没必要删除,因为之前说过,相同的层只会存一遍,而 这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份,无论如何你也会 需要它们。只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。

1.3 添加镜像标签

docker tag [原镜像名:tag号] [目标镜像名:tag号] # 如果tag号缺省,默认latest

[root@rpp ~]# docker tag hello-world hello-world1:1.0
[root@rpp ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world1        1.0                 bf756fb1ae65        10 months ago       13.3kB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
[root@rpp ~]# 
1.4 查看镜像详细信息

docker inspect NAME[:TAG]

[root@rpp ~]# docker inspect hello-world1:1.0
[
    {
        "Id": "sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b",
        "RepoTags": [
            "hello-world1:1.0",
            "hello-world:latest"
        ],
        "RepoDigests": [
            "hello-world@sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-01-03T01:21:37.263809283Z",
        "Container": "71237a2659e6419aee44fc0b51ffbd12859d1a50ba202e02c2586ed999def583",
        "ContainerConfig": {
            "Hostname": "71237a2659e6",
            "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 [\"/hello\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:eb850c6a1aedb3d5c62c3a484ff01b6b4aade130b950e3bf3e9c016f17f70c34",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "18.06.1-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": [
                "/hello"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:eb850c6a1aedb3d5c62c3a484ff01b6b4aade130b950e3bf3e9c016f17f70c34",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 13336,
        "VirtualSize": 13336,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/ef0109c8369697d236458bd4d66c9dcdb07752e401cd347ac396418d51decfd4/merged",
                "UpperDir": "/var/lib/docker/overlay2/ef0109c8369697d236458bd4d66c9dcdb07752e401cd347ac396418d51decfd4/diff",
                "WorkDir": "/var/lib/docker/overlay2/ef0109c8369697d236458bd4d66c9dcdb07752e401cd347ac396418d51decfd4/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63"
            ]
        },
        "Metadata": {
            "LastTagTime": "2020-11-25T16:28:31.86700912+08:00"
        }
    }
]

返回的是一个JSON格式的消息,如果我们只要其中一项内容时, 可以使用参数-f来指定

[root@rpp ~]# docker inspect hello-world1:1.0 -f {{".Architecture"}}
amd64
[root@rpp ~]# docker inspect hello-world1:1.0 -f {{".Metadata"}}    
{2020-11-25 16:28:31.86700912 +0800 CST}
1.5 搜寻镜像

docker search 名称

[root@rpp ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10202               [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3753                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   744                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   511                 [OK]                
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86                                      
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   78                                      
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                                      [OK]
bitnami/mysql                     Bitnami MySQL Docker Image                      47                                      [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35                                      
databack/mysql-backup             Back up mysql databases to... anywhere!         32                                      
prom/mysqld-exporter                                                              31                                      [OK]
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   29                                      [OK]
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   26                                      
centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20                                      
circleci/mysql                    MySQL is a widely used, open-source relation…   19                                      
mysql/mysql-router                MySQL Router provides transparent routing be…   17                                      
arey/mysql-client                 Run a MySQL client from a docker container      16                                      [OK]
fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   10                                      [OK]
openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offici…   3                                       
ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                                       [OK]
widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   1                                       [OK]
jelastic/mysql                    An image of the MySQL database server mainta…   1                                       
monasca/mysql-init                A minimal decoupled init container for mysql    0
1.6 删除镜像

docker rmi NAME[:TAG]

[root@localhost ~]# docker rmi mysql:5.7.30
Untagged: mysql:5.7.30
Untagged: mysql@sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854 
# 当同一个镜像拥有多个标签的时候,docker rmi命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件。 
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID SIZE	CREATED
mysql5 latest 9cfcce23593a 448MB	6 weeks ago
#当镜像只剩下一个标签的时候,使用docker rmi命令会彻底删除镜像 
[root@localhost ~]# docker rmi mysql5:latest 
Untagged: mysql5:latest
Deleted: sha256:9cfcce23593a93135ca6dbf3ed544d1db9324d4c40b5c0d56958165bfaa2d46a
Deleted: sha256:98de3e212919056def8c639045293658f6e6022794807d4b0126945ddc8324be
Deleted: sha256:17e8b88858e400f8c5e10e7cb3fbab9477f6d8aacba03b8167d34a91dbe4d8c1
Deleted: sha256:c04c087c2af9abd64ba32fe89d65e6d83da514758923de5da154541cc01a3a1e
Deleted: sha256:ab8bf065b402b99aec4f12c648535ef1b8dc954b4e1773bdffa10ae2027d3e00
Deleted: sha256:09687cd9cdf4c704fde969fdba370c2d848bc614689712bef1a31d0d581f2007
Deleted: sha256:b704a4a65bf536f82e5d8b86e633d19185e26313de8380162e778feb2852011a
Deleted: sha256:c37206160543786228aa0cce738e85343173851faa44bb4dc07dc9b7dc4ff1c1
Deleted: sha256:12912c9ec523f648130e663d9d4f0a47c1841a0064d4152bcf7b2a97f96326eb
Deleted: sha256:57d29ad88aa49f0f439592755722e70710501b366e2be6125c95accc43464844
Deleted: sha256:b17c024283d0302615c6f0c825137da9db607d49a83d2215a79733afbbaeb7c3
Deleted: sha256:13cb14c2acd34e45446a50af25cb05095a17624678dbafbcc9e26086547c1d74
  • 使用镜像ID删除镜像

docker rmi IMAGE ID

[root@localhost ~]# docker rmi 9cfcce23593a
Error response from daemon: conflict: unable to delete 9cfcce23593a (must be forced) - image is referenced in multiple repositories

如果有容器正在运行该镜像,则不能删除 如果想强行删除用 -f (不推荐)

1.7 上传镜像

docker push NAME[:TAG]
上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)

2. 容器

2.1 创建容器

docker create NAME[:TAG]

可以加选项参数
-i 交互模式
-t 伪终端
-d 后台运行
-rm 容器退出后是否自动删除

docker create -it nginx
2.2 启动容器

docker start 容器id

docker start 9cfcce23593a
2.3 查看容器状态

docker ps 查看运行的容器

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
ae3234e0180e        docker101tutorial   "/docker-entrypoint.…"   About an hour ago   Up About an hour    0.0.0.0:80->80/tcp   docker-tutorial

docker ps -a 查看所有容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                NAMES
ae3234e0180e        docker101tutorial   "/docker-entrypoint.…"   About an hour ago   Up About an hour               0.0.0.0:80->80/tcp   docker-tutorial
2953f92b4da8        alpine/git          "git clone https://g…"   3 hours ago         Exited (0) 3 hours ago                              repo
10974f96d19d        nginx               "/docker-entrypoint.…"   3 hours ago         Exited (0) About an hour ago                        webserver
e0114780c85c        hello-world         "/hello"                 3 hours ago         Exited (0) 3 hours ago                              magical_rubin
2.4 新建并启动容器

docker run NAME[:TAG]
相当于 docker create+docker start

docker run -it --rm --network host tomcat:8.5.56-jdk8-openjdk

可以加选项参数
–network host 使用宿主机IP地址

查看可选参数配置
man docker run
docker run --help

2.5 终止容器

docker stop 容器id -t 时间 (默认10秒)
首先向容器发送SIGTERM信号,等待一段超时时间(默认为10 秒)后,再发送SIGKILL信号来终止容器
docker kill 容器id
docker kill命令会直接发送SIGKILL信号来强行终止容器

docker stop ce554267d7a4 -t 5 
docker kill ce554267d7a4

处于终止状态的容器,可以通过docker start命令来重新启动

docker start  ce554267d7a4

docker restart命令会将一个运行态的容器先终止,然后再重新启动

docker restart ce5
2.6 进入容器

docker exec -it [容器ID] /bin/bash
早期有attach命令,对于阻塞命令会等待,所以不方便 在Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令

docker exec -it 243c32535da7 /bin/bash

无论在容器内进行何种操作,依据依据镜像创建的其他容器都不会受影响(由于namespace的隔离)(将 数据持久化的除外) exec: 容器执行某操作,操作为容器ID后边的命令 -it: 以伪终端模式,这样我们就 相当于进入到容器中了

2.7 查看容器

docker inspect [容器ID]

docker inspect 243c32535da7

docker stats [容器ID]

docker stats 243c32535da7

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
10974f96d19d        webserver           0.00%               0B / 0B             0.00%               0B / 0B             0B / 0B             0
2.8 删除容器

docker rm [容器ID]

docker rm 243c32535da7

docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器 要直接删除一个运行中的容器,可以添加-f参数。Docker会先 发送SIGKILL信号给容器,终止其中的应用,之后强行删除

3. 仓库

Docker Hub是最大的公共镜像仓库(https://hub.docker.com/)
在公共仓库中注册一个账号,每ID可以免费拥有1个私有镜像

3.1 登录仓库

docker login -u username -p password

默认登陆的是docker hub

[root@localhost ~]# docker login -u gavinli80s -p ljp123465
WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

登录成功的用户可以上传个人制造的镜像。
用户无需登录即可通过docker search命令来查找官方仓库中的镜 像,并利用docker pull命令来将它下 载到本地

3.2 退出仓库

docker logout
可以同时登陆多个docker仓库,因此此命令一般不执行

[root@localhost ~]# docker logout
Removing login credentials for https://index.docker.io/v1/
3.3 认证文件

Mac/Win机器上的是隐藏密码的,但是在Linux下是显示密码的,只不过进行了base64编码, 只要拷贝 此文件到其他机器指定目录下(/root/.docker/config.json)即可免登录

{
	"auths": { 
		"https://index.docker.io/v1/": {
                "auth": "Z2F2aW5saTgwczpsanAxMjM0NjU="
		} 
	},
	"HttpHeaders": {
		"User-Agent": "Docker-Client/19.03.12 (linux)"
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值