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