docker容器学习整理(代码片段)

author author     2022-12-22     467

关键词:

一、使用Docker镜像
1.1 docker常用命令
1.2 创建镜像
1.3 存出和载入镜像
1.4 上传镜像

二、操作docker容器
2.1 创建容器
2.2 终止容器
2.3 进入容器
2.4 删除容器
2.5 导入和导出容器

三、访问Docker仓库

一、docker基本管理
1.1 docker常用命令
1.1.1 docker images # 列出本机已有镜像
1.1.2 tag命令添加镜像标签
1.1.3 docker inspect 查看镜像详细信息
1.1.4 history 查看镜像历史
1.1.5 docker search 搜索镜像
1.1.6 docker rmi 删除镜像

1.1.1 docker images 命令详解:

列出镜像:

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              5182e96772bf        7 days ago          200 MB
docker.io/nginx     latest              c82521676580        2 weeks ago         109 MB

常用参数:

-a , —all=true|false     # 列出所有的镜像文件(包括临时文件),默认为否;
—digests=true|false    # 列出镜像的数字摘要值,默认为否;
-q , —quiet=true|false  # 仅输出ID信息,默认为否

—digests=true|false # 列出镜像的数字摘要值,默认为否;

[[email protected] ~]# docker images --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
docker.io/centos    latest              sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf   5182e96772bf        7 days ago          200 MB
docker.io/nginx     latest              sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424   c82521676580        2 weeks ago         109 MB

-q , —quiet=true|false  # 仅输出ID信息,默认为否
[[email protected] ~]# docker images -q
5182e96772bf
c82521676580

1.1.2 tag命令添加镜像标签

[[email protected] ~]# docker tag centos:latest ylcentos:latest
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              5182e96772bf        7 days ago          200 MB
ylcentos            latest              5182e96772bf        7 days ago          200 MB

centos:latest 镜像的ID和 ylcentos:latest 完全一致,它们实际指向同一个镜像文件,只是别名不同,docker tag命令添加的标签实际上起到了类似链接的作用;

1.1.3 docker inspect 查看镜像详细信息
包括:制作者、适应架构、各层的数字摘要等

