Docker容器的使用

news2024/11/18 11:38:30

前提条件

  1. Linux环境
  2. 安装好Docker,可参考Rocky Linux9下安装Docker和卸载Docker

Docker命令图

帮助命令

帮助命令,查看有哪些命令可以用
[root@localhost ~]# docker --help
​
查看某个命令的帮助,例如:run
[root@localhost ~]# docker run --help

容器命令的使用

运行容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
 
常用参数:
--name=NAME:为容器指定名字为NAME,不使用的话系统自动为容器命名
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,大写P,
-p: 指定端口映射,小写p, 格式 -p 宿主机端口:容器端口
-v:挂载
 

使用镜像,运行容器

sudo docker run --name nginx-test -p 8080:80 -d nginx

参数说明:

  • --name nginx-test :容器名称。

  • -p 8080:80 : 端口进行映射,将宿主机(本地) 8080 端口映射到容器内部的 80 端口。

  • -d nginx : 设置容器在在后台一直运行。

操作

[hadoop@node1 ~]$ sudo docker run --name nginx-test -p 90:80 -d nginx
703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8

提示:以root用户执行docker命令不需要加sudo,普通用户在执行docker命令时需要添加sudo。

查看容器

查看正在运行的容器

docker ps

查看正在所有容器,包括之前运行过已停止但还未删除的。

docker ps -a

操作

