DOCKER 五月 25, 2023

docker常用命令

文章字数 11k 阅读约需 10 mins. 阅读次数 0

docker 常用命令

基本命令

镜像查询与下载

docker search {镜像名称}

eg:
root@空痕影的matebook:~# docker search elasticsearch
NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
elasticsearch                                      Elasticsearch is a powerful open source sear…   5622      [OK]
kibana                                             Kibana gives shape to any kind of data — str…   2402      [OK]
bitnami/elasticsearch                              Bitnami Docker Image for Elasticsearch          52                   [OK]
bitnami/elasticsearch-exporter                     Bitnami Elasticsearch Exporter Docker Image     4                    [OK]

参数说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

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

AUTOMATED: 自动构建。

官方镜像查看版本

# 1. 可以通过访问镜像官网查看版本信息
https://hub.docker.com/_/elasticsearch?tab=tags
# 2. 通过脚本查看
创建脚本:
docker-show-tags.sh
内容:
#!/bin/sh
#
# Simple script that will display docker repository tags.
#
# Usage:
#   $ docker-show-tags.sh ubuntu centos
for Repo in $* ; do
  curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/" | \
    sed -e 's/,/,\n/g' -e 's/\[/\[\n/g' | \
    grep '"name"' | \
    awk -F\" '{print $4;}' | \
    sort -fu | \
    sed -e "s/^/${Repo}:/"
done

查询:
./docker-show-tags.sh elasticsearch kibana

结果:
elasticsearch:7.17.1
elasticsearch:7.17.2
elasticsearch:7.17.3
elasticsearch:8.0.0
elasticsearch:8.0.1
elasticsearch:8.1.0
elasticsearch:8.1.1
elasticsearch:8.1.2
elasticsearch:8.1.3
elasticsearch:8.2.0
kibana:7.17.1
kibana:7.17.2
kibana:7.17.3
kibana:8.0.0
kibana:8.0.1
kibana:8.1.0
kibana:8.1.1
kibana:8.1.2
kibana:8.1.3
kibana:8.2.0

镜像下载

docker pull {镜像名称}:{镜像版本tag}

#eg:
docker pull elasticsearch:8.2.0

# 结果:
root@空痕影的matebook:~# docker pull elasticsearch:8.2.0
8.2.0: Pulling from library/elasticsearch
e0b25ef51634: Pull complete
860caabdf263: Pull complete
9fbe6bc43ac5: Pull complete
9d4f6737f430: Downloading [================>                                  ]  180.7MB/536.1MB
10f01841fd3e: Download complete
dae1e3bba098: Download complete
0a3767e40ef9: Download complete
7d786dfd085d: Download complete
7ce904f28ed3: Download complete

部署镜像

docker run [option] image [command] [arg ...]

# OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
# 更多参数可以通过docker run --help 查看

#eg:
# 使用docker镜像id为3f43f72cb283,以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name myzookeeper1 -d 3f43f72cb283
# 结果:
root@空痕影的matebook:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                              NAMES
72cd29028594   3f43f72cb283   "/bin/sh -c '/usr/sb…"   2 minutes ago   Up 2 minutes   22/tcp, 2181/tcp, 2888/tcp, 3888/tcp                                                               myzookeeper1


# 使用docker镜像id为3f43f72cb283,以后台模式启动一个容器,并将容器的端口映射到主机随机端口。
docker run -P -d 3f43f72cb283
# 结果:
root@空痕影的matebook:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                              NAMES
d378045a412d   3f43f72cb283   "/bin/sh -c '/usr/sb…"   5 seconds ago   Up 3 seconds   0.0.0.0:49156->22/tcp, 0.0.0.0:49155->2181/tcp, 0.0.0.0:49154->2888/tcp, 0.0.0.0:49153->3888/tcp   affectionate_poitras

# 使用docker镜像id为3f43f72cb283,以后台模式启动一个容器,将容器的2181端口映射到主机的2181端口,并设置环境变量内存使用情况,并将容器的tmp目录挂在到主机的/data/applogs目录下, 并将网络设置到kafkaSingle中.
docker run -p 2181:2181 -d --name zookeeper -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" -v /tmp:/data/applogs  --network  kafkaSingle  3f43f72cb283

