Docker常见命令

Docker下载及启动

  1. yum更新
    Docker是需要使用yum命令进行安装的
    所以如果yum命令包版本较低需要进行更新
yum update
  1. 下载yum-config-manager及devicemapper驱动依赖(挂载阿里云Docker镜像使用)
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置yum源为阿里云
    阿里云docker镜像Wiki
    如果你想直接在docker官网上下载可以忽略
    当然你可以在docker上自行下载桌面版本
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

也可以使用命令直接下载

yum install -y docker
  1. docker下载
    你可以在docker上自行下载桌面版本
    也可以使用命令直接下载
yum install -y docker
yum install -y docker-ce
  1. 验证
    显示docker版本号
docker -v
  1. 设置国内镜像
    Docker默认采用官方镜像进行数据下载,建议设置国内镜像下载更快捷
    设置指南
    新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
    请在该配置文件中加入(没有该文件的话,请先建一个):
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
  1. 启动
systemctl start docker
  1. 重启
systemctl restart docker
  1. 停止
systemctl stop docker
  1. 设置开机自启动
systemctl enable docker
  1. 查看Docker状态
systemctl status docker
  1. 查看相关概要
docker info
  1. 查询Docker相关命令
docker --help

Docker镜像相关

查看本地拥有的镜像

	docker images

查看网络上的镜像

docker search 镜像关键词

拉取网上镜像

docker pull 镜像名称:版本号

如果镜像是最后版本,即latest版本,则不加“:版本号”

删除镜像

删除指定镜像需要获知其镜像ID,并且此镜像需要没有引用

docker rmi 镜像ID

还可以删除全部镜像

docker rmi `docker images -q`

Docker容器相关

查看容器

查看当前正在运行的容器

docker ps

查看所有容器

docker ps -a

查看最后一次运行的镜像

docker ps -l

按照条件查询

docker ps -f 查询列=列值

eg:

docker ps -f status=exited

容器状态释义

Docker容器状态进程/应用程序状态
Created已创建但未启动
Restarting重新启动中
Running正在运行
Paused暂停执行
Exited已停止运行
Dead无法恢复的错误或崩溃
OOMKilled内存溢出导致终止

这个对比表格旨在将 Docker 容器状态与进程或应用程序状态进行对比,以便更好地理解容器状态与其内部进程或应用程序之间的关系。
请注意,容器状态和进程/应用程序状态之间的对应关系是相对的,可能因具体的应用程序和环境而有所不同。例如,对于某个容器来说,Running 状态可能表示应用程序正在正常运行,而对另一个容器来说,Running 状态可能表示应用程序出现问题,但容器本身仍在运行。
因此,在分析容器和应用程序的状态时,还应考虑容器内部的具体实现和配置,以及应用程序的自身特点和行为。对于准确的状态判断和故障排除,还需要综合考虑日志、监控和其他诊断工具的输出。

容器的创建

交互式创建

docker run -i -t --name=容器名称 镜像名称:标签(版本)交互式的命令

eg:

docker run -i -t --name=MySQL mysql /bin/bash

当命令执行完成之后会进入到容器中,当容器使用之后不再需要使用,可执行一下命令退出容器

exit

守护式创建

守护式创建就是我们常说的后端运行

docker run -i -d --name=镜像名称:标签(版本)交互式的命令

当我们执行完命令之后,容器会在后台进行运行,如果此时我们需要进入到容器之中,可执行以下命令

docker exec -i -t 容器名称(容器ID)交互命令

eg:

docker exec -i -t MySQL /bin/bash

交互命令具体可以使用哪些需要看容器中的环境变量配置了那些命令,如果我们在宿主机时需要直接使用这些命令,有时需要写该命令的全路径才可以生效。

容器的启动与停止

启动

docker start 容器名称(容器ID)

停止

docker stop 容器名称(容器ID)

注意:容器的创建只是保证拥有此容器,启动和停止是指在拥有容器前提之下,执行命令可以变更容器状态

文件拷贝

有时我们会需要将文件在Docker客户端和容器之间相互拷贝
客户端->容器

docker cp 客户端目录 容器名称:容器目录

容器->客户端

docker cp 容器名称:容器目录 客户端目录

目录挂载

有时候我们需要将容器中的目录映射到客户端内,因此,就需要进行容器的挂载,来将容器和客户端之间建立映射。

docker run -i -t -v 客户端目录:容器目录 --name:容器名称 容器镜像 /bin/bash 

这个命令有可能会涉及到Liunx本身的权限问题,需要具备Linux权限方面的知识。

查看容器的IP地址

查看容器IP相对来说是比较常见的操作。
我们可以使用以下命令获取容器中的配置,以此检测容器中的IP

docker inspect 容器名称(容器ID)

当然我们也可以直接查询容器IP

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

删除容器

删除容器前必须先stop容器

docker rm 容器名称(容器ID)

常用实战部署

挑选了部分组件进行实战部署
需要虚拟机镜像的私聊我

MySQL

查询相关的镜像

docker search centos/mysql

下载镜像

docker pull centos/mysql-57-centos7

创建容器

docker run -id --name=mysql_default -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 docker.io/centos/mysql-57-centos7

-p指的是客户端的IP和容器之中的IP之间的映射关系,
-e指的是环境变量的设置
这里必须设置环境变量,否则在启动完成之后,容器启动正常,但是容器中的应用程序(MySQL)会出问题。

mysql_1  | 2021-09-05 02:42:12+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
mysql_1  |     You need to specify one of the following:
mysql_1  |     - MYSQL_ROOT_PASSWORD
mysql_1  |     - MYSQL_ALLOW_EMPTY_PASSWORD
mysql_1  |     - MYSQL_RANDOM_ROOT_PASSWORD

在这里插入图片描述

连接Docker数据库

FQA

  • Q:WARNING: IPv4 forwarding is disabled. Networking will not work.
    我在启动容器时发现IPV4没有打开,这样的话网络通信会出现问题。
    报错详情
WARNING: IPv4 forwarding is disabled. Networking will not work.

此时需要配置宿主机ipv4的开关

echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf

重新启动宿主机

systemctl restart network && systemctl restart docker

之后删除容器重新启动就可以了。

-Q:宿主机与容器之间不通信,导致远程连接数据库时一直在超时
这个问题困扰了我一下我,最开始我将目光集中在网络模式上,由于不同网络模式采用的连接方式不同,因此我先将默认的网络模式(桥接模式)调整为HOST,发现链接正常,之后我定位到应该时桥接模式的问题,了解到桥接模式之间需要通过虚拟网桥的建立后,去查看虚拟网桥

ip a

查询后发现虚拟网桥docker0是出于关闭状态,之后重启发现没用,还是关闭状态,并且网桥信息不变,怀疑是网桥再重启过程中复用了,于是删除网桥

brctl delbr docker0

之后再重启,发现网桥已经启用,连接成功!

期间我还进行了相关的网络通信查询、防火墙的查询以及docker info下网络连接的查询。如果发生问题可以按照这些方面进行排查。
整体的通信路径大概是:外部链接 - docker宿主机网卡-docker0网桥 - 容器链接,我觉得这一部分还是很有意思的,可以深入研究一下,这种方式看似繁琐,但是将平台可移植性发挥的淋漓尽致。但是通过这个我也发现了docker的维护性可能并没有想象的那么好。

其他

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值