Docker 常用命令

本文介绍了Docker的基本概念,如镜像、容器和仓库,详细讲解了Docker的安装过程以及如何使用Docker命令进行镜像的查看、搜索、拉取和删除,容器的创建、启动、停止、进入和删除,还包括其他如查看日志、容器进程和文件拷贝等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 常用命令

在这里插入图片描述

一、背景知识

1、Docker 概念

Docker 是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。Docker容器是完全使用沙箱机制,相互隔离,性能开销也极低。

Docker 其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。

Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响。

Docker的两句口号:

  • 「Build, Ship and Run (搭建,发送,运行)」
  • 「Build once,Run anywhere (搭建一次,运行到任何地方)」

2、Docker 镜像

Docker 镜像,就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。

Docker 镜像可以从两个地方获取:

  • 从Docker Hub下载 maven-> 中央仓库
  • 通过 Docker file 自己创建出来

3、Docker 容器

Docker 容器类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

Docker 容器是镜像运行之后的实体,镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。

4、Docker 仓库

Docker 仓库(Repository)类似于代码仓库,是 Docker 集中存放镜像文件的场所。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 Docker Pool 等,可以提供稳定的国内访问。

二、Docker 的安装

#关闭防火墙
systemctl stop firewalld
#关闭selinux安全系统(可选择不关)
vim /etc/selinux/config
SELINUX=disabled
#安装docker引擎
yum install -y docker
#启动docker
systemctl start docker
#设置docker自启动
systemctl enable docker
#测试docker是否安装成功
docker run hello-world

三、Docker 常用命令

1、镜像命令

1.1 查看镜像 docker images

1)命令:docker images

2)作用:列出本地主机上已有的镜像

3)语法:docker images

[root@localhost /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              feb5d9fea6a5        15 months ago       13.3 kB

4)字段名称含义:

列名含义
REPOSITORY来自于哪个仓库,比如 ubuntu 仓库
TAG镜像的标签信息,即版本,latest则代表最新版本
IMAGE ID镜像的ID(唯一),镜像的ID信息十分重要,它唯一标识了镜像
CREATED创建时间
SIZE镜像大小
1.2 搜索镜像 docker search

1)命令:docker search

2)作用:搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像

3)语法:docker serach 镜像名称

#列名分别代表:仓库、名称、镜像描述、用户评价、是否官方发布、自动构建
[root@localhost /]# docker search tomcat
INDEX       NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/tomcat                 Apache Tomcat is an open source implementa...   3464      [OK]       
docker.io   docker.io/tomee                  Apache TomEE is an all-Apache Java EE cert...   100       [OK]       
docker.io   docker.io/bitnami/tomcat         Bitnami Tomcat Docker Image                     47                   [OK]
.......
1.3 拉取镜像 docker pull

1)命令:docker pull

2)作用:从Docker仓库下载镜像到本地,镜像名称格式为[名称:版本号],如果版本号不指定则是最新的版本

3)语法:docker pull 镜像名称[:版本号]

[root@localhost /]# docker pull centos:7
Trying to pull repository docker.io/library/centos ... 
7: Pulling from docker.io/library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for docker.io/centos:7
[root@localhost /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              feb5d9fea6a5        15 months ago       13.3 kB
docker.io/centos        7                   eeb6ee3f44bd        15 months ago       204 MB
1.4 删除镜像 docker rmi

1)命令:docker rmi

2)作用:按镜像ID删除镜像

3)语法:docker rmi 镜像ID

#镜像ID可以只写前两位
[root@localhost /]# docker rmi ee
Untagged: docker.io/centos:7
Untagged: docker.io/centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
[root@localhost /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              feb5d9fea6a5        15 months ago       13.3 kB

2、容器命令

2.1 查看容器 docker ps

1)命令:docker ps

2)作用:查看正在运行的容器

3)语法:docker ps [参数]

4)参数:

  • -a:查看所有容器(查看正在运行的和已经停止运行的)
  • -q:返回容器id号

注意:docker 命令的参数都是在 docker 后面的单词的后面,原因是 docker 命令都需要加一个 docker 前缀,例如:docker ps -a

