青冥 青冥
首页
  • Java 基础
  • Java 进阶
  • Java Java 版本新特性
  • JVM
  • MySQL
  • Tomcat
  • Nginx
  • Spring 系列

    • Spring
    • Spring IOC
    • Spring AOP
    • Spring MVC
  • ORM

    • Mybatis
  • 设计模式

    • 23 种设计模式
  • 操作系统内核
  • JVM 内存模型
  • 并发同步处理
  • Atomic 原子操作
  • 队列(Queue)
  • 线程池(Thread Pool)
  • 分布式 - 消息中间件

    • 消息中间件
  • 分布式 - 存储中间件

    • 存储中间件
  • 分布式 - RPC 框架

    • RPC 框架
  • Spring Boot
  • Spring Cloud Alibaba
  • Spring Cloud Netflix
  • Git
  • Maven
  • Jenkins
  • Linux
  • 容器化

    • Docker
    • Kubernetes
  • 面试合集

    • 缓存
  • 实战项目
  • 数据结构与算法
  • 计算机原理
  • 大数据
  • 人工智能(AI)
  • 前端
  • 留言区
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 关于
  • 友情链接
🍊Gitlab (opens new window)

iByte Horizon

好记性不如烂笔头
首页
  • Java 基础
  • Java 进阶
  • Java Java 版本新特性
  • JVM
  • MySQL
  • Tomcat
  • Nginx
  • Spring 系列

    • Spring
    • Spring IOC
    • Spring AOP
    • Spring MVC
  • ORM

    • Mybatis
  • 设计模式

    • 23 种设计模式
  • 操作系统内核
  • JVM 内存模型
  • 并发同步处理
  • Atomic 原子操作
  • 队列(Queue)
  • 线程池(Thread Pool)
  • 分布式 - 消息中间件

    • 消息中间件
  • 分布式 - 存储中间件

    • 存储中间件
  • 分布式 - RPC 框架

    • RPC 框架
  • Spring Boot
  • Spring Cloud Alibaba
  • Spring Cloud Netflix
  • Git
  • Maven
  • Jenkins
  • Linux
  • 容器化

    • Docker
    • Kubernetes
  • 面试合集

    • 缓存
  • 实战项目
  • 数据结构与算法
  • 计算机原理
  • 大数据
  • 人工智能(AI)
  • 前端
  • 留言区
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 关于
  • 友情链接
🍊Gitlab (opens new window)
  • Git

  • Maven

  • Jenkins

  • Linux

  • 虚拟容器

    • Docker

      • 基础篇 Docker 安装与简介
      • 基础篇 Docker 常用命令
        • 1. 镜像和容器的关系
        • 2. Docker 常用命令
          • 2.1 辅助命令
          • 2.2 Images 镜像命令
          • 2.3 Contrainer 容器命令
          • 2.4 所有命令合集
        • 3. 实操案例
          • 3.1 docker 安装nginx
          • 3.2 docker 安装Tomcat
          • 3.3 docker 部署es + kibana
        • 4. Docker可视化工具-Portainer
          • 4.1 安装Portainer
          • 4.2 登录和使用Portainer
        • 5. Docker可视化工具-Rancher
      • 基础篇 Docker 镜像
      • 基础篇 容器数据卷
      • 基础篇 Dockerfile
      • 高级篇 Docker 网络
      • 高级篇 Docker Compose
      • 辅助篇 Docker 常用服务安装
    • Kubernetes

  • 互联网工具 - 专题
  • 虚拟容器
  • Docker
沉梦昂志
2021-04-08
目录

基础篇 Docker 常用命令

内容概述

  • docker 命令官方参考文档:https://docs.docker.com/engine/reference/commandline/ (opens new window)

  • 1. 镜像和容器的关系
  • 2. Docker 常用命令
    • 2.1 辅助命令
    • 2.2 Images 镜像命令
    • 2.3 Contrainer 容器命令
    • 2.4 所有命令合集
  • 3. 实操案例
    • 3.1 docker 安装nginx
    • 3.2 docker 安装Tomcat
    • 3.3 docker 部署es + kibana
  • 4. Docker可视化工具-Portainer
    • 4.1 安装Portainer
    • 4.2 登录和使用Portainer
  • 5. Docker可视化工具-Rancher

