Docker 常用命令

时间:2022-07-22
本文章向大家介绍Docker 常用命令,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、常用命令

基本命令

docker version
docker info
docker --help

官方文档:https://docs.docker.com/reference/

镜像命令

查看镜像:

// 查看所有的镜像
docker images

// 可选参数
Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs
[root@wsuo ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB
  • REPOSITORY:镜像的仓库源;
  • TAG:镜像的标签;
  • IMAGE ID:镜像的 ID;
  • CREATED:镜像的创建时间;
  • SIZE:镜像的大小。

比较常用的是显示全部镜像但是只显示 ID:

[root@wsuo ~]# docker images -aq
bf756fb1ae65

搜索镜像:

docker search

可选参数:
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
搜索大于 3000 star 的镜像:
docker search mysql --filter=stars=3000

拉取镜像:

docker pull
下载 mysql:
docker pull mysql

后面可以加上版本信息,如果不写版本则默认是最新版。

docker pull mysql:5.7 	# 下载5.7版本的mysql

下载一个 centOS 镜像来测试:

[root@wsuo ~]# docker pull centos
Using default tag: latest 															# 默认标签
latest: Pulling from library/centos													# 仓库位置
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700 	# 镜像的 ID 号
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

删除镜像:

docker rmi

# 指定 ID:
docker rmi -f ID值

# 删除所有镜像
docker rmi -f $(docker images -aq)

容器命令

有了镜像才可以创建容器:

docker pull centos

创建容器并启动:

docker run [可选参数] image

--name: 		容器名字 tomcat1, tomcat2 用来区分容器

-d				后台方式运行

-it				使用交互方式运行,进入容器查看内容

-p				指定端口 -p 8080
	-p: 主机端口:容器端口		映射
	-p:	容器端口
	
-P				随机指定端口

执行:

[root@wsuo ~]# docker run -it centos /bin/bash
[root@e25d08956b4a /]# 

这其实就是一个套娃,我们目前使用的是容器,但是它不太完善。

从容器中退出到主机:

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

列出所有运行中的容器:

docker ps			# 列出正在运行的容器
docker ps -a  		# 列出历史运行的容器
docker ps -a -n=2	# 显示最近运行的俩个容器
docker ps -q		# 显示编号
[root@wsuo ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@wsuo ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
e25d08956b4a        centos              "/bin/bash"         2 minutes ago       Exited (0) 29 seconds ago                       inspiring_khayyam
291fe9863e6a        hello-world         "/hello"            45 hours ago        Exited (0) 45 hours ago                         peaceful_fermi

删除容器:

docker rm 容器ID				# 删除指定的容器,不能删除正在运行的容器
docker rm $(docker ps -aq)	# 删除所有的容器

启动和停止容器的操作:

dokcer start	容器 ID   	# 启动容器
docker restart	 容器 ID		# 重启容器
docker stop		容器 ID		# 停止容器

其他命令

后台启动容器

docker run -d 镜像名

查看日志命令

docker logs -tf --tail 10 容器ID   		# f 是 format 带上时间戳, 10 是显示10条日志信息

查看容器中的进程信息

docker top 容器ID

进入当前正在运行的容器

进入正在运行的容器,并开启一个新的终端:

docker exec -it 容器 ID bashshell

进入正在运行的命令行,而不是开启一个新的终端:

docker attach 容器 ID bashshell

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

docker cp 容器ID:/home/demo.java /home 

二、练习

1、部署 Nginx

首先在 https://hub.docker.com/ 搜索 nginx。

然后 docker pull nginx

docker run -d --name nginx01 -p 3344:80 nginx

# p 表示端口映射,即访问主机的 3344 端口相当于访问 nginx 的 80 端口。
# d 表示后台启动
# name 给容器命名

测试:

curl localhost:3344

返回结果:

# 进入容器修改配置文件
docker exec -it nginx01 /bin/bash

whereis nginx

cd /etc/nginx;ls

就可以修改 nginx.conf 文件了.

2、部署 Tomcat

下载镜像:

docker pull tomcat:9.0

后台启动并映射端口:

docker run -d -p 2000:8080 --name tomcat01 tomcat:9.0

访问之后:

这说明 Tomcat 是不完整的,没有默认访问路径。

因为我们拉取的默认是最小的镜像,将没有必要的都剔除了。

3、部署 ES+Kibana

  • ES 十分的耗内存;
  • ES 暴露的端口比较多;
  • ES 的数据需要挂载到安全目录。
docker run -d --name elasticsearch -p 2001:9200 -p 2002:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

这里没有先 pull,因为如果本地没有该镜像,他会自动去下载并运行。

直接访问 2001 端口: