【Docker】有用的命令

时间:2024-02-21 17:15:46
(注:该图来自该博客:(https://blog.csdn.net/qq_39311377/article/details/131730887))

在这里插入图片描述

将image文件从仓库下载到本地, pull获取镜像,library对应的文件组

docker pull library/hello-world

获取目标image_name镜像

docker pull image_name

下载centos7镜像,:7指定了对应的centos版本:

docker pull centos:7

下载python3.9镜像

docker pull python:3.9

查看已有镜像,Docker镜像保存在/var/lib/docker目录下

docker images

运行hello-world镜像

docker run hello-world

修改本地镜像名字(小写)

docker tag centos:7 mycentos:1

删除仓库为 docker.o/tomcat, 标签为7.0.77-jre7的镜像

docker rmi docker.io/tomcat:7.0.77-jre7

删除镜像ID为b39c68b7af30的镜像

docker rmi b39c68b7af30

本地镜像的删除

docker rmi centos:7

查看正在运行的容器

docker ps

查看所有容器,无论是否正在运行

docker ps -a

在这里插入图片描述

CONTAINER ID:容器的唯一表示ID。
IMAGE:创建容器时使用的镜像。
COMMAND:容器最后运行的命令。
CREATED:创建容器的时间。
STATUS:容器状态。
PORTS:对外开放的端口。
NAMES:容器名。可以和容器ID一样唯一标识容器,同一台宿主机上不允许有同名容器存在,否则会冲突。

根据已有的镜像创建容器

docker run -it --name=c2 centos:7

启动python3.9

docker run -it --name=python3.9 python:3.9

参数的解释:
-i表示让容器的标准输入保持打开
-t表示为容器重新分配一个伪输入终端
--name表示为创建出来的容器起一个名称,名称为c2
centos 表示根据镜像的名称
注意:这种方式表示前台运行容器,退出终端之后,容器会关闭,退出之前可以在xshell中打开另个一终端来查看目前正在运行的容器
退出终端之后,可以再次查看,看看容器是否关闭
如果需要在后台启动容器,可以加上参数-d
命令如下:

docker run -d --name=c3 centos:7

但是只加-d 不加-it会导致启动成功之后,容器就直接关闭,所以后台启动的时候通常都是使用-itd的方式运行容器

docker run -itd --name=c3 centos:7

例子

docker run -p localhost:3307:3306 --name scrapersql --privileged=true \
  -v /database/mysql:/var/lib/mysql \
  -e "MYSQL_ALLOW_EMPTY_PASSWORD=true" \
  -d mysql:5.7

说明
localhost的3307端口上创建一个MySQL服务,并将其映射到主机的3306端口
--name 设置镜像名字
-v将主机上的 /database/mysql目录挂载到容器内的 /var/lib/mysql目录
退出容器
-e:该选项用于设置环境变量。-e "MYSQL_ALLOW_EMPTY_PASSWORD=true"表示在容器中设置一个环境变量MYSQL_ALLOW_EMPTY_PASSWORD,并将其值设置为true。这个环境变量的作用是允许空的MySQL密码

exit

设置端口号

docker run -itd -p 8081:8080 tomcat

8081指的是宿主机的端口
8080指的是容器里面tocmat的端口号
-p 表示端口号参数
从客户机*问容器,需要有端口映射,docker容器默认采用桥接模式与宿主机通信,需要将宿主机的ip端口映射到容器的ip端口上;
桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络。简而言之,这就好像在局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个 IP 地址,并且可以和其他终端进行相互访问。

查看容器的详细信息

docker inspect container_id/container_name

查看容器的日志信息

docker logs container_id/container_name

如果提示FileNotFoundException 则有可能是 容器目录下的conf文件夹没有权限 可以使用 chmod -R递归设置权限

从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径

docker cp /root/123.txt mycentos:/home/
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql

docker run -id \
-p 3366:3306 \
--name=c_mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/logs:/logs \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7

参数说明:

-p 3366:3306**:将容器的 3306 端口映射到宿主机的 3307 端口。
-v etc/conf:/etc/mysql/conf.d**:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
-v etc/logs:/logs**:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
-v etc/data:/var/lib/mysql** :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
-e MYSQL_ROOT_PASSWORD=root:**初始化 root 用户的密码。

启动容器

docker start  container_name/container_id

停止容器

docker stop container_name/container_id

重启容器

docker restart container_name/container_id

启动容器后,进入到容器内部

docker attach container_name/containere_id

删除容器

docker rm container_name/container_id

查看当前系统docker信息

docker info

获取最新的centos镜像

docker pull centos:latest

查看镜像信息

sudo docker images

查看docker信息

docker info
docker exec -it xxxxx bash

docker exec -it xxxxx bash,这是用于在运行的 Docker 容器中打开一个交互式终端(bash shell)的命令。

  • docker exec:这是 Docker 命令行工具中用于在运行的容器中执行命令的命令。
  • -it:这是两个选项的结合,-i 代表 interactive(交互式),-t 代表 tty(终端)。这两个选项一起使用,允许你在容器中运行一个交互式命令行会话。
  • xxxx:这是你要在其内部运行命令的 Docker 容器的 ID 或名称。你需要用你实际的容器 ID 或名称替换 xxxx
  • bash:这是你要在容器中运行的命令。在这个例子中,我们正在请求 Docker 在容器中启动一个 bash shell。因此,整个命令的意思是:“在运行的容器 xxxx 中启动一个交互式的 bash shell。”
mysql
create database `scraping` default character set utf8mb4;
create database `projectdb` default character set utf8mb4;
create database `taskdb` default character set utf8mb4;
create database `resultdb` default character set utf8mb4;
quit

通过上述命令进入mysql

docker build -t scraper:latest . # 注意后面的点. 

命令 docker build -t scraper:latest .用于在Docker环境中构建一个新的镜像,并将其标记为 scraper:latest。如果你要运行的程序在Dockerfile中已经定义好了,那么这条命令会从Dockerfile开始构建,然后创建一个包含你程序的新镜像。

如果在运行这个命令时遇到了问题,以下是一些可能的原因:

  1. Dockerfile不存在或者不在当前目录。你需要确保你在包含Dockerfile的目录下运行这个命令,或者使用 -f 参数来指定Dockerfile的位置。
  2. Docker环境没有正确安装或者配置。你可以通过 docker --version 来检查Docker是否正确安装并运行。
  3. 网络问题。在某些情况下,网络问题可能会阻止Docker从Internet下载需要的文件。如果可能的话,尝试更换网络环境或者使用VPN。
  4. Dockerfile有错误或者不完整。你需要检查你的Dockerfile以确保其正确性。

四、创建镜像

使用命令行创建镜像

docker commit 命令用于根据 Docker容器 的更改创建一个新的 Dokcer镜像。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。

docker commit 容器id 镜像名称:版本号

docker save 用来将一个或多个image打包保存。如:将本地镜像库中的image1和image2打包到images.tar中

docker save -o 压缩文件名称 镜像名称:版本号
docker save -o images.tag image1:v1 image2:v1

docker load用于将打包的tar中包含的镜像load到本地镜像库,但不能重命名其中的镜像名。

docker load –i 压缩文件名称
docker load -i images.tar

使用dockerfile创建镜像

dockerfile

FROM centos:7 							#定义父镜像
MAINTAINER  yjf 						#定义作者信息
RUN yum install -y vim					# 执行安装vim命令
WORKDIR /opt 							# 定义默认的工作目录
CMD /bin/bash							# 定义容器启动执行的命令

通过dockerfile构建镜像

docker build -f  my_dockerfile -t xxx:7

五、docker报错

ERROR【docker】报错:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/
需要使用root权限

ERROR docker pull mysql 报missing signature key错误
如果安装docker用的是yum install docker命令的话,下载下来的docker版本未旧版本,所有数字签名有问题
https://blog.csdn.net/Single_for_life/article/details/133653113

su root

https://www.php.cn/faq/506200.html
https://www.modb.pro/db/586199
https://www.bilibili.com/read/cv22443043/

https://blog.csdn.net/m0_73409141/article/details/131425285
https://worktile.com/kb/ask/30572.html
https://blog.csdn.net/swadian2008/article/details/109518783
https://blog.csdn.net/qq_47614329/article/details/130387532
https://blog.csdn.net/weixin_41384860/article/details/128819642
https://blog.51cto.com/u_16099211/6314870