Docker镜像和容器的相关命令
镜像相关命令
镜像:Docker 镜像是由文件系统叠加而成(是一种文件的存储形式);是 docker 中的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从 docker 仓库中下载基础镜像到本地。
比如开发人员可以从 docker 仓库拉取一个只包含 centos7 系统的基础镜像,然后在这个镜像中安装 jdk、mysql、Tomcat 和自己开发的应用,最后将这些环境打成一个新的镜像。开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像就可以了,这样就可以保证开发人员的环境和测试人员的环境完全一致。
1、查看镜像
1 | docker images |
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像 ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在 Docker 的
/var/lib/docker
目录下
2、搜索镜像
从网络中查找需要的镜像:
1 | docker search 镜像名称 |
例如 下载一个 nginx
镜像
1 | docker search nginx |
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由 Docker Hub 自动构建流程创建的
3、拉取镜像
拉取镜像就是从 Docker 仓库下载镜像到本地,镜像名称格式为 名称:版本号
,如果版本号不指定则下载最新的版本 Using default tag: latest
1 | docker pull 镜像名称 |
1 | docker pull nginx |
4、删除镜像
按镜像 ID,即IMAGE ID
删除镜像
1 | docker rmi 镜像ID |
删除所有镜像
1 | docker rmi `docker images -q` |
容器相关命令
容器,也是 docker 中的核心概念,镜像是创建容器的软件 , 容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同 Java 语言中类和对象的关系。
1、查看容器
1 | docker ps |
查看所有容器
1 | docker ps -a |
查看最后一次运行的容器
1 | docker ps -l |
查看停止的容器
1 | docker ps -f status=exited |
2、创建与启动容器
创建容器命令:
1 | docker run |
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在 run 后面加上-d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
① 交互式方式创建容器
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用 exit 命令退出容器。
需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器是前台容器。
格式:docker run -it –name=
容器名称
镜像名称
:标签
/bin/bash
1 | docker run -it --name=mycentos centos:7 /bin/bash |
docker run:表示创建容器
-it:表示运行容器并进入它的命令行
–name=mycentos:给当前的容器命名
centos:7:使用该镜像创建
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
新建立连接查看正在运行的容器
退出当前容器
1 | exit |
② 创建后台容器
1 | docker run -id --name=mycentos2 centos:7 |
③ 守护式方式创建容器:
创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器,可以理解为在后台运行的容器
1 | docker run -di --name=mycentos3 centos:7 |
进入守护式容器方式:
docker exec -it 容器名称 (或者容器 ID) /bin/bash
1 | docker exec -it mycentos3 /bin/bash |
3、停止与启动容器
停止容器:
docker stop 容器名称(或者容器 ID)
1 | docker stop mycentos2 |
启动容器:
docker start 容器名称(或者容器 ID)
1 | docker start mycentos2 |
4、文件拷贝
我们需要在容器内安装一个软件,我们就需要把安装包拷贝到容器内。
将文件从宿主机拷贝到容器内的某个目录
docker cp 需要拷贝的文件目录 容器名称:容器目录
1 | docker cp anaconda-ks.cfg mycentos:/usr/local/ |
将文件从容器内拷贝出来
docker cp 容器名称:需要拷贝的文件目录 虚拟机目录
1 | docker cp mycentos:/usr/local/anaconda-ks.cfg ./ |
5、目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器命令 -v
宿主机目录
:容器目录
创建并启动容器mycentos3
,并挂载 linux 中的/usr/local/myhtml
目录到容器的/usr/local/myhtml
1 | docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7 |
接下来在 linux 中的/usr/local/myhtml
操作相当于对容器中/usr/local/myhtml
目录操作。比如在 Linux 中对应目录创建并编辑一个文件,在容器内对应位置可以查看到创建的内容。
添加参数
–privileged=true
可以解决 CentOS7 中挂载的目录没有权限的问题
6、 查看容器运行的各种数据
查看容器运行的各种数据
docker inspect 容器名称(容器 ID)
1 | docker inspect mycentos |
有针对性的查看某个信息,比如查看某个容器 ip 地址
1 | docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID) |
1 | docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos |
7、删除容器
删除指定的容器
docker rm 容器名称(容器 ID)
1 | docker rm mycentos3 |
对于正在运行的容器,删除容器的时候必须先停止容器,否则会报错
1 | # 查看正在运行的容器 |