[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   18 seconds ago   Up 17 seconds   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
[hadoop@node1 ~]$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   18 seconds ago   Up 17 seconds   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
6a5ddf625373   nginx     "/docker-entrypoint.…"   21 hours ago   Exited (0) About a minute ago                           nginx
​

访问Nginx

[hadoop@node1 ~]$ curl localhost:90
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
​
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
​
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
​

浏览器访问

ip:90

image.png

注意:如果是虚拟机的Linux,需要关闭防火墙;如果是云服务器,需要在云安全组放开90端口。

 

停止容器

docker stop <容器 ID>

操作

[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   13 minutes ago   Up 13 minutes   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
[hadoop@node1 ~]$ sudo docker stop 703ef7d2c6b4
703ef7d2c6b4
​
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
​

停止容器后,再次curl访问90端口

[hadoop@node1 ~]$ curl localhost:90
curl: (7) Failed connect to localhost:90; Connection refused

因为nginx容器已经停止,所以访问不了了。

查看所有容器,包括已停止的容器,查看到了刚才的运行的Nginx容器

[hadoop@node1 ~]$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   16 minutes ago   Exited (0) 2 minutes ago             nginx-test
​

重启容器

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>

操作

[hadoop@node1 ~]$ sudo docker restart 703ef7d2c6b4
703ef7d2c6b4
​

查看正在运行的docker容器

[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   41 minutes ago   Up 25 seconds   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach:进入容器,退出后,容器也会停止。

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

操作

attach方式

[hadoop@node1 ~]$ sudo docker attach 703ef7d2c6b4
​
​
按住Ctrl + C退出
^C2024/08/15 13:59:39 [notice] 1#1: signal 2 (SIGINT) received, exiting
2024/08/15 13:59:39 [notice] 25#25: exiting
2024/08/15 13:59:39 [notice] 25#25: exit
2024/08/15 13:59:39 [notice] 24#24: exiting
2024/08/15 13:59:39 [notice] 24#24: exit
2024/08/15 13:59:39 [notice] 1#1: signal 17 (SIGCHLD) received from 24
2024/08/15 13:59:39 [notice] 1#1: worker process 24 exited with code 0
2024/08/15 13:59:39 [notice] 1#1: worker process 25 exited with code 0
2024/08/15 13:59:39 [notice] 1#1: exit
​
再次查看运行的容器,发现容器已经停止运行
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
​

exec方式(推荐使用)

[hadoop@node1 ~]$ sudo docker restart 703ef7d2c6b4
703ef7d2c6b4
​
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   46 minutes ago   Up 3 seconds   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
进入容器内部
[hadoop@node1 ~]$ sudo docker exec -it 703ef7d2c6b4 /bin/bash
root@703ef7d2c6b4:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@703ef7d2c6b4:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
​
​

修改页面内容

容器内部查看页面默认的内容
root@703ef7d2c6b4:/# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
​
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
​
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
​
修改页面内容
root@703ef7d2c6b4:/# echo "hello world" > /usr/share/nginx/html/index.html
​
访问容器内部80端口内容
root@703ef7d2c6b4:/# curl localhost:80
hello world
​

浏览器访问ip:90,看到了修改的内容

image.png

退出容器

root@703ef7d2c6b4:/# exit
exit
[hadoop@node1 ~]$
​

查看容器日志

docker logs -f <容器ID>

操作

[hadoop@node1 ~]$ sudo docker logs -f 703ef7d2c6b4
...
省略部分输出
...
117.189.125.113 - - [15/Aug/2024:14:23:50 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36" "-"
​

最后一条日志是浏览器访问时产生的

117.189.125.113 - - [15/Aug/2024:14:23:50 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36" "-"

可以再次浏览器访问,看看输出日志的变化

按Ctrl + C 退出 查看日志。

查看容器进程

docker top <容器ID>或者<容器名称>

操作

[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS          PORTS                               NAMES
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   About an hour ago   Up 27 minutes   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​

[hadoop@node1 ~]$ sudo docker top 703ef7d2c6b4
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                27814               27793               0                   22:01               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 27850               27814               0                   22:01               ?                   00:00:00            nginx: worker process
101                 27851               27814               0                   22:01               ?                   00:00:00            nginx: worker process
​

[hadoop@node1 ~]$ sudo docker top nginx-test
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                27814               27793               0                   22:01               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 27850               27814               0                   22:01               ?                   00:00:00            nginx: worker process
101                 27851               27814               0                   22:01               ?                   00:00:00            nginx: worker process
[hadoop@node1 ~]$
​
​

查看容器资源占用情况

显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等。

docker stats [OPTIONS] [CONTAINER...]
 
OPTIONS:
--all , -a :显示所有的容器,包括未运行的。
--format :指定返回值的模板文件。
--no-stream :展示当前状态就直接退出了,不再实时更新。
--no-trunc :不截断输出。
 
example:
docker stats mynginx  # 容器名
docker stats af7928654200  # 容器ID

操作

[root@localhost ~]# docker run --name nginx-test -p 8080:80 -d nginx
​
[root@localhost ~]# docker stats nginx-test
​

结果动态刷新

image.png

按Ctrl + c返回命令行。

暂停容器运行及取消暂停容器运行

暂停容器帮助
[root@localhost ~]# docker pause --help
​
Usage:  docker pause CONTAINER [CONTAINER...]
​
Pause all processes within one or more containers
​
Aliases:
  docker container pause, docker pause
​
取消暂停容器帮助
[root@localhost ~]# docker unpause --help
​
Usage:  docker unpause CONTAINER [CONTAINER...]
​
Unpause all processes within one or more containers
​
Aliases:
  docker container unpause, docker unpause
​

操作

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                     NAMES
fe352b7ad389   nginx     "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   nginx-test
​
[root@localhost ~]# curl localhost:8080
...
有返回内容
​
暂停容器
[root@localhost ~]# docker pause nginx-test
nginx-test
​
[root@localhost ~]# curl localhost:8080
无返回内容
​
取消暂停容器
[root@localhost ~]# docker unpause nginx-test
nginx-test
​
​
[root@localhost ~]# curl localhost:8080
...
有返回内容
​
​

容器差异对比

修改容器

进入容器
[root@localhost ~]# docker exec -it nginx-test /bin/bash
​
查看容器内部nginx首页
root@fe352b7ad389:/# ls /usr/share/nginx/html/
50x.html  index.html
​
修改首页
容器为精简版
root@fe352b7ad389:/# vi 1.txt   
bash: vi: command not found
​
root@fe352b7ad389:/# echo 'hello world' > /usr/share/nginx/html/index.html 
root@fe352b7ad389:/# exit
exit
[root@localhost ~]# curl localhost:8080
hello world
​

对比

​
对比命令帮助
[root@localhost ~]# docker diff --help
​
Usage:  docker diff CONTAINER
​
Inspect changes to files or directories on a container's filesystem
​
Aliases:
  docker container diff, docker diff
​
对比
[root@localhost ~]# docker diff nginx-test
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /root
A /root/.bash_history
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
C /run
A /run/nginx.pid
​

看到一些配置文件在容器运行时有更改,添加了一些缓存文件,同时index.html的修改体现出来了。

容器复制文件

帮助命令

[root@localhost ~]# docker cp --help
​
Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
​
Copy files/folders between a container and the local filesystem
​
Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.
​
Aliases:
  docker container cp, docker cp
​
Options:
  -a, --archive       Archive mode (copy all uid/gid information)
  -L, --follow-link   Always follow symbol link in SRC_PATH
  -q, --quiet         Suppress progress output during copy. Progress output is automatically suppressed if no
                      terminal is attached
​

从容器复制文件到宿主机

复制nginx容器的index.html到宿主机的当前目录
[root@localhost ~]# docker cp nginx-test:/usr/share/nginx/html/index.html ./
Successfully copied 2.05kB to /root/./
​
[root@localhost ~]# ls
anaconda-ks.cfg  index.html
​
[root@localhost ~]# cat index.html 
hello world

从宿主机复制文件到容器

修改宿主机index.html文件
[root@localhost ~]# echo "hello docker" >> index.html
[root@localhost ~]# cat index.html 
hello world
hello docker
​
复制宿主机文件到容器
[root@localhost ~]# docker cp ./index.html nginx-test:/usr/share/nginx/html/index.html
Successfully copied 2.05kB to nginx-test:/usr/share/nginx/html/index.html
​
再次访问8080端口
[root@localhost ~]# curl localhost:8080
hello world
hello docker
​

查看Docker容器底层信息

docker inspect记录底层信息包括,容器的配置及状态信息

docker inspect

操作

[hadoop@node1 ~]$ sudo docker inspect nginx-test
[
    {
        "Id": "703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8",
        "Created": "2024-08-15T13:14:23.488407988Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 27814,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-08-15T14:01:09.620292061Z",
            "FinishedAt": "2024-08-15T13:59:39.032902367Z"
        },
        "Image": "sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85",
        "ResolvConfPath": "/var/lib/docker/containers/703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8/hostname",
        "HostsPath": "/var/lib/docker/containers/703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8/hosts",
        "LogPath": "/var/lib/docker/containers/703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8/703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8-json.log",
        "Name": "/nginx-test",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "90"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                24,
                80
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "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",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": [],
            "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",
                "/sys/devices/virtual/powercap"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/85c05f16ba70e0f7b0ae92a6308b58f607e549f9363b06e245e336cd988be4fd-init/diff:/var/lib/docker/overlay2/b02fecf833fb25cd1e94324f315c363cc73162f4985aa53923b4e8fbf5055d81/diff:/var/lib/docker/overlay2/bac61cbe5790634305a8432a9dfb0b0034d09cd8dc45fd6d1ae25631ecbd8daf/diff:/var/lib/docker/overlay2/e8bb25e3796f5c494ca93d2481199f291206a5cd3cce2a4886596ac5156ddf19/diff:/var/lib/docker/overlay2/4df03de3126bc9f6084e68b4ce7bb5f617e52a8a12e06d8375a02c99fe75306a/diff:/var/lib/docker/overlay2/fce829188934d76a0d63f2346c5969ad3d1a559f1d7737f43cb25bfda66dd350/diff:/var/lib/docker/overlay2/f920083f8c3b268e9444ffe6768575ccd9db9f512be0297baabd12e4ed1175b3/diff",
                "MergedDir": "/var/lib/docker/overlay2/85c05f16ba70e0f7b0ae92a6308b58f607e549f9363b06e245e336cd988be4fd/merged",
                "UpperDir": "/var/lib/docker/overlay2/85c05f16ba70e0f7b0ae92a6308b58f607e549f9363b06e245e336cd988be4fd/diff",
                "WorkDir": "/var/lib/docker/overlay2/85c05f16ba70e0f7b0ae92a6308b58f607e549f9363b06e245e336cd988be4fd/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "703ef7d2c6b4",
            "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.21.5",
                "NJS_VERSION=0.7.1",
                "PKG_RELEASE=1~bullseye"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "c3315125e38a83e2b871a1fc3ceb6547310f731215b83667972afd1e4f4caab5",
            "SandboxKey": "/var/run/docker/netns/c3315125e38a",
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "90"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "90"
                    }
                ]
            },
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "cd8cb3aa2535557c36b545a81dc1e9cc7c745dbc4103766e16f9b0ef39c0c2ea",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:02",
                    "NetworkID": "49699130213cd4e33a15ab50fa9d6f6244d1ce9f660c28fb33730c239f7ecc34",
                    "EndpointID": "cd8cb3aa2535557c36b545a81dc1e9cc7c745dbc4103766e16f9b0ef39c0c2ea",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": null
                }
            }
        }
    }
]
[hadoop@node1 ~]$
​