# 1. 镜像和容器的关系

  • 镜像(Image):容器的静态模板,包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。
  • 容器(Container):镜像的一个运行实例,具有自己的文件系统、进程、网络等,且是动态的。容器从镜像启动,并在运行时保持可变。
  • 说明:一定是有了镜像才可以创建容器。 镜像和容器的关系

# 2. Docker 常用命令

# 2.1 辅助命令

Dokcer 安装完成后的辅助命令。

docker version     # 显示版本信息
docker info        # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help  # 万能命令,查看命令参数等
1
2
3

# 2.2 Images 镜像命令

# images

查询镜像信息。

$ docker images
1

选项:

  • -a, --all 列出所有镜像
  • -q, --quiet 只显示镜像的ID
  • -aq 列出所有镜像ID
[root@iByteHorizon ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        13 months ago       13.3 kB

# 解释
REPOSITORY         # 镜像的仓库
TAG                # 镜像的标签
IMAGE ID           # 镜像的ID
CREATED            # 镜像的创建时间
SIZE               # 镜像的大小
1
2
3
4
5
6
7
8
9
10

# search

搜索镜像。

$ docker search [options] 镜像名
1

选项:

  • -f, --filter 后跟条件,筛选镜像
  • --no-trunc 显示完整的镜像信息
[root@iByteHorizon ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relati...   10516     [OK]       
mariadb                           MariaDB is a community-developed fork of M...   3927      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   772       [OK]

# 可选项,过滤参数
--filter=STARS=3000      # 搜索出来的镜像就是STARS大于等于3000

# docker search mysql --filter=STARS=3000
[root@iByteHorizon ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relati...   10516     [OK]       
mariadb   MariaDB is a community-developed fork of M...   3927      [OK]    
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# pull

下载镜像。分层下载:是docker image 的核心,联合文件系统。

$ docker pull 镜像名[:TAG|@DIGEST]
1
[root@iByteHorizon ~]# docker pull mysql
Using default tag: latest            # 如果不写tag,默认就是latest,最新版本
latest: Pulling from library/mysql
a076a628af6f: Pull complete    # 分层下载,docker image 的核心,联合文件系统
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c  # 文件签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    # 真实地址

# 下面两个命令等价
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@iByteHorizon ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
a076a628af6f: Already exists 
f6c208f3f991: Already exists 
88a9455a9165: Already exists 
406c9b8427c6: Already exists 
7c88599c0b25: Already exists 
25b5c6debdaf: Already exists 
43a5816f1617: Already exists 
1831ac1245f4: Pull complete 
37677b8c1f79: Pull complete 
27e4ac3b0f6e: Pull complete 
7227baa8c445: Pull complete 
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# rmi

$ docker rmi 镜像名1|镜像ID1 镜像名2|镜像ID2
1

选项:

  • -f, --force 强制删除

删除全部镜像

$ docker rmi -f $(docker images -aq)
1

# 2.3 Contrainer 容器命令

这里我们下载一个centos 镜像来演示。

$ docker pull centos 
1

# 2.3.1 新建&启动容器

$ docker run [options] 镜像名|者镜像ID
1

选项:

  • --name ="Contrainer Name",别名为容器起一个名字
  • -d 启动守护式容器(在后台启动容器)
  • -P 随机指定端口(大写的P)
  • -p 指定容器的端口,有以下四种方式:
-p ip:主机端口:容器端口
-p  主机端口:容器端口(常用)
-p  容器端口
容器端口
1
2
3
4
# 启动并进入容器
[root@iByteHorizon ~]# docker run -it centos /bin/bash
[root@c37f7c157d64 /]# ls      # 查看容器内的centos,基础版本。很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器中退回主机
[root@c37f7c157d64 /]# exit
exit

# 主机目录信息
[root@iByteHorizon /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
1
2
3
4
5
6
7
8
9
10
11
12

docker run -d 常见坑:

[root@iByteHorizon /]# docker run -d centos
ccbf705a03d2001aa6383b29ee3e3922cdeb15c9e4f3085c8e82d23f0fc7b902 # 运行的容器ID

# 执行docker ps , 发现是空的,意味着centos 停止了?
# 执行docker ps -a ,发现历史执行容器存在。 
# 常见的坑:docker 容器使用后台运行,就必须要一个前台进程(docker run -d -it centos),docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
1
2
3
4
5
6
7

docker run -d容器使用后台运行,就必须要求至少有一个前台进程,docker发现没有应用,就会自动停止。

# 2.3.2 查看运行的容器

$ docker ps [options]
1

选项:

  • 默认,列出当前正在运行的容器
  • -a 列所所有容器,包括正在运行的和历史运行过的容器
  • -q 静默模式,只显示容器编号
  • -n= 显示最近创建的容器个数
[root@iByteHorizon /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@iByteHorizon /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
c37f7c157d64        centos              "/bin/bash"         6 minutes ago       Exited (127) 3 minutes ago                       silly_einstein
5a3c661b39a2        bf756fb1ae65        "/hello"            11 days ago         Exited (0) 11 days ago                           tender_ramanujan

[root@iByteHorizon /]# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
c37f7c157d64        centos              "/bin/bash"         9 minutes ago       Exited (127) 6 minutes ago                       silly_einstein

[root@iByteHorizon /]# docker ps -aq
c37f7c157d64
5a3c661b39a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.3.3 停止|关闭|重启容器

启动容器

$ docker start 容器ID|容器名
1

重启容器

$ docker restart 容器ID|容器名
1

正常停止容器运行

$ docker stop 容器ID|容器名
1

强制立即停止容器运行

$ docker kill 容器ID|容器名
1

# 2.3.4 删除容器

$ dockr rm [options] 容器ID1|容器名1 容器ID2|容器名2
1

选项:

  • -f 强制删除

删除所有容器

# 方式一:
$ docker rm -f $(docker ps -aq)

# 方式二:
$ docker ps -a -q|xargs docker rm
1
2
3
4
5

# 2.3.5 进入容器内部

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

方式一:docker exec 选项:

  • -i 以交互模式运行容器,通常与-t一起使用
  • -t 分配一个伪终端 shell窗口 bash
$ docker exec [options] 容器ID 容器内命令
1

容器内命令,通常是/bin/bash。

# 测试
[root@iByteHorizon /]# docker exec -it b3a2e4ab538a /bin/bash
[root@b3a2e4ab538a /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b3a2e4ab538a /]# ll
bash: ll: command not found
[root@b3a2e4ab538a /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b3a2e4ab538a /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 03:52 ?        00:00:08 /bin/sh -c while true;do echo lili;sleep 1;done
root      8639     0  0 06:17 ?        00:00:00 /bin/bash
root      8663     1  0 06:17 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/slee
root      8664  8639  0 06:17 ?        00:00:00 ps -ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14

方式二:docker attach

$ docker attach 容器ID
1

示例:

[root@iByteHorizon /]#  docker attach b3a2e4ab538a
正在执行当前的代码……
1
2

二者区别:

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

# 2.3.6 退出容器

exit            # 停止容器并退出
ctrl + P + Q    # 不停止容器退出,按键操作
1
2

# 2.3.7 查看容器日志

$ docker logs [OPTIONS] 容器ID|容器名
1

选项:

  • -t 加入时间戳
  • -f 实时日志信息,跟随最新的日志打印
  • --tail 跟数字,显示最后多少条
[root@iByteHorizon /]# docker logs -f -t --tail 10 f495ce1b2121
1

# 2.3.7 查看容器内进程

$ docker top 容器ID|者容器名
1
[root@iByteHorizon /]# docker top b3a2e4ab538a
UID                 PID                 PPID                C                   STIME               TTY       root                2351                2335                0                   11:08               ?         root                2829                2351                0                   11:15               ?                      
1
2

# 2.3.8 查看容器元数据(内部细节)

# 命令
$ docker inspect 容器ID
1
2
[root@iByteHorizon /]# docker inspect b3a2e4ab538a
[
    {
        "Id": "b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012",
        "Created": "2021-02-19T03:08:58.020462438Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo lili;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 2351,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-02-19T03:08:58.165246495Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "ResolvConfPath": "/var/lib/docker/containers/b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012/hostname",
        "HostsPath": "/var/lib/docker/containers/b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012/hosts",
        "LogPath": "/var/lib/docker/containers/b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012/b3a2e4ab538a36074049d84895517a0bae0579c8e3d4fd56dd0000c802efe012-json.log",
        "Name": "/sad_bohr",
        "RestartCount": 0,
        "Driver": "overlay",
        "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,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "",
            "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": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": -1,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Name": "overlay",
            "Data": {
                "LowerDir": "/var/lib/docker/overlay/f3bb80dbf80cb93ac9b51de4ee166bff8b55330c7bbd8df0309f94d8c118f061/root",
                "MergedDir": "/var/lib/docker/overlay/7859fd7741ce0be5ab7711a685dd9a318a228335bd3c4da8df92b102c49a3002/merged",
                "UpperDir": "/var/lib/docker/overlay/7859fd7741ce0be5ab7711a685dd9a318a228335bd3c4da8df92b102c49a3002/upper",
                "WorkDir": "/var/lib/docker/overlay/7859fd7741ce0be5ab7711a685dd9a318a228335bd3c4da8df92b102c49a3002/work"
            }
        },
        "Mounts": [],
        "Config": {
            "Hostname": "b3a2e4ab538a",
            "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 lili;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "92e6f130871c214562843eb5eaf6127fdb01f02d7231898262cf051630f6b1dc",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/92e6f130871c",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "6f4b840458b23d441b197a8ea3f9a50d4b2e6c288021b9c58897905ea4f7f37c",
            "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": "3ebae6082efa1a71f8f632884cfae8eb87005d1acddc542424c5a58381d0073c",
                    "EndpointID": "6f4b840458b23d441b197a8ea3f9a50d4b2e6c288021b9c58897905ea4f7f37c",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02"
                }
            }
        }
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

# 2.3.9 容器和宿主机之间复制文件

  1. 将宿主机复制到容器内部
$ docker cp 文件|目录 容器ID:容器路径          
1
  1. 将容器内资源拷贝到主机上
$ docker cp 容器ID:容器内资源路径 宿主机目录路径  
1

# 查看当前主机目录下
[root@iByteHorizon home]# ll
total 4
-rw-r--r--   1 root     root        0 Feb 19 14:30 lili.java
drwxr-xr-x. 11 postgres postgres 4096 Aug 18  2020 postgres

# 进入docker容器内部
[root@iByteHorizon home]# docker attach 0982bb137d24
[root@0982bb137d24 /]# cd /home
[root@0982bb137d24 home]# ls

# 在容器内新建一个文件
[root@0982bb137d24 home]# touch test.java
[root@0982bb137d24 home]# exit
exit

# 将文件拷贝出来到主机上
[root@iByteHorizon home]# docker cp 0982bb137d24:/home/test.java /home
[root@iByteHorizon home]# ll
total 4
-rw-r--r--   1 root     root        0 Feb 19 14:30 lili.java
drwxr-xr-x. 11 postgres postgres 4096 Aug 18  2020 postgres
-rw-r--r--   1 root     root        0 Feb 19 14:31 test.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

PS:拷贝是一个手动过程,未来使用 -v 卷的技术,可以实现

# 2.3.10 数据卷(volum)实现与宿主机共享目录

$ docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名
1

注意:

  1. 如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
  2. 如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中

# 2.3.11 打包镜像

$ docker save 镜像名 -o 名称.tar
1

# 2.3.12 载入镜像

$ docker load -i 名称.tar
1

# 2.3.13 容器打包成新的镜像

$ docker commit -m "描述信息" -a "作者信息" 容器ID|容器名 打包镜像名称:[tag]
1

# 2.4 所有命令合集

Docker Commands Diagram

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 container filesystem to the host path   # 从容器中拷贝文件或目录到宿主机上
create    create a new container                        # 创建一个新的容器,同 run ,但不启动容器
diff      inspect changes on container's filesystem     # 查看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 image                  # 展示一个镜像的形成历史
images    list images                                   # 列出系统当前镜像
import    create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      display system-wide information               # 显示系统相关信息
inspect   return low-level information on a container   # 查看容器详细信息
kill      kill 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 logs of a container                 # 输出当前容器日志信息
port      lookup the public-facing port which is nat-ed to private_port  # 查看映射端口对应的容器内部源端口
pause     pause all processes within a container        # 暂停容器
ps        list container                                # 列出容器列表
pull      pull 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       remover 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         # 在docker hub 中搜索镜像
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 container                    # 取消暂停容器
version   show the docker version information           # 查看docker 版本号
wait      block until a container stops,then print its exit code  #截取容器停止时退出状态值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 3. 实操案例

# 3.1 docker 安装nginx

# 回忆下上面所学的命令,思考出操作的步骤:
# 1、搜索镜像 search  建议去docker hub 搜索,可以看到官方文档
# 2、下载镜像 pull
# 3、运行测试   
# docker run -d --name nginx01 -p 3344:80 nginx
# curl localhost:port

# 进入容器
[root@iByteHorizon ~]# docker exec -it nginx01 /bin/bash
root@ee6010e85c44:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
1
2
3
4
5
6
7
8
9
10
11

端口暴露的概念 端口暴露示意图

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

# 3.2 docker 安装Tomcat

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

# 下载启动
docker pull tomcat

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
# 测试访问没有问题

[root@iByteHorizon ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
e857ea835fa2c372917f4f9b9de3693edbe25018f0242c53a38a9bf0c6d79b6e
[root@iByteHorizon ~]# docker exec -it tomcat01 /bin/bash
# 发现问题:
# 1、Linux命令少了 
# 2、没有webapps 阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉,以保证最小可运行环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 3.3 docker 部署es + kibana

# es 暴露的端口很多
# es 十分的耗内存
# es 的数据一般需要放置到安全目录 挂载
# --net somenetwork 网络配置

# 启动 elasticsearch
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 是否成功了
[root@iByteHorizon ~]# curl localhost:9200
{
  "name" : "df334c9d81cb",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "g4KTz7ZLRnulHjorSelphg",
  "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"
}

# es 是十分耗内存的   1核2G
# 查看docker stats
[root@iByteHorizon ~]# docker stats
CONTAINER        CPU %     MEM USAGE / LIMIT       MEM %      NET I/O             BLOCK I/O           PIDS
df334c9d81cb     1.59%     1.243 GiB / 1.954 GiB   63.64%     1.66 kB / 2.01 kB   9.44 MB / 1.77 MB   46

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

[root@iByteHorizon ~]# docker stats
CONTAINER      CPU %    MEM USAGE / LIMIT       MEM %    NET I/O               BLOCK I/O           PIDS
ba42158ccf60   1.48%    354.3 MiB / 1.954 GiB   17.71%   1.17 kB / 1.59 kB     15.8 MB / 1.76 MB   45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

思考:使用kibana 连接es?网络如何才能连接过去---Docker 网络有关 Docker 网络示意图

# 4. Docker可视化工具-Portainer

Docker 可视化工具一般有以下两种。

  • Portainer(了解即可)
  • Rancher(CI/CD推荐)

Portainer 可视化面板平时不会使用,一般自己测试玩玩即可,这里简单介绍下用法。

Rancher 一般CI/CD的时候用的多,相对来说要复杂的多,需要有Devops 基础才能用。

# 4.1 安装Portainer

官方安装说明:https://www.portainer.io/installation/ (opens new window)

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

# step 1:下载镜像
$ docker pull  portainer/portainer
# step 2:创建Portainer 数据卷
$ docker volume create portainer_data
# step 3:安装并配置外网端口
$ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --privileged=true portainer/portainer
1
2
3
4
5
6

# 4.2 登录和使用Portainer

用浏览器访问:http://localhost:9000

Portainer 首页

# 5. Docker可视化工具-Rancher

(略)

#docker 命令
最近更新: 2025/03/25, 09:15:48
基础篇 Docker 安装与简介
基础篇 Docker 镜像

← 基础篇 Docker 安装与简介 基础篇 Docker 镜像→

最近更新
01
Kubernetes Helm
04-11
02
Kubernetets Namespace
04-11
03
Kubernetes Ingress
04-11
更多文章>
Theme by Vdoing | Copyright © 2021-2025 光年矩阵科技有限公司 | All Rights Reserved. |
渝ICP备2021888888号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×