[[email protected] ~]# docker inspect ylcentos:latest
[
    
        "Id": "sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892",
        "RepoTags": [
            "docker.io/centos:latest",
            "ylcentos:latest"
        ],
        "RepoDigests": [
            "docker.io/[email protected]:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-08-06T19:21:48.235227329Z",
        "Container": "d60ffc9ddd12462af4bdcdbe45b74f3b3f99b46607ada80c3ed877b7def84250",
        "ContainerConfig": 
            "Hostname": "d60ffc9ddd12",
            "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:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": 
                "org.label-schema.build-date": "20180804",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            
        ,
        "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:748eacc0f236df2fc9ba87c4d76a66cb10742120387e99e2acdb9454915c841d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": 
                "org.label-schema.build-date": "20180804",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            
        ,
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 199723824,
        "VirtualSize": 199723824,
        "GraphDriver": 
            "Name": "overlay2",
            "Data": 
                "MergedDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/merged",
                "UpperDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/diff",
                "WorkDir": "/var/lib/docker/overlay2/b06aedc45e998ab1b8761a2ddd98a6b75fc73f293dba4693ca8bcb0ee1aa5d6b/work"
            
        ,
        "RootFS": 
            "Type": "layers",
            "Layers": [
                "sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a"
            ]
        
    
]

返回的是JSON格式的内容,如果只需要其中一项可以用-f 参数来指定

[[email protected] ~]# docker inspect -f " .Architecture " ylcentos
amd64

1.1.4 history 查看镜像历史
查看nginx:latest 镜像的创建过程

[[email protected] ~]# docker history nginx:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
c82521676580        2 weeks ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daem...   0 B                 
<missing>           2 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0 B                 
<missing>           2 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
<missing>           2 weeks ago         /bin/sh -c ln -sf /dev/stdout /var/log/ngi...   22 B                
<missing>           2 weeks ago         /bin/sh -c set -x  && apt-get update  && a...   53.7 MB             
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV NJS_VERSION=1.15.2....   0 B                 
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15....   0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX ...   0 B                 
<missing>           4 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:919939fa0224727...   55.3 MB             

1.1.5 docker search 搜索镜像
可以搜索远端仓库中共享的镜像,默认搜素官方仓库中的镜像;

—automated=true|false # 仅显示自动创建的镜像,默认为否
—no-trunc=true|false # 输出信息不截断显示,默认为否
-s # 指定仅显示为指定星级以上的镜像,默认为0,即输出所有镜像

[[email protected] ~]# docker search --automated -s 3 nginx
Flag --automated has been deprecated, use --filter=automated=true instead
Flag --stars has been deprecated, use --filter=stars=3 instead
INDEX       NAME                                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker c...   1381                 [OK]
docker.io   docker.io/richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable ...   609                  [OK]
docker.io   docker.io/jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as...   394                  [OK]
docker.io   docker.io/webdevops/php-nginx                                    Nginx with PHP-FPM                              109                  [OK]
docker.io   docker.io/zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   61                   [OK]
docker.io   docker.io/bitnami/nginx                                          Bitnami nginx Docker Image                      57                   [OK]
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          43                   [OK]
docker.io   docker.io/tobi312/rpi-nginx                                      NGINX on Raspberry Pi / armhf                   20                   [OK]
docker.io   docker.io/blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                   [OK]
docker.io   docker.io/wodby/drupal-nginx                                     Nginx for Drupal container image                10                   [OK]
docker.io   docker.io/nginxdemos/hello                                       NGINX webserver that serves a simple page ...   8                    [OK]
docker.io   docker.io/webdevops/nginx                                        Nginx container                                 8                    [OK]
docker.io   docker.io/1science/nginx                                         Nginx Docker images that include Consul Te...   4                    [OK]

1.1.6 docker rmi 删除镜像

1.1.6.1 使用标签删除镜像
命令格式:docker rmi IMAGE[IMAGE…] # 其中image可以为标签或者ID

[[email protected] ~]# docker rmi ylcentos:latest
Untagged: ylcentos:latest
Untagged: docker.io/[email protected]:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf

本地的centos:latest 镜像是否会受此命令的影响?当同一镜像有多个标签的时候,docker rmi命令指示删除该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上面的操作相当于知识删除了镜像5182e96772bf的一个标签而已;

但是当镜像只剩下一个标签的时候要注意,此时再使用docker rmi命令会彻底删除镜像

1.1.6.2 使用镜像ID删除镜像

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

如果想要强行删除镜像,可以使用-f参数

[[email protected] ~]# docker rmi -f ylcentos:latest
Untagged: ylcentos:latest

注意:通常并不推荐使用-f参数来强行删除一个存在容器依赖的镜像;正确的做法是,先先删除依赖该镜像的所有容器,再来删除镜像;

1.2 创建镜像

创建镜像的方法有三种:
1、基于已有镜像的容器创建
2、基于本地模版导入
3、基于Dockerfile创建

1.2.1 基于已有镜像的容器创建
使用命令 docker commit
命令格式: docker commit [OPTIONS] CONTAINER [REPOSITORY[ : TAG]]

-a , —author=“”    # 作者信息
-c , —change=[] : 提交的时候执行Dockerfile指令
-m , —message=“” : 提交信息
-p , —pause=true : 提交时暂停容器运行
[[email protected] ~]# docker run -it centos:latest /bin/bash
[[email protected] /]# touch test

记住容器的ID为:8eebcce9722a
此时该容器跟原centos:latest 镜像相比,已经发生了改变,可以使用 docker commit 命令来提交为一个新的镜像,提交时可以使用ID或名称来指定容器;

[[email protected] ~]# docker commit -m "Added a new file" -a "Docker Newbee" 8eebcce9722a test:0.1
sha256:7c0264a9876f6eb69d90b93ed3dcc2a651ddffc59b11cf3bf3729ef9e3b9ece5

docker commit提交完新的镜像后,会返回新创建的镜像ID信息,例如:7c0264a9876f6eb69d90b93ed3dcc2a651ddffc59b11cf3bf3729ef9e3b9ece5

此时新创建的镜像 test:0.1已经存在于本地镜像列表当中:

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 7c0264a9876f        8 minutes ago       200 MB
docker.io/centos    latest              5182e96772bf        7 days ago          200 MB
docker.io/nginx     latest              c82521676580        2 weeks ago         109 MB

1.2.2 基于本地模版导入

用户也可以直接从一个操作系统模板文件导入一个镜像,主要是用docker import命令;
命令格式: docker import [OPTION] file|URL|-[REPOSITORY[:tag]]

1.3 存出和载入镜像

使用 docker save和docker load 命令来存出和载入镜像

1.3.1 存出镜像

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 7c0264a9876f        8 minutes ago       200 MB
docker.io/centos    latest              5182e96772bf        7 days ago          200 MB
docker.io/nginx     latest              c82521676580        2 weeks ago         109 MB
You have new mail in /var/spool/mail/root
[[email protected] ~]# docker save -o test_0.1.tar test:0.1
[[email protected] images]# ll
total 406848
-rw------- 1 root root 208305664 Aug 14 15:46 test_0.1.tar

用户可以通过复制 test_0.1.tar 文件将该镜像分享给他人;

1.3.2 载入镜像

[[email protected] images]# docker load --input test_0.1.tar 
1cee2207e92e: Loading layer [==================================================>] 2.048 kB/2.048 kB
Loaded image: test:0.1

或者:
[[email protected] images]# docker load < test_0.1.tar 
1cee2207e92e: Loading layer [==================================================>] 2.048 kB/2.048 kB
Loaded image: test:0.1
[[email protected] images]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 7c0264a9876f        32 minutes ago      200 MB
docker.io/centos    latest              5182e96772bf        7 days ago          200 MB
docker.io/nginx     latest              c82521676580        2 weeks ago         109 MB

1.4 上传镜像

可以使用docker push 命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录)