导出容器

docker export 

操作

导出容器快照
[hadoop@node1 ~]$ sudo docker export 703ef7d2c6b4 > mynginx.tar
​
[hadoop@node1 ~]$ ls
--add-repo  docker-client         docker-common  docker-latest            docker-logrotate                  flinkdemo-1.0-SNAPSHOT.jar  soft
bin         docker-client-latest  docker-engine  docker-latest-logrotate  flink-connector-kafka-1.17.1.jar  mynginx.tar                 softinstall
[hadoop@node1 ~]$
​

导入容器

docker import

操作

[hadoop@node1 ~]$ ll
total 141244
...
-rw-rw-r-- 1 hadoop hadoop 144026112 Aug 15 22:43 mynginx.tar
drwxrwxr-x 7 hadoop hadoop      4096 Mar 29 00:09 soft
drwxrwxr-x 2 hadoop hadoop      4096 Mar 28 23:51 softinstall
​
导入容器快照成为镜像
[hadoop@node1 ~]$ cat mynginx.tar | sudo docker import - test/mynginx:v1
sha256:ada934093571adf88696ef0da86537c1f81d66635be079ad5da36f52e0605ac8
或者 直接使用docker import导入容器快照
[hadoop@node1 ~]$ sudo docker import mynginx.tar test/mynginx1:v1.0
sha256:bd0f5df43117a76d81eaa820d25e963c9ce3dbfabb8100948f69f8c450061dd9
​
​
[hadoop@node1 ~]$ sudo docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
test/mynginx1   v1.0      bd0f5df43117   6 seconds ago    140MB
test/mynginx    v1        ada934093571   13 minutes ago   140MB
nginx           latest    605c77e624dd   2 years ago      141MB
hello-world     latest    feb5d9fea6a5   2 years ago      13.3kB
​

