Docker的常用命令

Docker的常用命令

常用命令

docker version	 #显示docker的版本信息
docker info		 #显示docker的系统信息,包括镜像和容器的数量
docker命令 --he1p #帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/run/

如果要使用 Docker 作为非 root 用户,怎么办?

如果您希望以非 root 用户的身份使用 Docker,可以按照以下步骤进行配置:

  1. 将用户添加到 Docker 用户组:
    默认情况下,只有 root 或者在 sudoers 列表中的用户才能运行 Docker 命令。为了允许其他用户访问 Docker 命令,可以将这些用户添加到 Docker 用户组中。

    sudo usermod -aG docker your_username
    

    将 “your_username” 替换为您想要添加到 Docker 组的用户名。

  2. 重新登录或重新加载组:
    添加用户到 Docker 用户组后,为了生效,您需要重新登录系统,或者重新加载组:

    newgrp docker  # 或者重新登录系统
    
  3. 测试 Docker 权限:
    运行一个 Docker 命令测试一下是否成功以非 root 用户的身份访问 Docker:

    docker run hello-world
    

通过将用户添加到 Docker 用户组,您就可以允许这些用户在不使用 sudo 的情况下运行 Docker 命令。请注意,这可能会涉及一些安全风险,因此务必谨慎地将用户添加到 Docker 组,并确保了解他们所能执行的操作。

bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var

这些是典型的 Linux 系统目录结构。在 Linux 系统中,这些目录用于组织文件和系统资源。

  • bin: 存放二进制可执行文件,常用的命令(如ls、cp)通常位于此处。
  • boot: 包含启动系统所需的文件,如引导加载程序、内核和启动时使用的配置文件。
  • dev: 是特殊文件的存放位置,包括设备文件,它们用于与硬件设备进行通信。
  • etc: 包含系统范围的配置文件,例如网络配置、软件包管理器的配置等。
  • home: 用户的家目录,每个用户通常拥有一个自己的子目录。
  • lib, lib32, lib64, libx32: 存放库文件,用于支持程序的运行和链接。
  • media: 用于挂载可移动媒体设备(如USB驱动器、光盘等)的挂载点。
  • mnt: 用于临时挂载文件系统或其他设备的目录。
  • opt: 用于安装额外的软件包的目录,通常由用户安装的应用程序存放于此。
  • proc: 虚拟文件系统,提供系统和进程信息的接口,可以通过读取文件和目录来获取系统信息。
  • root: root用户的家目录。
  • run: 包含在系统启动时创建的运行时信息,如PID文件和套接字文件。
  • sbin: 存放系统管理员(root)使用的系统命令。
  • srv: 用于存放服务数据的目录,如HTTP、FTP等服务的数据。
  • sys: 包含系统硬件和内核信息的虚拟文件系统。
  • tmp: 用于存放临时文件的目录。
  • usr: 包含用户程序和文件的目录。
  • var: 包含经常变化的文件,如日志文件、缓存文件等。

这些目录有助于在 Linux 系统中组织文件、管理资源和提供系统服务。每个目录都有其特定的用途,有助于使 Linux 系统更有序、更易于管理。

镜像命令

docker images 查看所有本地主机上的镜像

# docker images 和 docker images -a 
root@ubuntu:~# docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   18 months ago   13.3kB

#解释
REPOSITORY	镜像的仓库源
TAG		    镜像的标签
IMAGE ID	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

#可选项
-a,--a11	#列出所有镜像
-q,--quiet	#只显示镜像的id 

docker search 搜索镜像

root@ubuntu:~# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   14028     [OK]
mariadb                         MariaDB Server is a high performing open sou…   5352      [OK]

#可选项, 通过搜藏来过滤
--filter-STARS=3000 # 搜索出来的镜像就是STARS大于3000的
root@ubuntu:~# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   14028     [OK]
mariadb   MariaDB Server is a high performing open sou…   5352      [OK]

docker pull 下载镜像