命令格式:
docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/] NAME[:TAG]

二、操作docker容器

容器是Docker的另一个核心概念,简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机时模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。

2.1 创建容器

2.1.1 docker create 新建一个镜像

[[email protected] images]# docker create -it centos:latest
d166acc28fb35b0998a8fd275219c36019270ebba005d819424dff01c9cfa912

[[email protected] images]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d166acc28fb3        centos:latest       "/bin/bash"              16 seconds ago      Created                                         angry_dubinsky

使用docker create 创建的容器处于停止状态,可以使用docker start 命令来启动;

2.1.2 docker start 启动一个容器

[[email protected] images]# docker start d166acc28fb3
d166acc28fb3

使用docker ps查看运行的容器
[[email protected] images]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d166acc28fb3        centos:latest       "/bin/bash"         9 minutes ago       Up 11 seconds                           angry_dubinsky

2.1.3 docker run 新建镜像并启动容器

docker run等价于先执行docker create命令,再执行docker start命令

例如:

[[email protected] images]# docker run centos /bin/echo  ‘Hello World!‘
Hello World!

这和在本地直接执行/bin/echo ‘Hello World!’几乎感觉不出任何区别。
当利用docker run 创建并启动容器时,docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
  • 利用镜像创建一个容器,并启动该容器;
  • 分配一个文件系统容器,并在只读的镜像层外面挂载一层可读写层;
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
  • 从网桥的地址池配置一个IP地址给容器;
  • 执行用户指定的应用程序;
  • 执行完毕后容器被自动终止;

下面启动一个bash终端,允许用户进行交互

[[email protected] images]# docker run -it centos:latest /bin/bash
[[email protected] /]# 