如果不写版本号,默认TAG是latest

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

运行容器,报错如下

[hadoop@node1 ~]$ sudo docker run --name mynginx1 -p 92:80 -d test/mynginx1:v1.0
docker: Error response from daemon: no command specified.
See 'docker run --help'.
​

报错提示需要指定COMMAND

查看COMMAND

查看COMMAND为:/docker-entrypoint.sh nginx -g 'daemon off;'
[hadoop@node1 ~]$ sudo docker ps --no-trunc
CONTAINER ID                                                       IMAGE     COMMAND                                          CREATED         STATUS             PORTS                               NAMES
1cfee1f2323f08c75d0fef8b42f8e2bde9094b2bfef416f48198e36ec1c4b331   nginx     "/docker-entrypoint.sh nginx -g 'daemon off;'"   9 minutes ago   Up 9 minutes       0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4a44a18ef729f11b8fdd235941d0e3a5b2ff3d5e4d25abc71cdf8   nginx     "/docker-entrypoint.sh nginx -g 'daemon off;'"   2 hours ago     Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
带上命令参数运行,成功如下
[hadoop@node1 ~]$ sudo docker run --name mynginx1 -p 92:80 -d test/mynginx1:v1.0 /docker-entrypoint.sh nginx -g 'daemon off;'
aca58f0340a60ec8f93936c945e83cd8547e4b4669b2d5f9f6620b7dd909443b
​
查看镜像
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS             PORTS                               NAMES
aca58f0340a6   test/mynginx1:v1.0   "/docker-entrypoint.…"   14 seconds ago   Up 13 seconds      0.0.0.0:92->80/tcp, :::92->80/tcp   mynginx1
1cfee1f2323f   nginx                "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx                "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
命令访问页面
[hadoop@node1 ~]$ curl localhost:92
hello world
​