#下载境像docker pul1镜像名[:tag]
[rootekuangshen /]# docker pull mysql
using default tag: latest # 如果不写tag. 默认就是latest
latest: Pulling from lbrary/mysq1
5b54d594fba7: Pu11 complete #分层下载,docker iamge的核心联合文件系统
07e7d6a8a868: Pu11 complete
abd946892310: Pu11 complete
dd8f4d07efa5: Pul1 complete
076d396a6205: Pu11 complete
cf6b2b93048f: Pul1 complete
530904b4a8b7: Pu11 complete
fble55059a95: Pul1 complete
4bd29a0dcde8: Pu11 complete
b94a001c6ec7: Pu11 complete
cb77cbeb422b: Pu11 complete
2a35cdbd42cc: Pu11 complete
Digest: sha256 :dc255caS0a42b3589197000b1 f9bab2b4e010158d1a9f56c3db6ee145506f625 #签名
Status: Downloaded newer image for mysql:latest
docker. io/library/mysq1:latest #真实地址

#等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest

#指定版本下载
root@ubuntu:~# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7


root@ubuntu:~# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         latest    412b8cc72e4a   5 days ago      531MB
mysql         5.7       c20987f18b13   15 months ago   448MB
hello-world   latest    feb5d9fea6a5   18 months ago   13.3kB

docker rmi 删除镜像

[rootakuangshen /]# docker rmi -f 容器id # 删除指定的容器
[root@kuangshen /]# docker rmi -f 容器id 容器id 容器id 容器id # 删除多个容器
[rootakuangshen /]# docker rmi -f $(docker images -aq) #删除全部的容器

docker load 加载镜像

语法

docker load [OPTIONS]

OPTIONS 说明:

  • –input , -i : 指定导入的文件,代替 STDIN。
  • –quiet , -q : 精简输出信息。
# docker load -i /home/moran/ubuntu.tar
docker load -i 镜像容器路径

docker save 保存镜像

docker save : 将指定镜像保存成 tar 归档文件。

语法

docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS 说明:

  • **-o 😗*输出到的文件。

实例

将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档

runoob@runoob:~$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
runoob@runoob:~$ ll my_ubuntu_v3.tar
-rw------- 1 runoob runoob 142102016 Jul 11 01:37 my_ubuntu_v3.ta

容器命令

说明:我们有了镜像才可以创建容器. linux.下载一个 ubuntu 镜像来测试学习

docker pull ubuntu

为什么docker容器的网络跟宿主机的不一样?