只查看停止的容器:docker ps -f status=exited

[root@localhost /]# docker ps -a
CONTAINER ID    IMAGE            COMMAND          CREATED          STATUS                   PORTS               NAMES
21d8310e2f51    hello-world      "/hello"         6 hours ago      Exited (0) 6 hours ago                       happy_colden

5)字段名称含义:

列名含义
CONTAINER ID容器ID
IMAGE镜像名称:镜像标签
COMMAND命令
CREATED创建时间
STATUS运行状态及运行的时间
PORTS占用的端口情况
NAMES容器名称
2.2 创建容器 docker create

1)命令:docker create

2)作用:创建容器

3)语法:docker create -it 镜像名字

使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。

2.3 创建并启动容器 docker run

1)命令:docker run

2)作用:创建并启动容器,等价于先执行 docker create 命令,再执行 docker start 命令

3)语法:docker run 参数 镜像名称:镜像标签 /bin/bash

4)参数:

  • -i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动
  • -t:表示容器启动后会进入其命令行。加入 it 这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果只加 it 两个参数,创建后就会自动进去容器)
  • -d:创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)
  • –name:为创建的容器命名
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射,例如:可以将 Docker 中 Tomcat 容器的 8080 端口映射到宿主机上的某一个端口 8080,那么以后访问tomcat只需要:http://宿主机的IP:8080/
  • 进入容器之后,初始化执行的命令:/bin/bash;可写可不写
#创建一个交互式容器
[root@localhost /]# docker run -it tomcat /bin/bash
root@27ebdbc481a6:/usr/local/tomcat# ll
total 200
......
drwxr-xr-x. 2 root root  4096 Dec  9 20:41 webapps/
drwxr-xr-x. 7 root root  4096 Dec  5 16:30 webapps.dist/
drwxrwxrwx. 2 root root  4096 Dec  5 16:30 work/
root@27ebdbc481a6:/usr/local/tomcat# 
#创建一个守护式容器
[root@localhost /]# docker run -di --name=my_tomcat tomcat /bin/bash
f1b6a4019e720316b8712a8867bbe306ec4fe81975f0370846f87b7b64b57879
[root@localhost /]# docker ps
CONTAINER ID        IMAGE             COMMAND           CREATED             STATUS              PORTS               NAMES
f1b6a4019e72        tomcat            "/bin/bash"       6 seconds ago       Up 5 seconds        8080/tcp            my_tomcat
2.4 启动容器 docker start

1)命令:docker start

2)作用:启动容器

3)语法:docker start 容器ID(或容器名称)

[root@localhost /]# docker start my_tomcat
my_tomcat
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND           CREATED           STATUS              PORTS               NAMES
f1b6a4019e72        tomcat              "/bin/bash"       2 hours ago       Up 4 seconds        8080/tcp            my_tomcat
2.5 停止容器 docker stop

1)命令:docker stop

2)作用:终止容器

3)语法:docker stop 容器ID(或容器名称)

[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND          CREATED             STATUS              PORTS               NAMES
f1b6a4019e72        tomcat              "/bin/bash"      2 hours ago         Up 2 hours          8080/tcp            my_tomcat
[root@localhost /]# docker stop my_tomcat
my_tomcat
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2.6 进入容器 docker exec

1)命令:docker exec

2)作用:登录/进入容器

3)语法:docker exec -it 容器ID(或容器名称) /bin/bash

[root@localhost /]# docker exec -it my_tomcat /bin/bash
root@f1b6a4019e72:/usr/local/tomcat# cd webapps/
root@f1b6a4019e72:/usr/local/tomcat/webapps# ll
total 12
drwxr-xr-x. 2 root root 4096 Dec  9 20:41 ./
drwxr-xr-x. 1 root root 4096 Dec  9 20:41 ../
root@f1b6a4019e72:/usr/local/tomcat/webapps# 
2.7 查看容器IP docker inspect

1)命令:docker create

2)作用:创建容器