移除容器

docker rm <容器ID>/<name>

操作

[hadoop@node1 ~]$ sudo docker rm mynginx1
Error response from daemon: cannot remove container "/mynginx1": container is running: stop the container before removing or force remove
​

移除容器之前必须先删除容器,或者加上-f强制删除

[hadoop@node1 ~]$ sudo docker rm --help
​
Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
​
Remove one or more containers
​
Aliases:
  docker container rm, docker container remove, docker rm
​
Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)
  -l, --link      Remove the specified link
  -v, --volumes   Remove anonymous volumes associated with the container
[hadoop@node1 ~]$
​

先停止容器,再删除容器

停止容器
[hadoop@node1 ~]$ sudo docker stop mynginx1
mynginx1
​
删除容器
[hadoop@node1 ~]$ sudo docker rm mynginx1
mynginx1
​
​
查看正在运行的容器,没有mynginx1
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS             PORTS                               NAMES
1cfee1f2323f   nginx     "/docker-entrypoint.…"   23 minutes ago   Up 23 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
查看所有容器,也没有mynginx1
[hadoop@node1 ~]$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS             PORTS                               NAMES
1cfee1f2323f   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​

-f强制删除容器

启动容器
[hadoop@node1 ~]$ sudo docker run --name mynginx2 -p 93:80 -d test/mynginx:v1 /docker-entrypoint.sh nginx -g 'daemon off;'
8914e1b3fe3fdeca9db2143976bceab6fcaecb80ba9ff474758b0d2a04c1b512
​
查看运行的容器
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS             PORTS                               NAMES
8914e1b3fe3f   test/mynginx:v1   "/docker-entrypoint.…"   13 seconds ago   Up 13 seconds      0.0.0.0:93->80/tcp, :::93->80/tcp   mynginx2
1cfee1f2323f   nginx             "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx             "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
访问93端口
[hadoop@node1 ~]$ curl localhost:93
hello world
​
删除容器
[hadoop@node1 ~]$ sudo docker rm -f 8914e1b3fe3f
8914e1b3fe3f
​
再次查看运行的容器
[hadoop@node1 ~]$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS             PORTS                               NAMES
1cfee1f2323f   nginx     "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
查看所有容器
[hadoop@node1 ~]$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS             PORTS                               NAMES
1cfee1f2323f   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes      0.0.0.0:91->80/tcp, :::91->80/tcp   nginx-test1
703ef7d2c6b4   nginx     "/docker-entrypoint.…"   2 hours ago      Up About an hour   0.0.0.0:90->80/tcp, :::90->80/tcp   nginx-test
​
​

批量删除容器