kongming20@ubuntu:~$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:e1ff:fe7e:c653  prefixlen 64  scopeid 0x20<link>
        ether 02:42:e1:7e:c6:53  txqueuelen 0  (Ethernet)
        RX packets 3655  bytes 162913 (162.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3966  bytes 53093806 (53.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.109  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:0c:29:6e:0c:d8  txqueuelen 1000  (Ethernet)
        RX packets 324895  bytes 458674629 (458.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 73696  bytes 5335572 (5.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1529  bytes 140766 (140.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1529  bytes 140766 (140.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth33f79ef: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::38b9:d7ff:fe99:2fd0  prefixlen 64  scopeid 0x20<link>
        ether 3a:b9:d7:99:2f:d0  txqueuelen 0  (Ethernet)
        RX packets 3655  bytes 214083 (214.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3997  bytes 53096857 (53.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0      
root@27346d8b24d1:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 3997  bytes 53096857 (53.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3655  bytes 214083 (214.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在默认情况下,Docker 使用自己的网络桥接来连接容器,因此容器分配的 IP 地址通常与宿主机的 IP 地址不同。

docker0 是 Docker 的默认网络桥接,用于连接 Docker 容器和宿主机。当 Docker 启动时,会在主机上创建一个名为 docker0 的虚拟网桥。这个网桥允许容器连接到宿主机,并提供网络访问和通信。容器被分配在 docker0 网络的子网中,一般默认情况下是 172.17.0.0/16 网段。

docker0 的 IP 地址 172.17.0.1 是该虚拟网桥在宿主机上的地址,它作为 Docker 的默认网关地址,用于容器之间和容器与宿主机之间的通信。容器会从这个子网中分配 IP 地址。

这种默认的网络配置允许 Docker 管理和隔离容器的网络,同时为容器提供通信和外部访问的途径。

当启动容器后,我能通过ssh连接到容器嘛?

可以通过 SSH 连接到运行中的容器,但要注意几个方面:

  1. 容器中是否有 SSH 服务: 首先,确保容器内安装了 SSH 服务。如果容器中没有安装 SSH 服务,您将无法通过 SSH 连接。

  2. SSH 端口的映射: 如果容器内运行了 SSH 服务,确保容器的 SSH 端口映射到宿主机上。启动容器时,可以通过 -p 参数将容器的 SSH 端口映射到宿主机的某个端口上。

    例如,要将容器内的 SSH 服务映射到宿主机的 2222 端口,可以在启动容器时使用以下命令:

    docker run -p 2222:22 -d image_name
    

    其中 -p 2222:22 将容器内的 SSH 端口 22 映射到宿主机的 2222 端口上。

  3. 连接容器: 一旦容器内运行了 SSH 服务并映射了端口,您可以使用 SSH 客户端连接到容器。连接时需要使用容器的 IP 地址或者宿主机的 IP 地址和映射的端口号。

    ssh user@container_ip -p mapped_port
    

    user 替换为您的用户名,container_ip 替换为容器的 IP 地址,mapped_port 替换为映射的端口号。

在确保容器内有 SSH 服务运行且端口映射设置正确的情况下,您就可以通过 SSH 连接到运行中的容器。

容器内的systemctl不可用?

这个错误是因为在容器内部运行了 systemctl 命令,但容器内并未使用 systemd 作为初始化系统。在容器内,通常不会像在常规的 Linux 主机上那样使用 systemd 这样的 init 系统。

在容器中执行 systemctl 命令通常无法直接控制服务,因为容器通常会使用单个应用程序来作为其主要进程,并且容器的生命周期与这个应用程序的生命周期相关联。因此,控制服务、启动和停止服务等通常是通过应用程序本身的命令或管理脚本来完成。

如果要管理 SSH 服务,您可以使用 SSH 服务的原生命令来启动、停止或重新加载服务。例如,对于 OpenSSH 服务,您可以使用以下命令来启动 SSH 服务:

service ssh start

或者,如果您使用的是不同的 SSH 服务,可能需要使用适当的命令来启动服务。请记住,在容器中,您可能需要以 root 或具有相应权限的用户身份来执行这些操作。

新建容器并启动

docker run [可选参数] image 
#参数说明
--name-"Name"    容器名字tomcat01 tomcat02. 用来区分容器
-d				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p				指定容器的端口-p 8080:8080
	-p 	ip:主机端口:容器端口
	-p	主机端口:容器端口 (常用)
	-p	容器端口:容器端口
-P				随机指定端口


root@ubuntu:~# docker run -it ubuntu /bin/bash
root@0704e61145f4:/# ls   #查看容器内的ubuntu,基础版本,很多命令都是不完善的!
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

#从容器中返回主机
root@0704e61145f4:/# exit
exit

列出所有运行的容器

root@ubuntu:/# docker ps(默认显示正在运行的容器)
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

root@ubuntu:/# docker ps -a(显示所有的容器)
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                      PORTS     NAMES
0704e61145f4   ubuntu         "/bin/bash"   33 minutes ago   Exited (0) 29 minutes ago             unruffled_solomon
30f905eed98d   feb5d9fea6a5   "/hello"      24 hours ago     Exited (0) 24 hours ago               affectionate_blackburn

退出容器

exit 	      # 直接容器停止并退出
ctrl + P + Q   #容器不停止退出

删除容器

docker rm 容器id   			 	  #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)		#删除所有的容器
docker ps -a -q | xargs docker rm    #删除所有的容器

启动和停止容器的操作

docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id 	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前器

拷贝本地文件到docker容器

  1. 查找容器

    docker ps -a
    
  2. 确定我们的容器名,并获取容器长ID

    docker inspect -f 容器id或者容器
    
  3. 拷贝本地文件到容器

    docker cp 你的文件路径 容器长ID:docker容器路径
    
  4. 例子:

    moran778@moran:/mnt/d/桌面/交换机软件组/源码$ docker cp ./openlldp-master 0ff05f33707b807246c3594f84f2c615308d5dfefedd1fa4a0e158e661368c08:/home/moran/code
    Successfully copied 2.96MB to 0ff05f33707b807246c3594f84f2c615308d5dfefedd1fa4a0e158e661368c08:/home/moran/code
    
  5. 最后,进入容器查看是否成功拷贝

    root@0ff05f33707b:/home/moran/code# ls
    openlldp-master
    

常用其他命令

后台启动容器

#命令 docker run -d	镜像名!
[root@kuangshen /]# docker run -d centos	#问题docker ps,发现centos停止了
#常见的坑: docker 容器使用后台运行。就必须要有要一个前台进程。docker发现没有应用。就会自动停止
# nginx.容器启动后,发现自己投有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs -f -t --tail	# 容器,没有日志
# 己编写一段she11脚本
root@ubuntu:/# docker run -d ubuntu /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
root@ubuntu:/# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
608d8b9678d1   ubuntu    "/bin/sh -c 'while t…"   10 seconds ago   Up 7 seconds             hardcore_sinoussi

# 显示日志
-tf					# 显示日志
--tai1 number 		 # 要显示日志条数
root@ubuntu:/# docker logs -tf --tail 10 608d8b9678d1

查看容器中进程信息ps

#命令 docker top 容器id
root@ubuntu:/# docker top 608d8b9678d1
UID	   PID	   PPID		C	STIME	TTY	 TIME		CMD
root   11169   11136     0   05:00   ?     00:00:00   /bin/sh -c while true;do echo kuangshen;sleep 1;done
root   11592   11169     0   05:05   ?     00:00:00	  sleep 1

查看镜像的元数据

#命令
docker inspect 容器id

#测试
root@ubuntu:/# docker inspect 608d8b9678d1
[
    {
        "Id": "608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5",
        "Created": "2023-04-12T12:00:15.394719245Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo kuangshen;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 11169,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-04-12T12:00:17.470433737Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1",
        "ResolvConfPath": "/var/lib/docker/containers/608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5/hostname",
        "HostsPath": "/var/lib/docker/containers/608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5/hosts",
        "LogPath": "/var/lib/docker/containers/608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5/608d8b9678d162d2adc546ca14637d7986374e0b530f070c9efa9799424ac1d5-json.log",
        "Name": "/hardcore_sinoussi",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                39,
                66
            ],
            "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": 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": {
                "LowerDir": "/var/lib/docker/overlay2/a159027172c4210ef74063f14b2e670e148e92abe3d63c6464bd223572989d14-init/diff:/var/lib/docker/overlay2/df299b57616369297db53d74e6fb534ca7f8638b6ea569d68bffc3d322e37c0d/diff",
                "MergedDir": "/var/lib/docker/overlay2/a159027172c4210ef74063f14b2e670e148e92abe3d63c6464bd223572989d14/merged",
                "UpperDir": "/var/lib/docker/overlay2/a159027172c4210ef74063f14b2e670e148e92abe3d63c6464bd223572989d14/diff",
                "WorkDir": "/var/lib/docker/overlay2/a159027172c4210ef74063f14b2e670e148e92abe3d63c6464bd223572989d14/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "608d8b9678d1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo kuangshen;sleep 1;done"
            ],
            "Image": "ubuntu",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "e44f4ae462cc9e9bdb414cb4725681e2d4a94a9ef529c41d252533ed80af6573",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/e44f4ae462cc",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "6239f2b47771a4ada314f2cd56c12f6b993b7f2cb70c754897e4705d94867532",
            "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,
                    "NetworkID": "0decb42a50bfe277c9ad1f87691fbe49fc4af04b910b41b08c14f85ebf4648a9",
                    "EndpointID": "6239f2b47771a4ada314f2cd56c12f6b993b7f2cb70c754897e4705d94867532",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

# 我们通常容器都是使用后台方式运行的。需要进入容器。修改一些配置

# 命令
docker exec -it 容器id bashshell

# 测试
root@ubuntu:/# docker exec -it 608d8b9678d1 /bin/bash
root@608d8b9678d1:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@608d8b9678d1:/# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 12:00 ?        00:00:00 /bin/sh -c wh
root         933       0  0 12:15 pts/0    00:00:00 /bin/bash
root         965       1  0 12:16 ?        00:00:00 sleep 1
root         966     933  0 12:16 pts/0    00:00:00 ps -ef

# 方式二
docker attach 容器id

# 测试
root@ubuntu:/# docker attach 608d8b9678d1
正在执行当时的代码...

# docker exec	 #进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach	 #进入容器正在执行的终端,不会启动新的进程!

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

docker cp	容器id:容器内路径	目的的主机路径
#查看当前主机目录下
root@ubuntu:/home# ls
ernest-laptop  moran.java
root@ubuntu:/home# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                           PORTS     NAMES
a3552be50363   ubuntu         "/bin/bash"              5 minutes ago       Exited (0) 9 seconds ago                   busy_murdock791b8ab3f469   ubuntu         "/bin/bash"              8 minutes ago       Exited (127) 7 minutes ago                 competent_colden

#进入到docker容器内部
root@ubuntu:/home# docker attach a3552be50363
root@a3552be50363:/# cd /home

#在容器内新建一个文件
root@a3552be50363:/home# touch test.java
root@a3552be50363:/home# ls
test.java
root@a3552be50363:/# exit
root@ubuntu:/home# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                           PORTS     NAMES
a3552be50363   ubuntu         "/bin/bash"              5 minutes ago       Exited (0) 9 seconds ago                   busy_murdock791b8ab3f469   ubuntu         "/bin/bash"              8 minutes ago       Exited (127) 7 minutes ago                 competent_colden

#将这个文件拷贝出来到主机上
root@ubuntu:/home# docker cp a3552be50363:/home/test.java /home
Successfully copied 1.536kB to /home
root@ubuntu:/home# ls
ernest-laptop  moran.java  test.java

#拷贝是一个手动过程,未来我们使用 -V 卷的技术,可以实现!

小结

1681305443884

attach		Attach to a running container					# 当前 shell 下 attach 连接指定运行镜像
build		Build an image from a Dockerfile				# 通过 Dockerfile 定制镜像
commit		Create a new image from a container changes		 # 提交当前容器为新的镜像
cp	    	Copy files/folders from the containers filesystem to the host path	#从容器中拷贝指定文件或者目录到宿主机中
create		Create a new container						   # 创建一个新的容器,同run 但不启动容器
diff    	Inspect changes on a container's filesys tem	 # 查看docker容器变化
events		Get real time events from the server			# 从docker 服务获取容器实时事件
exec		Run a command in an existing container			# 在已存在的容器上运行命令
export		Stream the contents of a container as a tar archive	# 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history		Show the history of an inage                     # 展示一个镜像形成历史
images		List images                                      # 列出系统当前镜像
		Create a new filesystem image from the contents of a tarball # 从 tar 包中的内容创建一个新的文件系统映像[对应export]
info		Display systen-wide information                  # 显示系统相关信息
inspect		Return low-level infornation on a conta iner     # 查看容器详细信息
ki11		Ki11 a running container                         # kill 指定 docker 容器
load		Load an image from a tar archive                 # 从一个 tar 包中加载一个镜像[对应save]
login		Register or Login to the docker registry server  # 注册或者登录一个docker 源服务器
logout		Log out from a Docker registry server			# 从当前Docker registry 退出
logs		Fetch the 1ogs of a container                    # 输出当前容器日志信息
port		Lookup the public-facing port which is NAT-ed to PRIVATE PORT	# 查看映射端0对应的容器内部源端
pause		Pause a11 processes within a container			# 暂停容器
ps			List containers								  # 列出容器列表
pull		Pu11 an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push		Push an image or a repository to the docker registry server	# 推送指定镜像或者库镜像至docker源服务器
restart      Restart a running container					# 重启运行的容器
rm			Remove one or more containers                    # 移除一个或者多个容器
rmi			Remove one or more images					   # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或-f强制删除]
run			Run a command in a new container				# 创建一个新的容器并运行一个命令
save		Save an image to a tar archive					# 保存一个镜像为一个tar包[对应load]
search		Search for an image on the Docker Hub			# 在dockerhub中搜索镜像
start		Start a stopped containers						# 启动容器
stop		stop a running containers						# 停止容器
tag			Tag an image into a repository					# 给源中镜像打标签
top			Lookup the running processes of a container		 # 查看容器中运行的进程信息
unpause		Unpause a paused conta iner						# 取消暂停容器
version		Show the docker version information			     # 查看docker版本号
wait		Block until a container stops, then print its exit code	# 截取容器停止时的退出状态值

1681305699318

1681305754795

docker的命令是十分多的,上面我们学习的那些都是最常用的容器和镜像的命令,之后我们还会学习很多!

作业练习

Docker 安装Nginx

# 1.搜索search 镜像,建议大家去docker搜索,可以看到帮助文档信息
root@ubuntu:/# docker search nginx

# 2.下载镜像 pull
root@ubuntu:/home# docker pull nginx

# 3.运行测试
root@ubuntu:/home# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        latest    412b8cc72e4a   5 days ago      531MB
nginx        latest    605c77e624dd   15 months ago   141MB
mysql        5.7       c20987f18b13   15 months ago   448MB
ubuntu       latest    ba6acccedd29   18 months ago   72.8MB

# -d 后台运行
# --name 给容器命名
# -p 宿主机端口,容器内部端口
root@ubuntu:/home# docker run -d --name nginx01 -p 3344:80 nginx
5a5c704ecd58f98814939217f17a8d6ba3d123894d31ffc3a25acc6dcaa00eb7
root@ubuntu:/home# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                                   NAMES
5a5c704ecd58   nginx     "/docker-entrypoint.…"   12 seconds ago   Up 8 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01

# 测试能不能curl通
root@ubuntu:/home# curl localhost:3344

# 进入容器
root@ubuntu:/home# docker exec -it nginx01 /bin/bash
root@5a5c704ecd58:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@5a5c704ecd58:/# cd /etc/nginx
root@5a5c704ecd58:/etc/nginx# ls
conf.d          mime.types  nginx.conf   uwsgi_params
fastcgi_params  modules     scgi_params

端口暴露的概念

1681308866845

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个映射路径,达到在容器外部修改文件名,容器内部就可以自动修改 ?有!那就是 -v 数据卷!

作业:docker来装一个tomcat

# 官方的使用
docker run -it --rm tomcat:9.0

# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm, 一般用来测试,用完就删除

# 下载再启动
docker pull tomcat

# 启动运行 3355暴露的是本机的端口 8080暴露的是容器的端口
root@ubuntu:~# docker run -d -p 3355:8080 --name tomcat01 tomcat

# 测试访问没有问题


# 进入容器
root@ubuntu:~# docker exec -it tomcat01 /bin/bash

# 发现问题: 1.linux命令少了,2.没有webapps 阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除掉。
#保证最小可运行的环境!

思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径 , webapps,我们在外部放置项目,就自动同步到内部就好了!

作业:部署ps + kibana

# es 暴露的端口很多!
# es 十分的耗内存
# es 的数据一般需要放置到安全目录!挂载
# --net somenetwork 网络配置
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 启动了linux就卡住了 docker stats 查看cpu的状态

# es是十分耗内存的,1.xG 

# 查看docker stats
root@ubuntu:~# docker stats
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O        PIDS
e1fd50702278   elasticsearch   0.13%     1.242GiB / 3.799GiB   32.71%    3.51kB / 0B   1.67MB / 729kB   42

# 测试一下es是否成功了
root@ubuntu:~# curl localhost:9200
{
  "name" : "e1fd50702278",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "s0HvUlN0Q7KjkaOGfXi76A",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

# 赶紧关闭,增加内存的限制

在这里插入图片描述

# 赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

# 查看 docker stats

在这里插入图片描述

root@ubuntu:~# curl localhost:9200
{
  "name" : "01ba5f0b02e2",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "gr41UQpiSjGyCNsmoIB8_w",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

作业:使用 kibana 连接 es ? 思考网络如何才能连接过去!

1681372808623

可视化

  • portainer(先用这个)
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  • Rancher(CI/CD再用)

什么是portainer?

Docker图形化界面管理工具!提供一个后台面板供我们操作 !

docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问测试:http://ip(自己的ip地址):8080/

1681375319131

1681375385398

进入之后的面板

1681375575354

可视化面板我们平时不会使用,大家自己测试玩玩即可!

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值