- A+
所属分类:linux技术
二、Docker相关命令
2.1、Docker 服务相关命令
systemctl命令是系统服务管理器指令
2.1.1、启动docker服务
- 命令
systemctl start docker
2.1.2、停止docker服务
- 命令
systemctl stop docker
2.1.3、重启docker服务
- 命令
systemctl restart docker
2.1.4、查看docker服务状态
- 命令
systemctl status docker
2.1.5、设置开机启动docker服务
- 命令
systemctl enable docker
- 同样的,也可以设置开机不启动docker服务
systemctl disable docker
2.1.6、查看docker概要信息
- 命令
docker info
2.1.7、查看docker帮助文档
- 命令
docker --help
2.2、Docker 镜像相关命令
2.2.0、镜像介绍
- Docker镜像是由文件系统叠加而成(是一种文件的存储形式),是docker中的核心概念,可以认为镜像就是对某些软件运行的环境以及软件安装包。tomcat镜像文件=tomcat的运行环境+tomcat的软件安装包
- 用户可以从docker仓库中下载基础镜像到本地,比如开发人员可以从docker仓库下载一个只包含centos7系统的基础镜像,把基础镜像运行成为一个容器(容器相当于操作系统),然后在这个容器中安装jdk、mysql、Tomcat、部署war包,最后将容器打成一个新的镜像
- 开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像成一个容器就可以了,这样就可以保证开发环境和测试环境完全一致
2.2.1、查看镜像
-
命令
-
docker images
-
PS:这些镜像是我提前拉取的;新安装的docker应该是一个空列表,只有表头
-
-
参数说明
- REPOSITORY: 镜像名称
- TAG: 镜像标签 ,镜像版本号 (默认是可以省略的,也就是latest)
- IMAGE ID: 镜像ID
- CREATED: 镜像的创建日期(不是获取该镜像的日期)
- SIZE: 镜像大小
-
注意事项
- tag版本号如果是latest为最新版,安装的时候不需要带版本号,如果不是latest这种的版本,安装的时候必须带上版本号
2.2.2、搜索镜像
- 如果需要从网络中查找需要的镜像,可以通过如下命令搜索
docker search 镜像名称
- NAME: 镜像名称
- DESCRIPTION: 镜像描述
- STARS: 用户评价,反应一个镜像的受欢迎程度
- OFFICIAL: 是否官方
- AUTOMATED: 自动构建,表示该镜像由Docker Hub自动构建流程创建的
- 当然也可以去官网直接搜索,然后按照它的命令直接复制拉取
2.2.3、拉取镜像
- 拉取镜像就是从Docker仓库下载镜像到本地,镜像名称格式为
名称:版本号
,如果版本号不指定则是最新的版本,命令如下docker pull 镜像名称[:版本号]
- 这里以拉取centos7为例
docker pull centos:7
- 拉取centos最新版本
docker pull centos:latest
- 这里就不演示了,按照命令拉取即可
2.2.4、删除镜像
-
按照镜像id删除镜像,或者镜像名称:版本号
docker rmi 镜像ID | 镜像的名称:版本号
-
删除所有镜像(谨慎操作)
-
docker rmi `docker images -q`
-
-
这里也不演示了
2.3、Docker 容器相关命令
2.3.1、查看容器
- 查看正在运行的容器
docker ps
- 查看所有容器
docker ps -a
- 查看最后一次运行的容器
docker ps -l
- 因为现在还没创建容器,所有这里不会有显示
2.3.2、创建与运行容器
-
基于已有的镜像来创建容器,创建与运行使用如下命令
docker run
-
参数说明
-
参数 意义 -i
表示运行容器 -t
表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端/bin/bash --name
为创建的容器命名(名称必须唯一) -v
表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上 -d
在run后面加上-d参数, 则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,并指定终端,创建后就会自动进去容器) -p
表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-
创建交互式容器
- 以交互式方式创建并运行容器,启动完成后,会直接进入当前容器。使用exit命令退出容器。以此种方式创建并启动容器,如果退出容器,则容器会变成停止状态
- ①、先拉取一个镜像;这一步不是每次启动容器都要做的,如果没有该镜像再拉取
docker pull centos:7
- ②、创建并启动名称为 mycentos 的交互式容器
docker run -it --name=mycentos centos:7 /bin/bash
-it
:创建容器并进入容器指定命令行--name
:指定容器名称(唯一)centos:7
:指定镜像文件(可以是镜像名称或者镜像ID)/bin/bash
:进入容器命令行的指令
- ①、先拉取一个镜像;这一步不是每次启动容器都要做的,如果没有该镜像再拉取
创建式守护式容器
- 对于一个需要长期运行的容器来说,退出之后也不会关闭容器,我们可以创建一个守护式容器,命令如下(容器名称不能重复),创建守护容器并不会马上进入到容器里面
- ①、创建并启动守护式容器
docker run -di --name=mycentos2 centos:7
- ②、进入容器(exit退出的时候,容器不会停止)
docker exex -it mycentos2 /bin/bash
- ①、创建并启动守护式容器
- PS:守护式容器是一直运行的,退出只是退出终端,它还是在后台运行
2.3.3、停止或启动容器
- 停止正在运行的容器
docker stop 容器名称 | 容器ID
- 启动已运行过的容器
docker start 容器名称 | 容器ID
2.3.4、重启容器
- 重启正在运行的容器
docker restart 容器名称 | 容器ID
2.3.5、查看容器信息(包括ip)
- 查看容器信息的原因
- 我们可以通过以下命令查看容器运行的各种数据
- 在Linux宿主机下查看 mycentos2 的ip
docker inspect 容器名称 | 容器ID
docker inspect mycentos2
容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的服务器是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理
2.3.6、删除容器
删除一个容器的前提是容器必须是关闭状态
-
删除指定的容器
docker rm 容器名称 | 容器ID
docker rm mycentos2
-
删除所有容器
-
docker rm `docker ps -a -q`
-
2.4、Docker 容器文件拷贝
2.4.1、向内拷贝
-
将Linux宿主机中的文件拷贝到容器内可以使用命令
-
docker cp 需要拷贝的文件或目录 容器名称:容器目录
-
具体操作如下所示
-
# 1、创建一个文件cpTest.txt touch cpTest.txt # 2、复制该该文件到 mycentos 容器的 / 目录下 # 格式:docker cp 源文件 容器名称:路径 docker cp cpTest.txt mycentos2:/ # 3、进入 mycentos 容器 docker exec -it mycentos /bin/bash # 4、查看容器 ~ 目录下的文件是否存在cpTest.txt ls -l
-
2.4.2、向外拷贝
-
将文件从容器内拷贝出来到Linu宿主机可以使用如下命令
-
# docker cp 容器名称:容器目录 需要拷贝的文件或目录 # 1、进入容器后创建文件cpTest2.txt # 2、退出容器 # 3、在Linux宿主机执行复制,将容器 mycentos 的/cpTest2.txt文件复制到宿主机的/root目录下 # 格式:docker cp 容器名称:文件路径 linux系统的路径 docker cp mycentos:/cpTest2.txt /root
-
PS:停止状态的容器也是可以进行文件拷贝的,向内向外都可以
2.5、Docker 容器目录挂载
-
可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器
-
创建容器时添加-v参数,后边为宿主机目录:容器目录,例如
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7
- PS:如果要进行目录挂载必须要在创建容器的时候完成目录挂载,已经存在的容器不能挂载
-
执行如下命令
-
# 创建linux宿主机器要挂载的目录 (不创建也可以,虚拟机会自动创建) mkdir /root/test # 创建并启动容器mycentos2 # 并挂载 linux中的/roor/test目录到容器的/usr/local/test # 也就是在 linux中的/root/test中操作相当于对容器相应目录操作 docker run -di -v /root/test:/usr/local/test --name=mycentos2 centos:7 # 在linux宿主机下创建文件 touch /root/test.java # 进入容器 docker exec -it mycentos2 /bin/bash ls /usr/local/test
-
PS:: 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题