批量删除容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED       STATUS                      PORTS                                     NAMES
b27b99ac2f44   nginx         "/docker-entrypoint.…"   2 weeks ago   Exited (255) 13 hours ago   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   nginx-test
80cd29b75497   hello-world   "/hello"                 2 weeks ago   Exited (0) 2 weeks ago                                                charming_liskov
e62e04394ccc   hello-world   "/hello"                 4 weeks ago   Exited (0) 4 weeks ago                                                jolly_driscoll
​
​
[root@localhost ~]# docker rm $(docker ps -a -q)
b27b99ac2f44
80cd29b75497
e62e04394ccc

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
​
​
​
​
​
docker ps帮助
[root@localhost ~]# docker ps --help
​
Usage:  docker ps [OPTIONS]
​
List containers
​
Aliases:
  docker container ls, docker container list, docker container ps, docker ps
​
Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about formatting
                        output with templates
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display container IDs
  -s, --size            Display total file sizes
​
​
​

思考

Docker容器与宿主机的关系?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点&#xff08;同级节点&#xff09; 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

一款辅助渗透测试过程,让渗透测试报告一键生成

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

动态顺序表的增删改查(数据结构)

目录 一、顺序表 二、静态顺序表 三、动态顺序表 3.1、动态顺序表的实现 3.2、动态顺序表的实现 3.3.1、结构体创建 3.3.2、初始化 3.3.3、销毁数据 3.3.4、增容空间 3.3.5、尾插数据 3.3.6、头插数据 3.3.7、删除尾数据 3.3.8、打印数据 3.3.9、删除头数据 3.3…

设备管理系统-TPM(PC+APP/PDA全流程)高保真Axure原型 源文件分享

随着科技的不断发展&#xff0c;企业对于设备管理的需求也日益增强。为了满足企业在设备管理方面的各种需求&#xff0c;站长为大家整理了一套设备管理系统TPM&#xff08;PCAPP/PDA全流程&#xff09;高保真Axure原型&#xff0c;通过这套原型&#xff0c;企业能够实现对设备的…

TDSQL-C电商小助手,AI驱动的智能化数据洞察新纪元

前言&#xff1a; 在数字经济蓬勃发展的今天&#xff0c;电商行业作为数字化转型的先锋&#xff0c;正以前所未有的速度积累着海量数据。这些数据不仅是交易记录的简单堆砌&#xff0c;更是企业洞察市场趋势、优化运营策略、提升用户体验的宝贵财富。然而&#xff0c;如何从这…

【2024.9.28练习】青蛙的约会

题目描述 题目分析 由于两只青蛙都在跳跃导致变量多&#xff0c;不妨采用物理题中的相对运动思想&#xff0c;设青蛙A不动&#xff0c;青蛙B每次跳米&#xff0c;两只青蛙的距离为米。正常来说&#xff0c;只要模拟青蛙B与青蛙A的相对运动过程&#xff0c;最终当青蛙B与青蛙A距…

Goweb---Gorm操作Mysql数据库(一)

本文重点&#xff1a; db.AutoMigrate()这个函数的理解&#xff1a; AutoMigrate是GORM提供的一个方法&#xff0c;用于自动迁移你的模型&#xff08;即数据库表结构&#xff09;到数据库中&#xff0c;确保数据库表与你的Go结构体&#xff08;模型&#xff09;保持一致。 首先…