[[email protected] /]# pwd
/
[[email protected] /]# 
[[email protected] /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# ps
  PID TTY          TIME CMD
    1 ?        00:00:00 bash
   16 ?        00:00:00 ps

在容器内用ps命令查看进程,可以看到,只运行了bash应用,并没有运行其他无关进程;

用户可以按 Ctrl + d或者exit命令来退出容器

有时候,执行docker run会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码:

默认情况下,常见错误代码包括:

*     125 : docker daemon 执行出错,例如指定了不支持的Docker命令参数;
*     126 : 所指定命令无法执行,例如权限出错;
*     127 : 容器内命令无法找到;

命令执行后出错,会默认返回错误码。

2.1.4、守护态运行

更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。

例如:

[[email protected] images]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"
972fa26b30d3704d42659bf07163101c6df1f8284094694672a5e77208908a1d

容器启动后会返回一个唯一的id,也可以通过docker ps命令来查看容器信息;

[[email protected] images]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
972fa26b30d3        centos              "/bin/sh -c ‘while..."   5 seconds ago       Up 5 seconds                            relaxed_spence

如果要获取容器的输出信息,可以如下使用docker logs命令:

[[email protected] images]# docker logs 972fa26b30d3
hello world
hello world
hello world

2.2 终止容器

可以使用docker stop来终止一个运行中的容器。
命令格式:docker stop [-t | —time[=10]][CONTAINER…]

首先向容器发送SIGTERM信号,等待一段超时时间(默认为10S)后,在发送SIGKILL信号来终止容器:

[[email protected] images]# docker stop 972fa26b30d3
972fa26b30d3

docker ps -qa命令看到所有容器ID,例如:

[[email protected] images]# docker ps -qa
972fa26b30d3
367ec9a9e5b3
e9cd796bf46b
2711b952d41a
d166acc28fb3

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

docker restart

[[email protected] images]# docker restart 972fa26b30d3
972fa26b30d3

2.3 进入容器

2.3.1 attach 命令

attach是Docker自带的命令,命令格式为:
    docker attach [—detach-key[=[]]] [—no-stdin] [—sig-proxy[=true]] CONTAINER
[[email protected] images]# docker run -itd centos
519fe978cd650b265d76b5703c7e322cfabcbb35863a4e73294baff1e6590f31

[[email protected] images]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
519fe978cd65        centos              "/bin/bash"              6 seconds ago       Up 5 seconds                            elegant_bassi

[[email protected] images]# docker attach elegant_bassi
[[email protected] /]#

但是使用attach命令有时候并不方便,当多个窗口同时用attach命令连到同一个容器的时候,所有窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

2.3.2 exec 命令

命令格式:

docker exec [-d | —detach] [—detach-key[=[]]] [-I | —interactive] [—privileged]  [-t | —tty] [-u | —user[=USER]] CONTAINER COMMAND [ARG…]
[[email protected] images]# docker exec -it 519fe978cd65 /bin/bash
[[email protected] /]# 

可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易与容器进行交互。

注意:通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式;

2.3.3 nsenter 工具

提示:生产场景是不使用docker attach的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面;
[[email protected] ~]# yum install util-linux -y
Centos7默认最小化已经安装

为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:

PID=$(docker inspect —format “ .State.Pid ”)  <container>

[[email protected] images]# docker inspect -f " .State.Pid " 519fe978cd65
29435
[[email protected] images]# docker inspect -f " .State.Pid " elegant_bassi
29435

通过这个PID,就可以连接到这个容器:

[[email protected] images]# nsenter --target 29435 -m -u -i -n -p
[[email protected] /]# 

例子:
[[email protected] images]# docker run -itd centos
48aa2e39595a3f1ed63b872eeb0efd5f651ed39fe8d506779dd3287cdf120402

[[email protected] images]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
48aa2e39595a        centos              "/bin/bash"         7 seconds ago       Up 6 seconds                            hardcore_davinci

[[email protected] images]# docker inspect -f " .State.Pid " 48aa2e39595a
29624
[[email protected] images]# nsenter --target 29624 -m -u -i -n -p
[[email protected] /]# 

2.4 删除容器

可以使用 docker rm 命令来删除处于终止或退出状态的容器;

命令格式:docker rm [-f | —force] [-l | —link] [-v | —volumes] CONTAINER[CONTAINER…]

主要支持的选项包括:
-f , —force=false : 是否强行终止并删除一个运行中的容器;
-l , —link=false : 删除容器的连接,但保留容器;
-v, —volumes=false : 删除容器挂载的数据卷;

例如,查看处于终止状态的容器,并删除:

[[email protected] images]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
972fa26b30d3        centos              "/bin/sh -c ‘while..."   4 hours ago         Exited (137) 3 hours ago                        relaxed_spence

[[email protected] images]# docker rm 972fa26b30d3
972fa26b30d3

默认情况下,docker rm命令智能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器。

如果要直接删除一个运行中的容器,可以添加-f 参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除;

例子:

[[email protected] images]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
48aa2e39595a        centos              "/bin/bash"              3 hours ago         Up 3 hours                                      hardcore_davinci

[[email protected] images]# docker rm 519fe978cd65
Error response from daemon: You cannot remove a running container 519fe978cd650b265d76b5703c7e322cfabcbb35863a4e73294baff1e6590f31. Stop the container before attempting removal or use -f

[[email protected] images]# docker rm -f 48aa2e39595a
48aa2e39595a

2.5 导入和导出容器

有些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能,这也是Docker自身提供的一个重要特性;

2.5.1 导出容器
导出容器是指导初一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令;

命令格式:
docker export [-o | —output[=“”]] CONTAINER
其中,可以通过-o 选项来指定导出的tar文件名,也可以直接通过重定向来实现。

[[email protected] images]# docker export -o centos_7.1.tar 519fe978cd65
或者
[[email protected] images]# docker export 519fe978cd65 > centos_7.2.tar
[[email protected] images]# ll
total 813680
-rw------- 1 root root 208294400 Aug 15 15:45 centos_7.1.tar
-rw-r--r-- 1 root root 208294400 Aug 15 15:46 centos_7.2.tar

之后,可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,从而实现容器的迁移;

2.5.2 导入容器

导出的文件又可以使用 docker import命令导入变成镜像

[[email protected] images]# docker import centos_7.1.tar test/centos:v1.0  
sha256:6433c6458e515b27e4e98387685f6d791c34ff5c4b55184b13e075a51b08d5ac

[[email protected] images]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/centos         v1.0                6433c6458e51        31 seconds ago      200 MB

docker load命令来导入一个镜像文件,与docker export命令十分相似;

实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。

这两者的区别在与容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

docker学习整理四拉起mysql容器学习简单使用(代码片段)

前几篇文章已经学了简单docker使用,现在用拉起mysql容器的小例子具体操作下。docker拉起mysql容器拉取mysql镜像dockerpullmysql后台启动mysql容器dockerrun-dmysql此时我们用dockerps查看是看不到的,用dockerps-a查看可以,说明该容... 查看详情

docker学习整理六创建镜像(代码片段)

docker学习整理六创建镜像dockercommit其实镜像的一些操作类似git。我们之前的centos容器中,安装了mysql的客户端,那么我们把这个容器打成镜像,之后通过这个镜像拉起的容器就默认包含mysql客户端了。dockercommit-a="... 查看详情

docker学习整理二简单使用(代码片段)

docker学习整理二简单使用配置镜像:静态文件,容器依赖于镜像创建。仓库:存放一堆镜像的仓库。先简单介绍,后续详细说。由于docker自己的仓库不太好用,我们需要自己配置一个仓库地址,配置方式&#x... 查看详情

docker常用命令整理(代码片段)

文章目录前言docker常用命令整理01查看docker系统02查看所有信息03列出已经下载的镜像04查找官方仓库中的镜像05下载镜像06启动镜像07停止容器07::01停止容器07::02停用全部运行中的容器:07::03删除全部容器07::04一条命令实现停... 查看详情

docker常用命令整理(代码片段)

文章目录前言docker常用命令整理01查看docker系统02查看所有信息03列出已经下载的镜像04查找官方仓库中的镜像05下载镜像06启动镜像07停止容器07::01停止容器07::02停用全部运行中的容器:07::03删除全部容器07::04一条命令实现停... 查看详情

docker学习整理六创建镜像(代码片段)

docker学习整理六创建镜像dockercommit其实镜像的一些操作类似git。我们之前的centos容器中,安装了mysql的客户端,那么我们把这个容器打成镜像,之后通过这个镜像拉起的容器就默认包含mysql客户端了。dockercommit-a="... 查看详情

docker整理(代码片段)

 Docker的简单介绍docker是什么Docker最初是dotCloud公司创始人SolomonHykes在法国期间发起的一个公司内部项目,于2013年3月以Apache2.0授权协议开源,主要项目代码在GitHub上进行维护。Docker使用Google公司推出的Go语言进行开发实现。doc... 查看详情

docker知识点翻阅手册--docker常用命令dockererfilecompose网络等整理合集(代码片段)

文章目录一、Docker常用命令1、Docker容器信息2、镜像操作2.1、镜像查看2.2、镜像搜索2.3、镜像下载2.4、镜像删除2.5、镜像构建3、容器操作3.1、容器启动3.2、容器进程3.3、容器日志3.4、容器的进入与退出3.5、查看容器3.6、容器的停... 查看详情

docker学习笔记——docker管理容器(代码片段)

文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情

docker学习笔记——docker管理容器(代码片段)

文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情

docker学习整理一安装(代码片段)

docker学习整理一安装docker个人理解,docker是一个可以快速抽象出一个与宿主相同环境的工具,便于程序测试以及生产部署。暂时只介绍如何快速上手使用。至于学习docker,最好的资料还是官方文档,没有之一。安... 查看详情

docker命令整理&示例(代码片段)

...有示例的命令,将container_name/image_name进行对应替换.docker中有REPOSITORY,TAG,IMAGE,CONTAINER的概念docker命令中的镜像名,容器名支持使用Tab键进行联想1Docker容器docker中默认的命令是对容器进行操作,现在看到... 查看详情

docker-compose常用命令整理:(代码片段)

docker-compose-fmy.yamlversion查看docker-compose版本信息docker-compose-flnmp.yamlimages列出镜像docker-compose-flnmp.yamlimages-q列出镜像IDdocker-composeup-dnginx构建建启动nignx容器docker-composeexecnginxbash登录到nginx容器中docker-compose-flnmp.yamlexecnginxenv在容器中... 查看详情

docker学习笔记(代码片段)

前言在我之前的博文中用到过两次Docker,但所涉及的内容过于碎片,因此想系统地将Docker的知识整理一下。Docker基本概念docker最重要的三个概念是:镜像(image),容器(container),仓库(re... 查看详情

docker学习笔记(代码片段)

前言在我之前的博文中用到过两次Docker,但所涉及的内容过于碎片,因此想系统地将Docker的知识整理一下。Docker基本概念docker最重要的三个概念是:镜像(image),容器(container),仓库(re... 查看详情

docker学习5docker容器网络(代码片段)

一、内核网络名称空间  1、可通过ipnetns进行操作[[email protected]/]#ipnetnshelpUsage:ipnetnslistipnetnsaddNAMEipnetnssetNAMENETNSIDip[-all]netnsdelete[NAME]ipnetnsidentify[PID]ipnetnspidsNAMEip[-all]netnsexec[NAME]cmd...ipnetnsmonitoripnetnslist-id  查看详情

docker学习(代码片段)

1、简介Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启... 查看详情

复习整理8:docker:一个装应用的容器(代码片段)

...们有写死循环了““完了,服务器撑不住了“等等问题,docker就是这么帮你解决问题的工具,它可以帮你把web应用自动化打包和发布,在服务型环境下进行部署和调整数据库或其他的后台应用。二:核心技术   1:命名空间... 查看详情