Docker Command

Docker 安装

Docker下载

[root@docker ~]# yum install docker-ce docker-ce-cli containerd.io --allowerasing

docker-ce: Docker 的社区版。
docker-ce-cli: Docker 的命令行工具。
containerd.io: Docker 的容器运行时。
–allowerasing 选项允许 yum 删除当前安装的任何与 Docker 冲突的软件包,以便顺利安装这些组件。这个选项有助于解决依赖冲突问题

启动Docker

开启docker : systemctl start docker
查看docker状态 :systemctl status docker
停止:systemctl stop docker
重启: systemctl restart docker
docker开机自启: systemctl enable docker

[root@docker ~]# systemctl start docker #启动docker
[root@docker ~]# systemctl status docker #查看docker 运行状态
[root@docker ~]# systemctl enable docker #设置docker自启

image-20241009191141952

image-20241009191449661

查看安装的docker版本(启动docker后才能使用docker命令)

[root@docker ~]# docker -v

image-20241009191608652

Docker 常用命令

搜索镜像:docker search 镜像名

[root@docker ~]# docker search centos

[!WARNING]

image-20241009193119776

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。设置镜像:

第一步:

vim /etc/docker/daemon.json

第二步:

{ “registry-mirrors”:[ “https://cr.console.aliyun.com”,“https://docker.m.daocloud.io”,“https://public.ecr.aws”,“https://dockerhub.timeweb.cloud”]
}
第三步(重启docker服务):

systemctl restart docker

  • 查询方式一【命令行】:docker search register.liberx.info/镜像名
[root@docker ~]# docker search register.liberx.info/centos

image-20241009224337171

  • 查询方式二【浏览器搜索】:

    https://register.liberx.info

    image-20241009224932837

拉取镜像:docker pull 镜像名:版本号

[root@docker ~]# docker pull centos

image-20241009200628999

列出当前机器上的Docker镜像:docker images

[root@docker ~]# docker images

image-20241009200719624

列名描述
REPOSITORY镜像所属的仓库名称
TAG与镜像相关联的标签。标签用于区分同一仓库中不同版本的镜像
IMAGE ID镜像的唯一标识符,通常表示为长十六进制字符串。此 ID 用于在其他 Docker 命令中引用该镜像。
CREATED镜像创建的日期和时间。这有助于识别镜像的年龄。
SIZE镜像在磁盘上的大小。这表示该镜像占用多少存储空间。

查看镜像/容器/数据卷所占系统空间:docker system df

image-20241009201228033

  • TYPE:对象的类型。可以是镜像(Images)、容器(Containers)、本地数据卷(Local Volumes)或构建缓存(Build Cache)。
  • TOTAL:该类型对象的总数。
  • ACTIVE:当前正在使用的对象数量。对于容器而言,这表示正在运行的容器数量。对于镜像,它可能表示被容器引用的镜像数量。
  • SIZE:该类型对象占用的总磁盘空间。这是所有对象占用的磁盘空间总和,包括活动和非活动的对象。
  • RECLAIMABLE:可回收的磁盘空间大小。这表示可以通过删除未使用或不再需要的对象来释放的磁盘空间。对于镜像,这可能包括未被任何容器引用的镜像;对于容器,这可能包括已停止且未被任何进程引用的容器。

删除镜像:docker rmi 镜像ID/镜像名

image-20241009202601726

[!WARNING]

删除所有镜像: docker rmi -f $(docker images -qa)

创建容器并启动新容器:docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

常用OPTIONS:

  • -d, --detach:在后台运行容器,并打印容器ID。这是运行长时间运行的服务时常用的选项。
  • -i, --interactive:保持容器的标准输入(STDIN)开放。
  • -t, --tty:分配一个伪终端(pseudo-TTY)。通常与 -i 一起使用,以交互模式运行容器。
  • --name:为容器指定一个名称。如果不指定,Docker 会自动生成一个名称。
1.以交互模式运行 Ubuntu 容器

image-20241009204158819

2.以交互模式运行并创建名为 “myubuntu” 的容器

image-20241009204718443

3.在后台运行Redis容器

image-20241009205739864

交互模式的两种退出方式

e64b02c6e13d5be50ed4a23383142a99

image-20241009210332305

exit - 输入exit后容器退出并停止运行

image-20241009210447754

ctrl+p+q(同时按住) - 容器退出,并在后台运行

image-20241009210711097

Docker容器command

命令说明
docker start [容器ID或名称]启动一个或多个已经停止的Docker容器
docker stop [容器ID或名称]停止一个或多个正在运行的Docker容器。容器会收到SIGTERM信号,允许它优雅地关闭
docker restart [容器ID或名称]重启一个或多个Docker容器。这实际上是先执行docker stop再执行docker start
docker rm [容器ID或名称]删除一个或多个已经停止的Docker容器。正在运行的容器无法被删除
docker kill [容器ID或名称]强制停止一个或多个正在运行的Docker容器。容器会收到SIGKILL信号,立即终止
启动容器:docker start 容器名/ID
[root@docker ~]# docker start myubuntu

image-20241009214521476

启动容器:docker stop 容器名/ID
[root@docker ~]# docker stop myubuntu

image-20241009214847974

删除容器:docker rm 容器名/ID
[root@docker ~]# docker rm fervent_wilbur 

image-20241009215130636

杀掉容器(强制停止):docker kill 容器名/ID
[root@docker ~]# docker kill friendly_moser 

image-20241009215605277

显示所有当前活动的(即正在运行的)容器的信息:docker ps

docker ps 命令的常用选项和它们的功能:

  • -a--all:显示所有容器(包括停止运行的容器)。
  • -q--quiet:仅显示容器ID。
  • --no-trunc:不截断输出信息,显示完整的容器ID、命令等信息。
  • -l:显示最近创建的1个容器。
  • -n:显示最近创建的n个容器。例如,docker ps -n 5 将显示最近的5个容器。
显示正在运行的容器信息
[root@docker ~]# docker ps  # 显示正在运行的容器信息

image-20241009211730277

显示所有容器信息
[root@docker ~]# docker ps -a  # 显示正在运行的容器信息

image-20241009212039787

仅显示所有容器的CONTAINER ID
[root@docker ~]# docker ps -qa  # 显示所有容器的ID

image-20241009212313019

显示最新创建的1个容器
[root@docker ~]# docker ps -l  # 显示最新创建的1个容器

image-20241009212523745

显示最新创建的n个容器
[root@docker ~]# docker ps -n 3  # 显示最新创建的3个容器

image-20241009213143760

查看完整的容器ID
[root@docker ~]# docker ps --no-trunc  # 查看当前运行的完整容器ID信息

image-20241009213340481

查看容器运行日志docker logs 容器名/ID

[root@docker ~]# docker logs myubuntu

image-20241009220029259

查看容器进程 docker top 容器名/ID

[root@docker ~]# docker top myubuntu

image-20241009220346063

  • UID: 用户ID,表示运行该进程的用户。
  • PID: 进程ID,是容器内部为该进程分配的唯一标识符。
  • PPID: 父进程ID,表示创建该进程的父进程的ID。
  • C: CPU使用率,通常以百分比表示,但在这个上下文中它可能表示进程的CPU优先级或调度类
  • STIME: 进程启动时间,表示进程开始运行的时间。
  • TTY: 终端类型,表示进程关联的终端。
  • TIME: CPU时间,表示进程自启动以来使用的CPU总时间。
  • CMD: 命令,表示启动进程的命令行。

查看容器详细信息:docker inspect 容器名/ID

[root@docker ~]# docker inspect myubuntu 

image-20241009223039616

  • Id:容器的唯一标识符(UUID)。
  • Created:容器的创建时间。
  • Path:容器启动时执行的命令。
  • Args:传递给命令的参数。
  • State:容器的状态,包括是否正在运行、退出码、开始和结束时间等。
  • Image:容器使用的镜像的详细信息。
  • NetworkSettings:容器的网络配置,包括 IP 地址、端口映射等。
  • Mounts:容器内的挂载点,包括卷、绑定挂载和临时文件系统挂载。
  • Config:容器的配置信息,如环境变量、工作目录、入口点等。
  • HostConfig:主机的配置信息,如资源限制、端口绑定、日志选项等。

进入容器attach/exec

image-20241009221901058

docker attach 容器名/ID
[root@docker ~]# docker attach myubuntu

image-20241009222151839

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
[root@docker ~]# docker exec -it myubuntu /bin/bash

image-20241009222753968

复制容器内的文件到本地主机docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

  • CONTAINER 是目标容器的名称或 ID。
  • SRC_PATH 是源路径,可以是宿主机上的文件或目录,也可以是容器内的文件或目录。
  • DEST_PATH 是目标路径,与 SRC_PATH 相对,表示文件或目录应该被复制到的位置。
[root@docker ~]# docker cp myubuntu:/a.txt /

image-20241009174920654

使用 docker exportdocker import 命令来备份和恢复容器。

image-20241014100353205

备份容器

要备份一个正在运行的容器,您可以使用 docker export 命令。此命令会将容器的文件系统导出为一个 tar 归档文件。

docker export <container_id> -o <backup_file>.tar
  • <container_id>: 您要备份的容器的 ID 或名称。
  • <backup_file>.tar: 您想要保存备份的文件名。
恢复容器

要从 tar 归档文件导入一个新的容器,您可以使用 docker import 命令。

cat <backup_file>.tar | docker import - <new_image_name>
  • <backup_file>.tar: 您之前保存的备份文件名。
  • <new_image_name>: 您想为新镜像指定的名称。

image-20241014082413022

image-20241014082715279

image-20241014082749897

image-20241014083211121

image-20241014083511454

如何在Docker容器安装工具

apt-get update 是一个常用的命令,用于更新 Debian 和 Ubuntu 系统中的包管理器的本地索引。

作用:更新本地软件包索引

当你运行 apt-get update 时,系统会从配置的源(例如 /etc/apt/sources.list 文件中列出的软件仓库)下载最新的软件包索引。这并不会安装或升级任何软件,只是刷新本地缓存,以确保系统知道最新的可用软件包及其版本信息。

在这里插入图片描述

apt-get install vimapt-get install net-tools

vim:

  • 基本功能vim 是一种文本编辑器,旨在创建和编辑文本文件。它是 vi 编辑器的增强版,提供了更多的功能和改进。

net-tools:

  • 基本功能net-tools 是一个网络管理工具包,包含了一系列命令行工具,用于网络配置和管理。

image-20241014093613238

image-20241014093640005

image-20241014093537047

image-20241014093435994

docker commit 命令用于将容器的当前状态保存为一个新的镜像。

image-20241016234039269

可以用来在容器中进行更改后,将这些更改持久化。基本用法如下:

docker commit [OPTIONS] <container_id> <new_image_name>
  • <container_id>: 要提交的容器 ID 或名称。
  • <new_image_name>: 为新镜像指定的名称(可以包含标签)。

选项示例

  • -m:添加提交消息。

  • -a:指定作者信息。

    docker commit -m="with vim" -a="tzj" myubuntu my_ubuntu:1.0
    

image-20241017192547200

image-20241017192917286

配置阿里云公有镜像库

https://cr.console.aliyun.com/cn-hangzhou/instances

image-20241014090559538

image-20241014091155160

image-20241014091626388

image-20241014091812903

配置本地私有镜像库

1.第一步 : 拉取registry

Docker Registry 的作用是集中管理和存储 Docker 镜像,便于开发者和运维人员分享和分发应用程序。它支持版本控制和镜像管理,确保在不同环境中一致性和可复现性。

image-20241014092648300

image-20241014092734008

2.第二步:搭建Docker 容器
docker run -d -p 5000:5000 --name=registry registry

docker run: 运行一个 Docker 容器。

-d: 以分离模式运行容器(即后台运行)。

-p 5000:5000: 将主机的 5000 端口映射到容器内的 5000 端口,允许你通过主机的 5000 端口访问容器中的注册表。

--name=registry: 给容器指定名称为 “registry”。

registry: 指定使用官方的 registry 镜像,运行一个 Docker 镜像仓库服务。

image-20241014095041899

image-20241014095109059

curl -XGET http://192.168.10.150:5000/v2/_catalog

image-20241014101416332

curl 命令用于获取 Docker 私有仓库中的镜像列表。具体解释如下:

  • curl: 用于向指定的 URL 发出 HTTP 请求的工具。
  • -XGET: 指定使用 HTTP GET 方法来获取信息。
  • http://192.168.10.150:5000/v2/_catalog: 这是请求的 URL,访问的是一个运行在 192.168.10.150 的 Docker 私有仓库。/v2/_catalog 是 Docker Registry API 的一个端点,用于返回该仓库中所有可用镜像的目录。

执行该命令后,服务器将返回仓库中的 Docker 镜像列表。

由于Docker同服库做了安全加固,默认不支持http推送,需要取消这个限制

vim /etc/docker/daemon.json

image-20241014101839244

3.重启docker生效配置

image-20241014102327329

image-20241014103540185

image-20241014103619014

image-20241014103652316

容器数据卷的方式实现数据的持久化

假设你想以特权模式运行一个容器,并将宿主机上的某个目录挂载到容器内的某个目录,语法如下:

docker run -it --privileged=true -v /path/on/host:/path/in/container image_name

示例解释:

  • -v /path/on/host:/path/in/container: 将宿主机上的 /path/on/host 目录挂载到容器内的 /path/in/container 目录。这使得宿主机目录和容器内目录保持同步。
  • image_name: 这是你要运行的 Docker 镜像的名称,如 ubuntucentos 等。

示例:

image-20241014105159087

image-20241014105244828

image-20241014110004754

image-20241014110036712

image-20241014110103359

image-20241014110123196

显示了 Docker 容器中有关挂载点的配置信息
[root@docker host_data]# docker inspect 8224a5066b17

image-20241014110615785

Type: "bind" 表示这是一个绑定挂载,将宿主机的某个目录直接挂载到容器内的某个目录。

Source: /tmp/host_data 表示宿主机上的目录路径,这个目录将被挂载到容器中。

Destination: /tmp/container_data 表示容器内的挂载点路径,宿主机的 /tmp/host_data 目录内容将映射到容器中的 /tmp/container_data

RW: true 表示这个挂载

容器实例内部被限制,只能读取不能写

docker run -it --privileged=true -v /path/on/host:/path/in/container:ro image_name

ro 表示目录以只读模式挂载。

功能:容器内的应用程序可以读取该目录中的文件,但无法对其进行任何修改或写入。

作用:常用于保护主机系统的数据,确保容器不会意外或故意更改主机上的文件。

image-20241014111531135

image-20241014111610254

image-20241014111808586

容器卷之间的继承

  • 语法如下:
docker run -it --privileged=true --volumes-from parent_container_name --name new_container_name image_name

--privileged=true: 给予容器提升的权限,允许其访问宿主机的设备和一些特权操作。

--volumes-from parent_container_name: 从名为 parent_container_name 的父容器中继承卷。这意味着新的容器将能够访问父容器中挂载的所有卷。

--name new_container_name: 为新容器指定一个名称。

image_name: 要使用的 Docker 镜像的名称。

image-20241014112453924

image-20241014112520428

image-20241014112638348

image-20241014112657043

  • 此时myu1,myu3已经和物理机(宿主机)建立起映射

[!NOTE]

docker run -P -p 区别、作用

docker run -P

  • 作用:自动将容器中暴露的所有端口映射到主机上的随机端口。

  • 用法:使用 -P 时,Docker 会为每个暴露的端口选择一个随机的主机端口。可以使用 docker ps 查看容器的映射情况。

docker run -p

  • 作用:手动指定容器的特定端口和主机端口之间的映射。

  • 用法:格式为 -p host_port:container_port,允许用户控制容器端口如何映射到主机端口。

  • 示例

    docker run -p 8080:80 image_name
    

    这将把容器的 80 端口映射到主机的 8080 端口。

Tomcat 安装

image-20241017083921830

image-20241017084029239

image-20241017084341054

image-20241017084543174

新版访问会有问题

Tomcat 在安装后,如果登录端口出现 404 错误,通常是因为以下原因:

  1. webapps 目录问题:Tomcat 默认会在 webapps 目录下查找应用。如果这个目录不存在或未正确设置,Tomcat 无法找到默认的应用。
  2. webapps.distwebapps.dist 是 Tomcat 的默认应用示例,如果你将其重命名为 webapps,Tomcat 就会把它当作应用目录来处理。这样可以确保 Tomcat 启动时能找到必要的资源。
  3. 未部署应用:如果 webapps 目录为空,Tomcat 可能没有任何应用可用,导致访问时返回 404 错误。确保在 webapps 目录中有至少一个有效的 web 应用(如 ROOT 或其他 WAR 文件)。
  4. 配置问题:检查 server.xml 和其他配置文件,确保端口和上下文路径配置正确。

解决方法一般是确保 webapps 目录存在且有相应的应用文件,或者调整配置文件以指向正确的应用路径。

image-20241017084740550

image-20241017084822048

Exercise - 安装MySQL

step1:拉取指定版本镜像
docker pull mysql:5.7

image-20241017090010314

image-20241017090052414

step2:运行容器设置密码

[root@docker ~]# docker run -itd --name=TZJ_MySQL -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

image-20241017091020894

image-20241017091106274

使用本地Navicat工具连接Docker容器的mysql

image-20241017091212921

image-20241017092336714

发现不识别中文,查看字符集

image-20241017214510809

character_set_database character_set_server 被设为 latin1,这是导致中文乱码的原因。

解决方案

my.cnf 下修改字符集配置的目的是为了确保 MySQL 的默认字符集和排序规则一致地支持 UTF-8 或 UTF-8MB4

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

删除原有容器

image-20241017103349174

image-20241017214256297

image-20241017214955832

重启容器,加载配置信息

image-20241017215814121

image-20241017220208942

是导致中文乱码的原因。

解决方案

my.cnf 下修改字符集配置的目的是为了确保 MySQL 的默认字符集和排序规则一致地支持 UTF-8 或 UTF-8MB4

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

删除原有容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重启容器,加载配置信息
在这里插入图片描述
在这里插入图片描述

完美散花,期待之后的Docker高阶操作

结语:
很高兴看到你在技术路上的不断进步!愿你在每一次的操作中都能发掘出新的乐趣。Docker 的世界广阔无垠,每一个小小的命令都隐藏着无限的可能。技术的深度如同大海,愿我们在这片海洋中,一起前行,互相指正,彼此学习。期待我们未来能共同解锁更多的技术奥秘,写下更多精彩的篇章。
愿代码如诗,未来如歌,继续加油,期待你更多精彩的分享! 🌿

​ – A杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值