第十四届蓝桥杯真题Python c组D.平均(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;蓝桥杯关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 【问题描述】 有一个长度为n的数组(n是10的倍数)&#xff0c;每个数 …

vscode配置Eslint后保存出现大量波浪线

解决问题&#xff1a;配置代码格式化 快捷键打开设置&#xff1a;ctrlshiftP 输入&#xff1a; format code 选择&#xff1a;

MySQL-数据库约束

1.约束类型 类型说明NOT NULL非空约束 指定非空约束的列不能存储NULL值 DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL和UNIQUE的结合&#xff0c;可以指定一个列霍多个列&#xff0c;有助于…

qt6 使用QPSQL

qt6 自带pg数据库驱动&#xff1a; pro文件加个说明&#xff1a; 引用位置添加&#xff08;按需添加&#xff0c;这里我就大致加一下&#xff09;&#xff1a; test code: 理想情况当然是要用pool,这里只是演示调用而已 QSqlError DbTool::testConnection(const QString &…

LSTM预测未来30天销售额

加入深度实战社区:www.zzgcz.com&#xff0c;免费学习所有深度学习实战项目。 1. 项目简介 本项目旨在利用深度学习中的长短期记忆网络&#xff08;LSTM&#xff09;来预测未来30天的销售额。LSTM模型能够处理时序数据中的长期依赖问题&#xff0c;因此在销售额预测这类涉及时…

19款奔驰E300升级新款触摸屏人机交互系统

《19 款奔驰 E300 的科技焕新之旅》 在汽车科技日新月异的时代&#xff0c;19 款奔驰 E300 的车主们为了追求更卓越的驾驶体验&#xff0c;纷纷选择对爱车进行升级改装&#xff0c;其中新款触摸屏人机交互系统的改装成为了热门之选。 19 款奔驰 E300 作为一款经典车型&#x…

Vue和axios零基础学习

Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行&#xff0c;切换成淘宝镜像源&#xff0c;安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件&#xff0c;在终端输入…

DMA的原理

一、介绍 DMA&#xff08;Direct Memory Access&#xff09;是一种允许设备直接与内存进行数据交换的技术&#xff0c;无需‌CPU干预。DMA的主要功能是提供在‌外设和存储器之间或者存储器和存储器之间的高速数据传输。比如使用ADC进行数据采集&#xff0c;可以直接将数据存入…

【STM32】江科大STM32笔记汇总(已完结)

STM32江科大笔记汇总 STM32学习笔记课程简介(01)STM32简介(02)软件安装(03)新建工程(04)GPIO输出(05)LED闪烁& LED流水灯& 蜂鸣器(06)GPIO输入(07)按键控制LED 光敏传感器控制蜂鸣器(08)OLED调试工具(09)OLED显示屏(10)EXTI外部中断(11)对射式红外传感器计次 旋转编码器…

GAMES101(21~22节,动画和仿真)

Animation 关键帧 动画和几何&#xff08;曲线&#xff09;相关 物理模拟/仿真 牛顿第二定律&#xff1a;F ma 需要清楚网格间相互作用力&#xff0c;也需要把物理仿真和渲染分为两部来看&#xff0c;例如布料模拟&#xff0c;流体模拟 mass spring system质点弹簧系统 …

Nest.js实现一个简单的聊天室

本文将介绍如何使用 Nest.js 和 Uni-app 实现一个简单的实时聊天应用。后端使用 nestjs/websockets 和 socket.io&#xff0c;前端使用 uni-app 并集成 socket.io-client。这个项目允许多个用户同时加入聊天并实时交换消息。 效果图&#xff1a; 一、准备工作 安装 Node.js 和…

数据结构与算法——Java实现 24.中缀表达式转后缀

目录 中缀表达式转后缀表达式 引言 思路 代码 正因为我有能力跨越&#xff0c;考验才会降临 —— 24.9.28 中缀表达式转后缀表达式 引言 Java中的编译器会将我们编写代码中的中缀表达式转化为后缀表达式&#xff0c;然后编译好输出程序 思路 遍历中缀表达式&#xff0c;如果遇…

电脑学习通看不到课程解决办法

电脑学习通看不到课程解决办法 查看学习通时发现没有课程 解决方法1: 更改单位 具体见:超星学习通关于PC版无法查看课程问题解决 解决方法二:添加应用 添加应用 点击账号管理 点击应用管理 添加应用、添加首页这个应用 添加完成后查看首页就能看到课程了 然后就OK啦、就可…