Docker小操作

1.更换自己的阿里云镜像源

阿里云镜像可以自己去https://promotion.aliyun.com/ntms/act/kubernetes.html 注册

  1. 登陆阿里云开发者平台
  2. 点击控制台
  3. 选择容器镜像服务
  4. 镜像工具--镜像加速器

sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

PS:当然也可以搜一下其他的镜像源

2.常用命令

docker 命令官方文档
https://docs.docker.com/reference/

2.1帮助类启动命令

  1. 启动docker:systemctl start docker
  2. 停止docker:systemctl stop docker
  3. 重启docker:systemctl restart docker
  4. 查看docker状态:systemctl status docker
  5. 开机启动:systemctl status docker
  6. 查看docker概要信息:docker info
  7. 查看docker总体帮助文档:docker --help
  8. 查看docker命令帮助文档:docker 具体命令 --help

2.2镜像命令

2.2.1 docker images

​ 列出本地主机上的镜像。

OPTIONS说明:

​ -a :列出本地所有的镜像(含历史映像层)

​ -q :只显示镜像ID

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

​ 查找镜像。可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

​ 也可以使用命令:docker search [OPTIONS] 镜像名字

OPTIONS说明:

​ --limit : 只列出N个镜像,默认25个

docker search --limit 5 redis

$ docker search redis
NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                                              Redis is an open source key-value store that…   10891     [OK]       
bitnami/redis                                      Bitnami Redis Docker Image                      214                  [OK]
bitnami/redis-sentinel                             Bitnami Docker Image for Redis Sentinel         36                   [OK]
bitnami/redis-cluster                                                                              31                   
circleci/redis                                     CircleCI images for Redis                       12                   [OK]
ubuntu/redis                                       Redis, an open source key-value store. Long-…   10                   
bitnami/redis-exporter                                                                             6                    
google/guestbook-python-redis                      A simple guestbook example written in Python…   4                    
clearlinux/redis                                   Redis key-value data structure server with t…   4                    
ibmcom/ibm-cloud-databases-redis-operator          Container image for the IBM Operator for Red…   1                    
bitnami/redis-sentinel-exporter                                                                    1                    
ibmcom/redis-ha                                                                                    1                    
ibmcom/ibm-cloud-databases-redis-operator-bundle   Bundle image for the IBM Operator for Redis     1                    
ibmcom/ibm-cloud-databases-redis-catalog           Catalog image for the IBM Operator for Redis    1                    
rancher/redislabs-ssl                                                                              0                    
blackflysolutions/redis                            Redis container for Drupal and CiviCRM          0                    
ibmcom/redisearch-ppc64le                                                                          0                    
drud/redis                                         redis                                           0                    [OK]
ibmcom/redis-ppc64le                                                                               0                    
vmware/redis-photon                                                                                0                    
cimg/redis                                                                                         0                    
newrelic/k8s-nri-redis                             New Relic Infrastructure Redis Integration (…   0                    
astronomerinc/ap-redis                             Redis service for Airflow's celery executor …   0                    
drud/redis_exporter                                                                                0                    
ibmcom/opencontent-redis-3                         Docker image for CloudPakOpenContent Redis v…   0  

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

2.2.3 docker pull

​ 拉取镜像 docker pull 镜像名字[:TAG]

​ 没有TAG就是最新版。等价于docker pull 镜像名字:latest

$ docker pull redis:6.0.8
6.0.8: Pulling from library/redis
bb79b6b2107f: Pull complete 
1ed3521a5dcb: Pull complete 
5999b99cee8f: Pull complete 
3f806f5245c9: Pull complete 
f8a4497572b2: Pull complete 
eafe3b6b8d06: Pull complete 
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Downloaded newer image for redis:6.0.8
docker.io/library/redis:6.0.8

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
redis         6.0.8     16ecd2772934   18 months ago   104MB

$ docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Pull complete 
c7a4e4382001: Pull complete 
4044b9ba67c9: Pull complete 
c8388a79482f: Pull complete 
413c8bb60be2: Pull complete 
1abfd3011519: Pull complete 
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
redis         latest    7614ae9453d1   4 months ago    113MB
redis         6.0.8     16ecd2772934   18 months ago   104MB

2.2.4 docker system df

查看镜像/容器/数据卷所占的空间

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         0         216.9MB   216.9MB (100%)
Containers      0         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

2.2.5 docker rmi

删除镜像

docker rmi [OPTIONS] 某个XXX镜像名字ID

OPTIONS:

​ -f : 强制删除

删除单个:docker rmi -f 镜像ID

删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG

删除全部:docker rmi -f $(docker images -qa)

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
redis        latest    7614ae9453d1   4 months ago    113MB
redis        6.0.8     16ecd2772934   18 months ago   104MB
$ docker rmi 16ecd2772934
Untagged: redis:6.0.8
Untagged: redis@sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Deleted: sha256:16ecd277293476392b71021cdd585c40ad68f4a7488752eede95928735e39df4
Deleted: sha256:3746030fff867eb26a0338ad9d3ab832e6c19c7dc008090bcfa95c7b9f16f505
Deleted: sha256:1274ec54ad17d15ec95d2180cb1f791057e86dfcdfcc18cd58610a920e145945
Deleted: sha256:18d156147e54edec9a927080fdc0a53c4a8814b0c717b36dc62e637363c1a98d
Deleted: sha256:a8f09c4919857128b1466cc26381de0f9d39a94171534f63859a662d50c396ca
Deleted: sha256:2ae5fa95c0fce5ef33fbb87a7e2f49f2a56064566a37a83b97d3f668c10b43d6
Deleted: sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    7614ae9453d1   4 months ago   113MB

2.3 容器命令

先下个ubuntu的镜像docker pull ubuntu

$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete 
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    7614ae9453d1   4 months ago   113MB
ubuntu       latest    ba6acccedd29   6 months ago   72.8MB

2.3.1 新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用)

OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name="容器新名字" 为容器指定一个名称;

-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

也即启动交互式容器(前台有伪终端,等待交互);

-P: 随机端口映射,大写P

-p: 指定端口映射,小写p

启动交互式容器(前台命令行)

#使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

docker run -it ubuntu /bin/bash

参数说明:

-i: 交互式操作。

-t: 终端。

ubuntu: ubuntu镜像。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

[dark@EndeavourOS01 ~]$ docker run -it ubuntu /bin/bash
root@feca0185b2ba:/# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 03:11 pts/0    00:00:00 /bin/bash
root           9       1  0 03:11 pts/0    00:00:00 ps -ef
root@feca0185b2ba:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@feca0185b2ba:/# exit
exit
[dark@EndeavourOS01 ~]$ docker run -it --name=ub01 ubuntu /bin/bash
root@eb32d7ab8ff3:/# 

2.3.2 列出当前所有正在运行的容器

docker ps [OPTIONS]

OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的

-l :显示最近创建的容器。

-n:显示最近n个创建的容器。

-q :静默模式,只显示容器编号。

[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
eb32d7ab8ff3   ubuntu    "/bin/bash"   27 seconds ago   Up 26 seconds             ub01
[dark@EndeavourOS01 ~]$ docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
eb32d7ab8ff3   ubuntu    "/bin/bash"   35 seconds ago   Up 34 seconds                        ub01
feca0185b2ba   ubuntu    "/bin/bash"   12 minutes ago   Exited (0) 3 minutes ago             intelligent_mccarthy
[dark@EndeavourOS01 ~]$ docker ps -l
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
eb32d7ab8ff3   ubuntu    "/bin/bash"   43 seconds ago   Up 42 seconds             ub01
[dark@EndeavourOS01 ~]$ docker ps -n 5
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
eb32d7ab8ff3   ubuntu    "/bin/bash"   9 minutes ago    Up 9 minutes                          ub01
feca0185b2ba   ubuntu    "/bin/bash"   20 minutes ago   Exited (0) 12 minutes ago             intelligent_mccarthy
[dark@EndeavourOS01 ~]$ docker ps -q
eb32d7ab8ff3

2.3.3 退出容器

两种退出方式:

  1. exit run进去容器,exit退出,容器停止
  2. ctrl+p+q run进去容器,ctrl+p+q退出,容器不停止

2.3.4 启动已停止运行的容器

docker start 容器ID或者容器名

2.3.5 重启容器

docker restart 容器ID或者容器名

2.3.6 停止容器

docker stop 容器ID或者容器名

2.3.7 强制停止容器

docker kill 容器ID或容器名

2.3.8 删除已停止的容器

docker rm 容器ID

一次性删除多个容器实例:

  1. docker rm -f $(docker ps -a -q)
  2. docker ps -a -q | xargs docker rm

-f:强制删除

2.3.9 启动守护式容器(后台服务器)

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的后台运行模式。

docker run -d 容器名

#使用镜像ubuntu:latest以后台模式启动一个容器

docker run -d ubuntu

问题:然后docker ps -a 进行查看, 会发现容器已经退出

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,

我们配置启动服务只需要启动响应的service即可。例如service nginx start

但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,

这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.

所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,

常见就是命令行模式,表示我还有交互操作,别中断,O(∩_∩)O哈哈~

redis 前后台启动演示case:

  1. 前台交互式启动

    docker run -it redis
    
  2. 后台守护式启动

    docker run -d redis
    

2.3.10 查看容器日志

docker logs 容器ID

[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
6873ff4a1873   redis     "docker-entrypoint.s…"   4 seconds ago    Up 3 seconds    6379/tcp   interesting_beaver
eb32d7ab8ff3   ubuntu    "/bin/bash"              24 minutes ago   Up 24 minutes              ub01
[dark@EndeavourOS01 ~]$ docker logs 6873ff4a1873
1:C 08 May 2022 03:47:12.639 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 08 May 2022 03:47:12.639 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 08 May 2022 03:47:12.639 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 08 May 2022 03:47:12.640 * monotonic clock: POSIX clock_gettime
1:M 08 May 2022 03:47:12.640 * Running mode=standalone, port=6379.
1:M 08 May 2022 03:47:12.640 # Server initialized
1:M 08 May 2022 03:47:12.640 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 08 May 2022 03:47:12.641 * Ready to accept connections
[dark@EndeavourOS01 ~]$ 

2.3.11 查看容器内运行的进程

docker top 容器ID

[dark@EndeavourOS01 ~]$ docker top 6873ff4a1873
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
999                 4919                4898                0                   11:47               ?                   00:00:00            redis-server *:6379
[dark@EndeavourOS01 ~]$ 

2.3.12 查看容器内部细节

docker inspect 容器ID

[dark@EndeavourOS01 ~]$ docker inspect 6873ff4a1873
[
    {
        "Id": "6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d",
        "Created": "2022-05-08T03:47:11.866223005Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "redis-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 4919,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-05-08T03:47:12.5874105Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631",
        "ResolvConfPath": "/var/lib/docker/containers/6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d/hostname",
        "HostsPath": "/var/lib/docker/containers/6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d/hosts",
        "LogPath": "/var/lib/docker/containers/6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d/6873ff4a1873b99fd5eebcea7afebf7c6684380a9394627beb33ead083e3a20d-json.log",
        "Name": "/interesting_beaver",
        "RestartCount": 0,
        "Driver": "btrfs",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": null,
            "Name": "btrfs"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "7f4f3b77a178dcd8ee09b3d7fd4515124c623f5e21dd29029d8c7527d5f47644",
                "Source": "/var/lib/docker/volumes/7f4f3b77a178dcd8ee09b3d7fd4515124c623f5e21dd29029d8c7527d5f47644/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "6873ff4a1873",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "6379/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.12",
                "REDIS_VERSION=6.2.6",
                "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz",
                "REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab"
            ],
            "Cmd": [
                "redis-server"
            ],
            "Image": "redis",
            "Volumes": {
                "/data": {}
            },
            "WorkingDir": "/data",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "39986f3c830253e678d2c32b6abf9b184965acfa5d063434c1649d261ee60fd0",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "6379/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/39986f3c8302",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "5bb651b306bf8055cb3f13fc75b4b097b0abae49899c697ce55e4159be6dd8fb",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "3c74bee0ac80741c4daed74965799258b9a2c077ab7306c773ec7bba4c3593bc",
                    "EndpointID": "5bb651b306bf8055cb3f13fc75b4b097b0abae49899c697ce55e4159be6dd8fb",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]
[dark@EndeavourOS01 ~]$ 

2.3.13 进入正在运行的容器并以命令行交互

  1. docker exec -it 容器ID bashShell

    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   6379/tcp   interesting_beaver
    eb32d7ab8ff3   ubuntu    "/bin/bash"              35 minutes ago   Up 35 minutes              ub01
    [dark@EndeavourOS01 ~]$ docker exec -it eb32d7ab8ff3 /bin/bash
    root@eb32d7ab8ff3:/# ls
    bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@eb32d7ab8ff3:/# exit
    exit
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   16 minutes ago   Up 16 minutes   6379/tcp   interesting_beaver
    eb32d7ab8ff3   ubuntu    "/bin/bash"              40 minutes ago   Up 40 minutes              ub01
    [dark@EndeavourOS01 ~]$ 
    
  2. 重新进入docker attach 容器ID

    [dark@EndeavourOS01 ~]$ docker attach eb32d7ab8ff3
    root@eb32d7ab8ff3:/# ls
    bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@eb32d7ab8ff3:/# exit
    exit
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes   6379/tcp   interesting_beaver
    

上述两个区别:

  1. attach 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
  2. exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。

推荐使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。

用之前的redis容器实例进入

  1. docker exec -it 容器ID /bin/bash

    [dark@EndeavourOS01 ~]$ docker exec -it 6873ff4a1873 /bin/bash
    root@6873ff4a1873:/data# ls
    root@6873ff4a1873:/data# redis-cli -p 6379
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> exit
    root@6873ff4a1873:/data# exit
    exit
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   26 minutes ago   Up 26 minutes   6379/tcp   interesting_beaver
    [dark@EndeavourOS01 ~]$ 
    
  2. docker exec -it 容器ID redis-cli

    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   26 minutes ago   Up 26 minutes   6379/tcp   interesting_beaver
    [dark@EndeavourOS01 ~]$ docker exec -it 6873ff4a1873 redis-cli
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> set k2 v2
    OK
    127.0.0.1:6379> get k2
    "v2"
    127.0.0.1:6379> exit
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   28 minutes ago   Up 28 minutes   6379/tcp   interesting_beaver
    

一般用-d后台启动的程序,再用exec进入对应容器实例

2.3.14 从容器内拷贝文件到主机上

​ 容器→主机

docker cp 容器ID:容器内路径 目的主机路径

先启动并进入容器,随便在某个目录下创建一个文件

[dark@EndeavourOS01 ~]$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                      PORTS      NAMES
6873ff4a1873   redis     "docker-entrypoint.s…"   32 minutes ago      Up 32 minutes               6379/tcp   interesting_beaver
380f6bdb7983   redis     "docker-entrypoint.s…"   32 minutes ago      Exited (0) 32 minutes ago              mystifying_bouman
a55be9c5b52d   ubuntu    "bash"                   34 minutes ago      Exited (0) 34 minutes ago              eloquent_ishizaka
eb32d7ab8ff3   ubuntu    "/bin/bash"              56 minutes ago      Exited (0) 13 minutes ago              ub01
feca0185b2ba   ubuntu    "/bin/bash"              About an hour ago   Exited (0) 59 minutes ago              intelligent_mccarthy
[dark@EndeavourOS01 ~]$ docker restart ub01
ub01
[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
6873ff4a1873   redis     "docker-entrypoint.s…"   32 minutes ago   Up 32 minutes   6379/tcp   interesting_beaver
eb32d7ab8ff3   ubuntu    "/bin/bash"              56 minutes ago   Up 5 seconds               ub01
[dark@EndeavourOS01 ~]$ docker exec -it eb32d7ab8ff3 /bin/bash
root@eb32d7ab8ff3:/# pwd
/
root@eb32d7ab8ff3:/# cd /tmp/
root@eb32d7ab8ff3:/tmp# pwd
/tmp
root@eb32d7ab8ff3:/tmp# touch a.txt
root@eb32d7ab8ff3:/tmp# ll
total 0
drwxrwxrwt 1 root root  10 May  8 04:21 ./
drwxr-xr-x 1 root root 174 May  8 03:22 ../
-rw-r--r-- 1 root root   0 May  8 04:21 a.txt
root@eb32d7ab8ff3:/tmp# 

然后在另外的主机终端下执行命令

[dark@EndeavourOS01 ~]$ ll fileh/
总计 0
drwxr-xr-x 1 dark dark 0  5月 8日 12:27 .
[dark@EndeavourOS01 ~]$ docker cp eb32d7ab8ff3:/tmp/a.txt /home/dark/fileh/
[dark@EndeavourOS01 ~]$ ll fileh/
总计 0
drwxr-xr-x 1 dark dark 10  5月 8日 12:27 .
-rw-r--r-- 1 dark dark  0  5月 8日 12:21 a.txt
[dark@EndeavourOS01 ~]$ 

2.3.15 导入和导出容器

  1. export 导出容器的内容留作为一个tar归档文件[对应import命令]

    docker export 容器ID > 文件名.tar

    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   43 minutes ago      Up 43 minutes   6379/tcp   interesting_beaver
    eb32d7ab8ff3   ubuntu    "/bin/bash"              About an hour ago   Up 11 minutes              ub01
    [dark@EndeavourOS01 ~]$ ls
    公共  模板  视频  图片  文档  下载  音乐  桌面  fileh
    [dark@EndeavourOS01 ~]$ docker export eb32d7ab8ff3 > abc.tar
    [dark@EndeavourOS01 ~]$ ls
    公共  模板  视频  图片  文档  下载  音乐  桌面  abc.tar  fileh
    [dark@EndeavourOS01 ~]$ 
    
  2. import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]

    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   46 minutes ago      Up 46 minutes   6379/tcp   interesting_beaver
    eb32d7ab8ff3   ubuntu    "/bin/bash"              About an hour ago   Up 14 minutes              ub01
    [dark@EndeavourOS01 ~]$ docker rm -f eb32d7ab8ff3
    eb32d7ab8ff3
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   47 minutes ago   Up 47 minutes   6379/tcp   interesting_beaver
    [dark@EndeavourOS01 ~]$ ls
    公共  模板  视频  图片  文档  下载  音乐  桌面  abc.tar  fileh
    [dark@EndeavourOS01 ~]$ docker images
    REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
    redis        latest    7614ae9453d1   4 months ago   113MB
    ubuntu       latest    ba6acccedd29   6 months ago   72.8MB
    [dark@EndeavourOS01 ~]$ cat abc.tar | docker import - dark/ubuntu:1.0.1
    sha256:df0d945a3ac2dfc2b98b9f4b2c450844bfe8c0064f6d8fa513f3b6aefe782539
    [dark@EndeavourOS01 ~]$ docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    dark/ubuntu   1.0.1     df0d945a3ac2   2 seconds ago   72.8MB
    redis         latest    7614ae9453d1   4 months ago    113MB
    ubuntu        latest    ba6acccedd29   6 months ago    72.8MB
    [dark@EndeavourOS01 ~]$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    6873ff4a1873   redis     "docker-entrypoint.s…"   50 minutes ago   Up 50 minutes   6379/tcp   interesting_beaver
    [dark@EndeavourOS01 ~]$ docker run -it df0d945a3ac2 /bin/bash
    root@c592577175d2:/# ll /tmp/
    total 0
    drwxrwxrwt 1 root root  10 May  8 04:21 ./
    drwxr-xr-x 1 root root 174 May  8 04:38 ../
    -rw-r--r-- 1 root root   0 May  8 04:21 a.txt
    root@c592577175d2:/# 
    

2.4 Docker镜像commit操作

docker commit提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

案例,在原来没有vim命令的ubuntu容器里,安装vim然后commit

[dark@EndeavourOS01 ~]$ docker run -it --name=ub01 ubuntu /bin/bash
root@ba27ab86075f:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@ba27ab86075f:/# vim
bash: vim: command not found
root@ba27ab86075f:/# apt-get update
`````````````省略`````````````
root@ba27ab86075f:/# apt-get -y install vim
`````````````省略`````````````
root@ba27ab86075f:/# vim a.txt 
root@ba27ab86075f:/# cat a.txt 
hhhh
root@ba27ab86075f:/# 

然后另起终端

[dark@EndeavourOS01 ~]$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    7614ae9453d1   4 months ago   113MB
ubuntu       latest    ba6acccedd29   6 months ago   72.8MB
[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
ba27ab86075f   ubuntu    "/bin/bash"              16 minutes ago   Up 16 minutes              ub01
6873ff4a1873   redis     "docker-entrypoint.s…"   6 hours ago      Up 6 hours      6379/tcp   interesting_beaver
[dark@EndeavourOS01 ~]$ docker commit -m="install vim cmd" -a="dark" ba27ab86075f dark/my-ub:1.0.1
sha256:b6248af4b99881493bb5b8a04e972dbfb0c32cd4d5f40de116cae2c7508b7110
[dark@EndeavourOS01 ~]$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
dark/my-ub   1.0.1     b6248af4b998   4 seconds ago   176MB
redis        latest    7614ae9453d1   4 months ago    113MB
ubuntu       latest    ba6acccedd29   6 months ago    72.8MB
[dark@EndeavourOS01 ~]$ 


#停掉原来ub01的容器,然后用使用原ubuntu镜像和新commit出来的dark/my-ub镜像运行容器对比
[dark@EndeavourOS01 ~]$ docker stop ba27ab86075f
ba27ab86075f
[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS      NAMES
6873ff4a1873   redis     "docker-entrypoint.s…"   6 hours ago   Up 6 hours   6379/tcp   interesting_beaver
[dark@EndeavourOS01 ~]$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
dark/my-ub   1.0.1     b6248af4b998   2 minutes ago   176MB
redis        latest    7614ae9453d1   4 months ago    113MB
ubuntu       latest    ba6acccedd29   6 months ago    72.8MB
[dark@EndeavourOS01 ~]$ docker run -it --name=ub02 ubuntu /bin/bash
root@3ba80780b71a:/# vim
bash: vim: command not found
root@3ba80780b71a:/# [dark@EndeavourOS01 ~]$ 
[dark@EndeavourOS01 ~]$ 
[dark@EndeavourOS01 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
3ba80780b71a   ubuntu    "/bin/bash"              17 seconds ago   Up 15 seconds              ub02
6873ff4a1873   redis     "docker-entrypoint.s…"   6 hours ago      Up 6 hours      6379/tcp   interesting_beaver

[dark@EndeavourOS01 ~]$ docker run -it --name=ub03 b6248af4b998 /bin/bash
root@b9963b74dd34:/# ls
a.txt  bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@b9963b74dd34:/# vim a.txt 
`````可以看到有之前的a.txt,随便追加内容`````
root@b9963b74dd34:/# cat a.txt 
hhhh

asdasd
root@b9963b74dd34:/# 

3. 本地镜像发布到阿里云

3.1 本地镜像发布到阿里云流程

3.2 镜像的生成方法

1.前面提到过的docker commit基于当前容器创建一个新的镜像,新功能增强

docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]

OPTIONS说明:

-a :提交的镜像作者;

-m :提交时的说明文字;

2.Dockerfile

暂时略

3.3 将本地镜像推送到阿里云

  1. 登录阿里云平台https://promotion.aliyun.com/ntms/act/kubernetes.html

  2. 创建仓库镜像

    1. 选择控制台,进入容器镜像服务

    2. 选择个人实例

    3. 命名空间--创建命名空间--仓库类型公有

    4. 镜像仓库--创建镜像仓库--选择刚才创建的命名空间--仓库类型公有

    5. 进入管理界面获得脚本

      1. 登录阿里云Docker Registry

      $ docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
      

      --username是用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

      您可以在访问凭证页面修改凭证密码。

      2. 从Registry中拉取镜像

      $ docker pull registry.cn-hangzhou.aliyuncs.com/yyy/zzz:[镜像版本号]
      

      yyy是你创建的命名空间,zzz是你在yyy命名空间下创建的镜像仓库名

      实际的在你自己的阿里云里复制就好了

      3.将镜像推送到Registry

      $ docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
      $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/yyy/zzz:[镜像版本号]
      $ docker push registry.cn-hangzhou.aliyuncs.com/yyy/zzz[镜像版本号]
      

      请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

      --username是用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码

      yyy是你创建的命名空间,zzz是你在yyy命名空间下创建的镜像仓库名

      实际的在你自己的阿里云里复制就好了

  3. 将镜像推送到阿里云

posted @ 2022-05-08 18:47  DarkH  阅读(232)  评论(0编辑  收藏  举报