镜像相关命令

镜像: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
2
3
4
5
6
docker pull nginx
docker pull tomcat:7-jre7
docker pull centos/mysql-57-centos7
docker pull redis
docker pull registry
docker pull centos:7

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
2
3
4
5
6
7
8
# 查看正在运行的容器
docker ps

# 停止容器
docker stop mycentos3

# 删除正在运行的容器
docker rm mycentos3