3)语法:docker inspect -it 容器ID(或容器名称)

[root@localhost /]# docker inspect my_tomcat
......
"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "85f6bcd434fbf62f1c2e9c4b9aa4215e7e6829e60fa39b8163be10ad65d25393",
                    "EndpointID": "5444ae2d6343c9fbaef7ca8f7667c172b490fde2a30f7803515b6361b21dbd69",
                    "Gateway": "172.17.0.1",     #网关
                    "IPAddress": "172.17.0.2",   #IP地址
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02"   #MAC地址
                }
            }

也可以用以下命令直接输出 IP 地址:

docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ 容器ID(或容器名称)

2.8 删除容器 docker rm

1)命令:docker rm

2)作用:删除容器

3)语法:docker rm 容器ID(或容器名称)

4)参数:

  • -f:–force=false强行终止并删除一个运行中的容器
  • -l:–link=false删除容器的连接,但保留容器
  • -V:–volumes=false删除容器挂载的数据卷
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED          STATUS            PORTS               NAMES
f1b6a4019e72        tomcat              "/bin/bash"         2 hours ago      Up 18 minutes     8080/tcp            my_tomcat
#直接删除报错,需要先停止容器,再删除
[root@localhost /]# docker rm my_tomcat
Error response from daemon: You cannot remove a running container f1b6a4019e720316b8712a8867bbe306ec4fe81975f0370846f87b7b64b57879. Stop the container before attempting removal or use -f
[root@localhost /]# docker rm -f my_tomcat
my_tomcat
[root@localhost /]# docker ps -a
CONTAINER ID      IMAGE             COMMAND           CREATED           STATUS                  PORTS         NAMES
e93829a4f7c5      tomcat            "/bin/sh"         2 hours ago       Exited (0) 2 hours ago                epic_sinoussi
21d8310e2f51      hello-world       "/hello"          3 days ago        Exited (0) 3 days ago                 happy_colden

3、其他命令

3.1 查看日志 docker logs

1)命令:docker logs

2)作用:查看日志

3)语法:docker logs 容器ID(或容器名称)

3.2 查看容器中进程 docker top

1)命令:docker top

2)作用:查看容器中进程

3)语法:docker top 容器ID(或容器名称)

3.3 文件拷贝 docker cp

1)命令:docker cp

2)作用:文件拷贝

3)语法:

将宿主机的文件拷贝到容器内:docker cp 需要拷贝的文件或目录 容器名称:容器内目录

将文件从容器内拷贝出来:docker cp 容器名称:容器内路径 目录路径

#新建一个空文件
touch hello.html
#拷贝到tomcat容器的webapps目录下
docker cp tomcat.html my_tomcat:/usr/local/tomcat/webapps
#切换到tomcat容器中查看
docker exec -it my_tomcat /bin/bash


#将copy到tomcat容器的文件再copy出来
docker cp my_tomcat:/usr/local/tomcat/webapps/hello.html ./

四、实战部署

1、Java 环境部署

1)查看 JDK 镜像:可在docker.hub上面查,也可使用docker search

docker search openjdk

2)拉取 JDK 镜像

docker pull openjdk:8

3)创建 JDK 镜像

docker run -di openjdk:8

4)进入容器验证

docker exec -it 容器ID /bin/bash
java -version

2、MySQL部署

1)搜索 mysql 镜像

docker search mysql

2)拉取 mysql 镜像

docker pull mysql:5.7

3)创建容器

docker run -di --name=mysql -p 3600:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

4)进入容器验证

docker exec -it mysql /bin/bash
mysql -uroot -p123456

5)可以使用 MySQL 可视化工具 Navicat 或者 SQLyog 登录,注意,端口号为映射的宿主机端口号,即3600

3、Tomcat部署

1)搜索 tomcat 镜像

docker search tomcat

2)拉取 tomcat 镜像

docker pull tomcat:8.5

3)创建容器

docker run -di --name my_tomcat -p 9000:8080 tomcat:8.5 /bin/bash

4)进入容器

docker exec -it my_tomcat /bin/bash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真真的是小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值