查看容器运行

# 查看运行中的容器
docker ps
# 查看所有创建的容器,包括未运行的容器
docker ps -a
# 查看所有的镜像
docker images 

停用与删除容器/镜像

# 停止容器
docker stop {容器id}
# 删除容器
docker rm {容器id}
# 删除镜像
docker rmi {镜像id}

# 进阶 停止所有运行中的容器
docker stop $(docker ps -q)
# 进阶 删除所有容器
docker rm $(docker ps -aq)
# 进阶组合 停止并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)

# 进阶 删除所有镜像
docker rmi $(docker images -q) -f

创建容器并在特定网络下执行

create netwrok create elk

docker run -p 9200:9200 -p 9300:9300 -d --name elasticsearch -e "discovery.type=single-node" --network elk -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 121454ddad72

docker run -p 5601:5601 -d --name kibana  --network elk   -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"  df0a0da46dd1

网络环境

# 查看网络环境
docker network ls
# 创建网络环境
docker network create {网络名}
# 删除网络环境
docker netwrok rm {网络名称/网络id}

# 将容器连接到网络
docker network connect [OPTIONS] NETWORK CONTAINER
# eg: docker network connect elk es

# 将容器从网络中移除
docker network disconnect [OPTIONS] NETWORK CONTAINER

# 查看网络详情
docker network inspect NETWORK

# 注:只会显示当前启动着的容器
eg: docker network inspect elk
root@空痕影的matebook:/mnt/c/Users/60512# docker network inspect elk
[
    {
        "Name": "elk",
        "Id": "b3027e542d18b7e53ee658a16a064c16f6bf1087a8101e5f4cee97e8810ff9ef",
        "Created": "2022-05-22T06:50:27.395267062Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": { 
            "1d29e930904f51d70b1154eea2dafc59b3299005288ce4e47d7de06cbf2f97c1": {
                "Name": "kibana",
                "EndpointID": "0a88301e73efdda02836476f24f337696b1b115393acbbdaf463ca43798fc695",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "61ef5be570d0a25a829bf3c6e4e5bfbcf27c6a3810a37fee4b639519d0b7bfac": {
                "Name": "es",
                "EndpointID": "c2a8441d8b2a5ae58bcf25e75086526bfddfdc1cbce6801d3335d1205cad0ce6",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

docker inspect 查看详细信息

# 查看容器详情
docker inspect {容器名称}
# 查看镜像详情 
docker image inspect {镜像名称}
# 查看网络详情, 可以查看网络中存在的容器
docker network inspect {网络名称}

docker exec 在运行的容器中执行命令

docker exec {容器名称} {命令}

# eg:
# 最常用的是打开终端
docker exec -it {容器名称} bash
# 查看指定目录下的文件
docker exec {容器名称} ls /root
# 查看容器内的网络情况
docker exec {容器名称} ip a s

docker attach 进入容器

# 进入一个可执行容器,否则会进入黑洞
docker attach {容器名称}

# 退出时.可使用ctrl+p+q 来保持容器的运行.

docker top 容器中进程信息

docker top {容器名称}

eg: docker top redis

UID PID PPID C STIME TTY TIME CMD
999 1804 1784 0 18:20 ? 00:00:00 redis-server *:6379

输出说明
UID 容器中运行的命令用户ID
PID 容器中运行的命令PID
PPID 容器中运行的命令父PID,由于PPID是一个容器,此可指为容器在Docker Host中进程ID
C 占用CPU百分比
STIME 启动时间
TTY 运行所在的终端
TIME 运行时间
CMD 执行的命令

补充命令

docker exec -it {容器名称或ID} /bin/bash

复制文件进入容器

docker container cp FILE_PATH 容器ID:FILE_PATH2

docker container cp ~/es/ 611ec73460e5:/usr/share/elasticsearch

0%