• Docker 基本操作


     查看 Docker 的版本信息

    [root@docker ~]# docker version
    Client: Docker Engine - Community
    Version: 19.03.4
    API version: 1.40
    Go version: go1.12.10
    Git commit: 9013bf583a
    Built: Fri Oct 18 15:52:22 2019
    OS/Arch: linux/amd64
    Experimental: false

    Server: Docker Engine - Community
    Engine:
    Version: 19.03.8
    API version: 1.40 (minimum version 1.12)
    Go version: go1.12.17
    Git commit: afacb8b
    Built: Wed Mar 11 01:25:42 2020
    OS/Arch: linux/amd64
    Experimental: false
    containerd:
    Version: 1.2.10
    GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
    runc:
    Version: 1.0.0-rc8+dev
    GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
    docker-init:
    Version: 0.18.0
    GitCommit: fec3683

    查看 docker 的详细信息

    [root@docker ~]# docker info
    Client:
    Debug Mode: false

    Server:
    Containers: 3
    Running: 2
    Paused: 0
    Stopped: 1
    Images: 3
    Server Version: 19.03.8
    Storage Driver: overlay2
    Backing Filesystem: <unknown>
    Supports d_type: true
    Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
    Volume: local
    Network: bridge host ipvlan macvlan null overlay
    Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
    runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
    init version: fec3683
    Security Options:
    seccomp
    Profile: default
    Kernel Version: 3.10.0-862.el7.x86_64
    Operating System: CentOS Linux 7 (Core)
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 1.936GiB
    Name: docker
    ID: 4Q5Z:EBZC:TQEF:UY3U:GH4W:RHHS:RTSZ:X6QM:7PGN:6EIK:BLAF:5TPB
    Docker Root Dir: /var/lib/docker
    Debug Mode: false
    Registry: https://index.docker.io/v1/
    Labels:
    Experimental: false
    Insecure Registries:
    127.0.0.0/8
    Registry Mirrors:
    https://xc1orh81.mirror.aliyuncs.com/
    Live Restore Enabled: false

    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled

    Docker镜像操作

    1、搜索镜像

      Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库 https://hub.docker.com 下载,这是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求,用户也可以通过配置来使用自定义的镜像仓库。

    docker search //从 Docker Hub 搜索镜像

    命令格式:docker search 关键字

    参数:

    --automated=false  仅显示自动创建的镜像

    --no-trunc=false     输出信息截断显示

    -s,--stars=0             指定仅显示评价为指定星级以上的镜像

    [root@docker ~]# docker search dhcp
    NAME                                                               DESCRIPTION                                                                   STARS                                OFFICIAL                                         AUTOMATED
    networkboot/dhcpd                                           Suitable for running a DHCP server for your ...                   46                                                                                                 [OK]
    joebiellik/dhcpd                                                 DHCP server running on Alpine Linux                                 16                                                                                                 [OK]
    gns3/dhcp                                                         A DHCP container for GNS3 using dnsmasq                       3                                                                                                   [OK]
    instantlinux/dhcpd-dns-pxe                              Serve DNS, DHCP and TFTP from a small Alpine…            2                                                                                                   [OK]
    modularitycontainers/dhcp-server                    ISC DHCP server                                                                  2                                                                                                   [OK]
    ictu/dhcpd-tftpd                                                 dhcpd tftpd container                                                            1                                                                                                   [OK]
    mobylinux/dhcp-client                                                                                                                                     1
    njd90/dhcpd6                                                    This Docker image is suitable for running a …                     1                                                                                                   [OK]
    marcelwiget/dhcptester                                     Simple dhcp client simulator for untagged, s…                    1
    onesourceintegrations/dhcp                                                                                                                           0
    mellanox/dhcp-cni                                             K8s dhcp cni plugin                                                              0
    kramergroup/dhcpmanager-apiserver                                                                                                            0
    kramergroup/dhcpmanager-controller                                                                                                            0
    modularitycontainers/dhcp-client                       DHCP client                                                                         0                                                                                                    [OK]
    linuxkit/dhcpcd                                                   LinuxKit dhcpcd package                                                     0
    wastrachan/dhcpd                                             ISC DHCP Server in a Docker container, with …                 0
    babim/dhcpd                                                      dhcpd on Alpine Linux                                                          0                                                                                                   [OK]
    crazymanjinn/dhcpd                                          alpine dhcpd                                                                          0                                                                                                   [OK]
    pnnlmiscscripts/dhcpd                                                                                                                                     0
    feduxorg/dhcpd                                                  ICS DHCP Daemon Image                                                  0
    biomedia/dhcp-structural-pipeline                      The dHCP structural pipeline performs struct…                  0
    kosdk/dhcpd                                                       ISC DHCP Server Container.                                              0
    fouadchamoun/dhcp-helper                               Lightweight DHCP Relay                                                     0
    engines/dhcpd                                                                                                                                                0
    hanlon/dhcproxy                                                dhcproxy augments local unmodified dhcp serv…              0                                                                                                     [OK]

    [root@docker ~]# docker search -s 10 dhcp
    Flag --stars has been deprecated, use --filter=stars=3 instead
    NAME                                                                     DESCRIPTION                                                          STARS                                       OFFICIAL                                   AUTOMATED
    networkboot/dhcpd                                                 Suitable for running a DHCP server for your …         46                                                                                                       [OK]
    joebiellik/dhcpd                                                       DHCP server running on Alpine Linux                       16                                                                                                       [OK]

      返回很多包含 dhcp 关键字的镜像,其中返回信息包括镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序,表示该镜像的受欢迎度。在下载镜像时,可以参考这一项,在搜索时还可以使用 -s 或者 -stars=x 显示指定星级以上的镜像,x 为任意数。星级越高表示越受欢迎;是否为官方镜像一项是指是否是由官方项目组创建和维护的镜像,一般官方项目组维护的镜像单个单词作为镜像名称。我们称为基础镜像或者根镜像。像 reinblau/dhcp 这种命名方式的镜像,表示是由 Docker Hub 的用户 reinblau 创建并维护的镜像,带有用户名为前缀;是否主动创建资源则是指是否允许用户验证镜像的来源和内容。

      使用 docker search 命令只能查找镜像,镜像的标签无法查找,因此如果需要查找 docker 标签,需要从网页上访问镜像仓库 https://hub.docker.com 进行查找。

    2、获取镜像

    搜索到符合需求的镜像,可以使用 docker pull 命令从网络下载镜像到本地使用。

    命令格式:docker pull 仓库名称[:标签]

      对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest,也可以通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版本的。

    [root@docker ~]# docker pull docker.io/nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    c499e6d256d6: Pull complete
    74cda408e262: Pull complete
    ffadbd415ab7: Pull complete
    Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest

      从整个下载的过程可以看出,镜像文件由若干层(Layer)组成,我们称为 AUFS(联合文件系统),是实现增量保存于更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。

      用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。

    3、查看镜像信息

    使用 docker images 命令查看下载到本地的所有镜像。

    命令格式:docker images 仓库名称[:标签]

    [root@docker ~]# docker images
    REPOSITORY    TAG         IMAGE ID               CREATED                     SIZE
    nginx                   latest        ed21b7a8aee9        3 days ago                   127MB
    nginx                   <none>    540a289bab6c        5 months ago                126MB

      docker images nginx 查看某一类镜像

    从回显的信息看:

    REPOSITORY    镜像所属仓库

    TAG                    镜像的标签信息

    IMAGE ID           镜像的唯一 ID

    CREATED          镜像创建时间

    SIZE                   镜像大小

    4、获取镜像的详细信息

    命令格式:docker inspect 镜像ID

    [root@docker ~]# docker inspect ed21b7a8aee9
    [
    {
    "Id": "sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291",
    "RepoTags": [
    "nginx:latest"
    ],
    "RepoDigests": [
    "nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596"
    ],
    "Parent": "",
    "Comment": "",
    "Created": "2020-03-31T03:19:30.487069362Z",
    "Container": "5c86b143cf5caec0aed5c331922c243f00600152ec0e9ecbe8531771562e72b8",
    "ContainerConfig": {
    "Hostname": "5c86b143cf5c",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
    "80/tcp": {}
    },
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "NGINX_VERSION=1.17.9",
    "NJS_VERSION=0.3.9",
    "PKG_RELEASE=1~buster"
    ],
    "Cmd": [
    "/bin/sh",
    "-c",
    "#(nop) ",
    "CMD ["nginx" "-g" "daemon off;"]"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": {
    "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
    },
    "StopSignal": "SIGTERM"
    },
    "DockerVersion": "18.09.7",
    "Author": "",
    "Config": {
    "Hostname": "",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
    "80/tcp": {}
    },
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "NGINX_VERSION=1.17.9",
    "NJS_VERSION=0.3.9",
    "PKG_RELEASE=1~buster"
    ],
    "Cmd": [
    "nginx",
    "-g",
    "daemon off;"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": {
    "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
    },
    "StopSignal": "SIGTERM"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 126769107,
    "VirtualSize": 126769107,
    "GraphDriver": {
    "Data": {
    "LowerDir": "/var/lib/docker/overlay2/1fbda13bf61c46e7a174079d3d43cb09488c7606718256d4303c9c7dabc9dc8d/diff:/var/lib/docker/overlay2/76b95173415a45153616dab4ceeb104b4a85d1db21b97e50d78a8da53d6acdbb/diff",
    "MergedDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/merged",
    "UpperDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/diff",
    "WorkDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/work"
    },
    "Name": "overlay2"
    },
    "RootFS": {
    "Type": "layers",
    "Layers": [
    "sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45",
    "sha256:99134ec7f247e5a211c7205fec587bf72a6d4aac339b21858b892e9c04f78920",
    "sha256:d37eecb5b7691ec21bd19989e37f8bb4d20b340a775591d0f3db5897d606b0e4"
    ]
    },
    "Metadata": {
    "LastTagTime": "0001-01-01T00:00:00Z"
    }
    }
    ]

      镜像的详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。

    5、为镜像添加新的标签

    命令格式: docker tag 名称[:标签] 新名称[:标签]

    [root@docker ~]# docker tag nginx nginx:nginx
    [root@docker ~]# docker images
    REPOSITORY           TAG         IMAGE ID               CREATED          SIZE
    nginx                          latest         ed21b7a8aee9      3 days ago          127MB
    nginx                          nginx         ed21b7a8aee9      3 days ago          127MB
    nginx                          <none>      540a289bab6c      5 months ago     126MB

    6、删除镜像

    使用 docker rmi 命令可以删除多余的镜像

    删除镜像的操作有两种方法:使用镜像的标签删除镜像;使用镜像的ID删除镜像。

    命令格式

    docker rmi  仓库名称[:标签]

    docker rmi  镜像ID

    [root@docker ~]# docker rmi nginx:nginx
    Untagged: nginx:nginx
    Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
    Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
    Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
    Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
    Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45

      当一个镜像有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件,相当于只是删除了镜像的一个标签而已,但该镜像只剩下一个标签的时候就要小心了,再使用删除命令就会彻底删除该镜像。

    例如:上面的操作删除 nginx:nginx 镜像时,可以看出删除了整个镜像文件的所有层。

      当使用 docker rmi 命令后面跟上镜像的ID号时,必须保证该镜像没有被容器使用才能进行,删除时系统会先删除所有指向该镜像的标签,然后删除该镜像文件本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

    [root@docker ~]# docker rmi 540a289bab6c
    Error response from daemon: conflict: unable to delete 540a289bab6c (must be forced) - image is being used by stopped container 17d9ccf1815c

    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE                COMMAND                         CREATED                 STATUS                                     PORTS                       NAMES
    17d9ccf1815c            540a289bab6c    "nginx -g 'daemon of…"      4 months ago             Exited (0) 4 months ago                                               dreamy_moser
    fe6168054c36           540a289bab6c     "/bin/bash"                          4 months ago             Exited (0) 4 months ago                                               gallant_khayyam
    3756a7fe77be           540a289bab6c     "/bin/bash"                          4 months ago             Exited (0) 4 months ago                                               suspicious_kare

    7、存出镜像和载入镜像

      当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一个过程叫做存出镜像,可以使用 docker save 命令进行存出操作。之后就可以复制该文件到其他机器。

    命令格式: docker save -o 存出镜像为本地文件

    [root@docker ~]# docker save -o nginx-latest.tar nginx:latest
    [root@docker ~]# ls
    anaconda-ks.cfg        git-2.22.0.tar.gz             git_data.git             nginx-latest.tar

    将存出的镜像从 A 机器拷贝到 B 机器,需要在 B 机器上使用该镜像,就可以将该导出文件导入到 B 机器的镜像库中,这一过程叫做载入镜像。使用 docker load 或者 docker --input 进行载入操作。

    命令格式:docker load  < 存出的文件 或者 docker load --input 存出的文件

    [root@docker ~]# docker load < nginx-latest.tar
    c3a984abe8a8: Loading layer 72.48MB/72.48MB
    99134ec7f247: Loading layer 58.11MB/58.11MB
    d37eecb5b769: Loading layer 3.584kB/3.584kB
    Loaded image: nginx:latest

    [root@docker ~]# docker load --input nging-latest.tar
    c3a984abe8a8: Loading layer 72.48MB/72.48MB
    99134ec7f247: Loading layer 58.11MB/58.11MB
    d37eecb5b769: Loading layer 3.584kB/3.584kB
    Loaded image: nginx:latest

    8、上传镜像

      本地存储的镜像越来越多,就需要指定一个专门存放这些镜像的地方——仓库。目前比较方便的就是公共仓库,默认上传到 Docker Hub 官方仓库,需要注册使用公共仓库的账号,可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前,需要对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

    命令格式:docker push 仓库名称:标签

    例如:在公共仓库上已经注册成功了一个账号,这个账号叫做 wxl2567

    Docker 容器操作

    1、创建容器与运行容器

       Docker 的创建就是将镜像加载到容器的过程,Docker 的容器十分轻量级,用户可以随时创建或者删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全停止。停止的容器可以重新启动并保留原来的修改。可以使用 docker create 命令新建一个容器。

    命令格式:docker create [选项]...  镜像  运行的程序

    常用选项:

    -i       让容器的输入保持打开

    -t       让 Docker 分配一个伪终端

    -d      守护进程形式运行(后台运行)

    -p      端口映射(让容器的端口与宿主机的端口关联)

    -v      目录映射(两个目录内容相同,就相当于一个)

    [root@docker ~]# docker create -it nginx:latest /bin/bash
    458b25c30f49fdb27aee14b32d10bc687d9f1dc977174f5b7c19fef7445dbb44

    注意:如果创建容器命令报错 "WARNING:IPv4 forwarding is disabled.Networking will not work.",就使用 vim 编辑器 打开 /etc/sysctl.conf 文件,在其中添加 net.ipv4.ip_forward=1,然后使用 sysctl -p 命令加载配置

    [root@docker ~]# head -1 /etc/sysctl.conf

    net.ipv4.ip_forward=1

    [root@docker ~]# sysctl -p

    使用 docker create 命令创建新容器后会返回一个唯一的ID。

       可以使用 docker ps 命令来查看运行的所有容器的运行状态。添加 -a 选项可以列出系统中所有容器状态。-q 只查看容器ID。

    [root@docker ~]# docker ps
    CONTAINER ID                      IMAGE                      COMMAND                      CREATED                        STATUS                          PORTS               NAMES
    458b25c30f49                          nginx:latest                "/bin/bash"                        23 minutes ago            Up 7 minutes                      80/tcp               unruffled_austin
    [root@docker ~]# docker ps -a
    CONTAINER ID                    IMAGE                         COMMAND                      CREATED                        STATUS                        PORTS                  NAMES
    0b96b84b428a                     nginx:latest                   "/bin/bash"                          27 seconds ago             Created                                                     happy_greider
    458b25c30f49                      nginx:latest                     "/bin/bash"                         23 minutes ago            Up 8 minutes                    80/tcp u                nruffled_austin

      输出信息显示容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空表示当前的容器处于停止状态。

    2、容器的启动与停止

    启动、停止、重启容器可以使用 docker start/stop/restart 命令

    命令格式:docker start/stop/restart 容器的ID/名称

    [root@docker ~]# docker start 0b96b84b428a
    0b96b84b428a
    [root@docker ~]# docker ps
    CONTAINER ID                       IMAGE                  COMMAND                       CREATED                       STATUS                       PORTS                   NAMES
    0b96b84b428a                        nginx:latest            "/bin/bash"                     10 minutes ago                Up 4 seconds                  80/tcp                 happy_greider
    458b25c30f49                         nginx:latest            "/bin/bash"                     33 minutes ago                 Up 17 minutes                80/tcp                 unruffled_austin

      容器启动后,可以看到容器状态一栏已经变为 UP,表示容器已经处于启动状态。如果用户想创建并启动容器,可以直接执行 docker run 命令,等同于先执行 docker create 命令,再执行 docker start 命令。需要注意只要后面的命令运行结束,容器就会停止。

      当利用 docker run 来创建容器时,Docker 在后台的标准运行过程是这样的:检查本地是否存在指定的镜像,当镜像不存在时,会从公有仓库下载;利用镜像创建并启动一个容器;分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;分配一个地址池中的 IP 地址给容器;执行用户指定的应用程序;执行完毕后容器被终止运行。

    例如,创建容器并启动执行一条 shell 命令

    [root@docker ~]# docker run nginx:latest /bin/bash -c ls /
    bin
    boot
    dev
    etc
    home
    lib
    lib64
    media
    mnt
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var

    这和在本地直接执行命令几乎没有区别。

    [root@docker ~]# docker ps -a
    CONTAINER ID                       IMAGE                  COMMAND                            CREATED                       STATUS                             PORTS                             NAMES
    669cb558a88d                         nginx:latest           "/bin/bash -c ls"                     3 minutes ago                  Exited (0) 3 minutes ago                                              thirsty_lamarr
    0b96b84b428a                         nginx:latest           "/bin/bash"                            3 hours ago                      Up 3 hours                          80/tcp                               happy_greider
    458b25c30f49                          nginx:latest           "/bin/bash"                            3 hours ago                      Up 3 hours                          80/tcp                                unruffled_austin

    查看容器的运行状态,可以看出容器在执行完 "/usr/bin/bash -c ls / " 命令之后就停止了。

      有时候需要在后台持续的运行这个容器,就需要让 docker 容器在守护进程形式运行。可以在 docker

    run 命令之后添加 -d 选项来实现。但是需要注意容器所运行的程序不能结束。

    例如,下面的容器会持续在后台运行。

    [root@docker ~]# docker run -d nginx:latest /bin/bash -c "while true;do
    echo hello;done"
    880a20a3c1071182d25f8c3a9ffd89dcbdd35020ce8c7361327c1e1cb1ef2264

    [root@docker ~]# docker ps
    CONTAINER ID         IMAGE                        COMMAND                            CREATED                                   STATUS                                      PORTS                          NAMES
    880a20a3c107           nginx:latest                "/bin/bash -c 'while…"             38 seconds ago                           Up 37 seconds                             80/tcp                          gallant_greider
    0b96b84b428a           nginx:latest                "/bin/bash"                                3 hours ago                                 Up 3 hours                                   80/tcp                          happy_greider
    458b25c30f49            nginx:latest                "/bin/bash"                                3 hours ago                                 Up 3 hours                                   80/tcp                          unruffled_austin

    查看容器内的输出

    [root@docker ~]# docker logs 880

    3、容器的进入

      需要进入容器进行相应操作时,可以使用 docker exec 命令或者 docker attach 命令进入运行着的容器。

    命令格式: docker exec -it 容器ID/名称 /bin/bash

    其中 -i 选项表示让容器的输入保持打开;

    -t 选项表示让 docker 分配一个伪终端。

    例如:进入正在运行着的容器 

    [root@docker ~]# docker exec -it 0b /bin/bash
    root@0b96b84b428a:/#

    用户可以通过所创建的终端来输入命令,通过 exit 命令退出容器。容器关闭

    root@0b96b84b428a:/# exit
    exit

    通过 Ctrl +p q 命令退出容器并保证容器在后台继续运行。容器继续运行

    [root@docker ~]# docker attach 0b
    root@0b96b84b428a:/# 

    4、容器的导出与导入

      用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,可以使用 docker export 命令实现,无论这个容器是处于运行状态还是停止状态均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

    命令格式:docker export   容器ID/名称  >  文件名

    例如,

    [root@docker ~]# docker export 0b > nginx.tar
    [root@docker ~]# ls
    anaconda-ks.cfg git_data.git nginx.tar
    git-2.22.0.tar.gz nging-latest.tar

    导出的文件从 A 机器拷贝到 B 机器,之后使用 docker import 命令导入,成为镜像。

    命令格式:cat 文件名 | docker import - 生成的镜像名称:标签

    例如,

    [root@docker ~]# cat nginx.tar | docker import - nginx:test
    sha256:156b4f039e228995f4c5accc13b345529047aeb3d442b170018ce07ac239c89e
    [root@docker ~]# docker images nginx
    REPOSITORY             TAG                 IMAGE ID               CREATED                 SIZE
    nginx                            test                 156b4f039e22          21 seconds ago        125MB
    nginx                            latest               ed21b7a8aee9        3 days ago                127MB
    nginx                            <none>           540a289bab6c          5 months ago           126MB

    5、容器的删除

    docker start | stop | restart | kill  // 运行已停止的容器 | 停止一个正在运行的容器 | 重启 一个容器 | 杀死一个正在运行的容器

    可以使用 docker rm 命令将一个已经终止状态的容器进行删除。

    命令格式:docker rm 容器ID / 名称

    例如,

    [root@docker ~]# docker rm 880a20a3c107
    880a20a3c107

      如果删除一个正在运行的容器,可以添加 -f 选项 强制删除,但是建议先将容器停止再做删除操作。

      Docker 默认的存储目录在 /var/lib/docker,Docker 的镜像、容器、日志等内容全部都存储在此,可以单独使用大容量的分区来存储这些东西,并且一般选择建立 LVM 逻辑卷。从而避免 Docker 运行过程中存储目录容量不足。

    6、文件复制

    将主机 /root/anaconda-ks.cfg 目录拷贝到容器 0b96b84b428a 的 /tmp 目录下。

    [root@docker ~]# docker cp /root/anaconda-ks.cfg 0b96b84b428a:/tmp
    [root@docker ~]# docker attach 0b96b84b428a
    root@0b96b84b428a:/# ls /tmp
    anaconda-ks.cfg
    root@0b96b84b428a:/#

    创建私有仓库

      仓库(Repository)是集中存放镜像的地方。

      注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库,而每个仓库下可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应用或应用组。

    仓库自身可以分为:公共仓库和私有仓库。

    比如公有仓库:http://hub.docker.com 或国内的:dl.dockerpool.com

    安装 docker 后,可以通过官方提供的 registry 镜像来简单搭建一套本地仓库环境

    [root@docker ~]# mkdir -pv /opt/data/registry
    mkdir: 已创建目录 "/opt/data"
    mkdir: 已创建目录 "/opt/data/registry"

    [root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
    Unable to find image 'registry:latest' locally
    latest: Pulling from library/registry
    486039affc0a: Pull complete
    ba51a3b098e6: Pull complete
    8bb4c43d6c8e: Pull complete
    6f5f453e5f2d: Pull complete
    42bc10b72f42: Pull complete
    Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
    Status: Downloaded newer image for registry:latest
    138093f2fe8a11590e875dd2371f092776618d8e19a6cd60495eb4377e73c10a

    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE             COMMAND                               CREATED                          STATUS                            PORTS                                    NAMES
    138093f2fe8a           registry             "/entrypoint.sh /etc…"            About a minute ago               Up About a minute            0.0.0.0:5000->5000/tcp           laughing_shamir
    669cb558a88d         nginx:latest      "/bin/bash -c ls"                      3 hours ago                           Exited (0) 3 hours ago                                                       thirsty_lamarr
    0b96b84b428a         nginx:latest      "/bin/bash"                             5 hours ago                            Up 5 hours                        80/tcp                                       happy_greider
    458b25c30f49          nginx:latest       "/bin/bash"                            6 hours ago                            Up 6 hours                        80/tcp                                        unruffled_austin

    [root@docker ~]# vim /usr/lib/systemd/system/docker.service

    在 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后添加 --insecure-registry 192.168.200.123:5000(注册服务器IP地址:5000)

    [root@docker ~]# systemctl daemon-reload
    [root@docker ~]# systemctl restart docker

    [root@docker ~]# docker ps -a
    CONTAINER ID      IMAGE                  COMMAND                          CREATED                                       STATUS                                  PORTS                        NAMES
    138093f2fe8a         registry                 "/entrypoint.sh /etc…"          15 minutes ago                                Exited (2) 8 seconds ago                                         laughing_shamir
    669cb558a88d       nginx:latest           "/bin/bash -c ls"                     3 hours ago                                    Exited (0) 3 hours ago                                              thirsty_lamarr
    0b96b84b428a       nginx:latest           "/bin/bash"                             6 hours ago                                   Exited (0) 8 seconds ago                                          happy_greider
    458b25c30f49        nginx:latest           "/bin/bash"                             6 hours ago                                    Exited (0) 8 seconds ago                                         unruffled_austin

    [root@docker ~]# docker start 138093f2fe8a
    138093f2fe8a
    [root@docker ~]# docker ps -a
    CONTAINER ID            IMAGE              COMMAND                     CREATED                             STATUS                                  PORTS                                         NAMES
    138093f2fe8a               registry              "/entrypoint.sh /etc…"     20 minutes ago                      Up 20 seconds                      0.0.0.0:5000->5000/tcp                  laughing_shamir
    669cb558a88d             nginx:latest        "/bin/bash -c ls"               3 hours ago                           Exited (0) 3 hours ago                                                                  thirsty_lamarr
    0b96b84b428a             nginx:latest       "/bin/bash"                       6 hours ago                            Exited (0) 4 minutes ago                                                              happy_greider
    458b25c30f49              nginx:latest       "/bin/bash"                       6 hours ago                            Exited (0) 4 minutes ago                                                              unruffled_austin

    [root@docker ~]# docker images
    REPOSITORY       TAG                        IMAGE ID                          CREATED                    SIZE
    nginx                      test                       156b4f039e22                 About an hour ago           125MB
    nginx                     latest                     ed21b7a8aee9                3 days ago                       127MB
    registry                  latest                     708bc6af7e5e                 2 months ago                   25.8MB
    nginx                    <none>                   540a289bab6c                5 months ago                   126MB
    [root@docker ~]# docker tag nginx:latest 192.168.200.123:5000/nginx:latest
    [root@docker ~]# docker images
    REPOSITORY                                    TAG                        IMAGE ID                           CREATED                                SIZE
    nginx                                                   test                        156b4f039e22                    About an hour ago                    125MB
    192.168.200.123:5000/nginx             latest                      ed21b7a8aee9                    3 days ago                               127MB
    nginx                                                  latest                      ed21b7a8aee9                    3 days ago                               127MB
    registry                                               latest                      708bc6af7e5e                     2 months ago                           25.8MB
    nginx                                                 <none>                    540a289bab6c                    5 months ago                           126MB

    [root@docker ~]# docker push 192.168.200.123:5000/nginx:latest
    The push refers to repository [192.168.200.123:5000/nginx]
    d37eecb5b769: Pushed
    99134ec7f247: Pushed
    c3a984abe8a8: Pushed
    latest: digest: sha256:7ac7819e1523911399b798309025935a9968b277d86d50e5255465d6592c0266 size: 948

  • 相关阅读:
    wm_syscommand
    VC中的#pragma指令的用法
    C语言|博客作业03
    C语言|博客作业09
    C语言|博客作业07
    C语言|博客作业05
    C语言|博客作业02
    C语言|博客作业08
    C语言|博客作业06
    C语言|博客作业04
  • 原文地址:https://www.cnblogs.com/2567xl/p/12500754.html
Copyright © 2020-2023  润新知