实验1:使用命令操作Docker容器与镜像
【实验内容】
本实验已经安装好docker环境,后续对镜像以及容器进行了一些操作,包括服务启动类命令、常用的镜像与容器命令。
【实验目的】
1、熟悉帮助启动类命令的使用,启动docker服务
2、熟练掌握镜像命令的使用,知道如何查找镜像、拉取镜像以及镜像的使用与删除
3、掌握容器的创建与启动
4、了解容器与镜像的管理
5、了解容器运行原理
6、熟悉容器的启停与导入导出
【实验步骤】
步骤1 查看docker服务是否启动
步骤2 帮助启动类命令
步骤3 镜像命令
步骤4 容器命令
步骤1 查看docker服务是否启动
若出现上图示信息表示服务未启动,使用systemctl start docker命令启动服务。
若出现上图示信息表示服务正常启动。
步骤2 帮助启动类命令
Ø 启动docker: systemctl docker start
Ø 停止docker: systemctl docker stop
Ø 重启docker: systemctl docker restart
Ø 查看docker状态: systemctl docker status
Ø 查看docker概要信息: docker info
Ø 查看docker总体帮助文档: docker --help
Ø 查看docker命令帮助文档: docker 具体命令 –help
步骤3 镜像命令
(1) docker images
列出本地主机上的镜像
各个选项说明如下:
l REPOSITORY:表示镜像的仓库源
l TAG:镜像的标签版本号
l IMAGE ID:镜像ID
l CREATED:镜像创建时间
l SIZE:镜像大小
同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如:你只使用 centos,docker 将默认使用 centos:latest 镜像。
l 语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
l OPTIONS说明:
Ø -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
Ø --digests :显示镜像的摘要信息;
Ø -f :显示满足条件的镜像;
Ø --format :指定返回值的模板文件;
Ø --no-trunc :显示完整的镜像信息;
Ø -q :只显示镜像ID。
(2) docker search
从Docker Hub查找镜像。
l 语法:
docker search [OPTIONS] TERM
l OPTIONS说明:
Ø --automated :只列出 automated build类型的镜像;
Ø --no-trunc :显示完整的镜像描述;
Ø -f <过滤条件>:列出收藏数不小于指定值的镜像。
l 案例:
从 Docker Hub 查找所有镜像名包含 java,并且收藏数大于 10 的镜像。
docker search -f stars=10 java
l 参数说明:
Ø NAME: 镜像仓库源的名称
Ø DESCRIPTION: 镜像的描述
Ø OFFICIAL: 是否docker官方发布
Ø stars: 类似Github里面的star,表示点赞、喜欢的意思。
Ø AUTOMATED: 自动构建。
(3) docker pull
从镜像仓库中拉取或者更新指定镜像。
l 语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
l OPTIONS说明:
Ø -a :拉取所有 tagged 镜像
Ø --disable-content-trust :忽略镜像的校验,默认开启
l 案例:
从Docker Hub下载java最新版镜像。
docker pull java
从Docker Hub下载REPOSITORY为java的所有镜像。
docker pull -a java
(4) docker system df
查看镜像/容器/数据卷所占的空间。
(5) docker rmi
删除本地一个或多个镜像。
l 语法:
docker rmi [OPTIONS] IMAGE [IMAGE.]
l OPTIONS说明:
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
Ø 删除单个
docker rmi -f 镜像ID
Ø 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
Ø 删除全部
docker rmi -f $(docker images -qa)
步骤4 容器命令
有镜像才能创建容器, 这是根本前提。
docker run :创建一个新的容器并运行一个命令
l 语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG.]
l OPTIONS说明:
Ø -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
Ø -d: 后台运行容器,并返回容器ID,也即启动守护式容器(后台运行);
Ø -i: 以交互模式运行容器,通常与 -t 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
Ø -P: 随机端口映射,容器内部端口随机映射到主机的端口
Ø -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
Ø -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
Ø --name="nginx-lb": 为容器指定一个名称;
Ø --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
Ø --dns-search : 指定容器DNS搜索域名,默认和宿主一致;
Ø -h "mars": 指定容器的hostname;
Ø -e username="ritchie": 设置环境变量;
Ø --env-file=[]: 从指定文件读入环境变量;
Ø --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
Ø -m :设置容器使用内存最大值;
Ø --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
Ø --link=[]: 添加链接到另一个容器;
Ø --expose=[]: 开放一个端口或一组端口;
Ø --volume , -v: 绑定一个卷。
(1) 启动交互式容器(前台命令行)
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
l 参数说明:
Ø -i: 交互式操作。
Ø -t: 终端。
Ø centos : centos 镜像。
Ø /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入exit。
l 案例:
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
(2) 列出当前所有正在运行的容器
docker ps [OPTIONS]
l OPTIONS说明:
Ø -a :显示所有的容器,包括未运行的。
Ø -f :根据条件过滤显示的内容。
Ø --format :指定返回值的模板文件。
Ø -l :显示最近创建的容器。
Ø -n :列出最近创建的n个容器。
Ø --no-trunc :不截断输出。
Ø -q :静默模式,只显示容器编号。
Ø -s :显示总的文件大小。
列出所有在运行的容器信息。
docker ps
输出详情介绍:
Ø CONTAINER ID: 容器 ID。
Ø IMAGE: 使用的镜像。
Ø COMMAND: 启动容器时运行的命令。
Ø CREATED: 容器的创建时间。
Ø STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
Ø PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
Ø NAMES: 自动分配的容器名称。
(3) 退出容器
两种退出方式:
exit:run进去容器,exit退出,容器停止。
ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
(4) 启动已停止运行的容器
docker start 容器ID或者容器名
(5) 重启容器
docker restart 容器ID或者容器名
(6) 停止容器
docker stop 容器ID或者容器名
(7) 强制停止容器
docker kill 容器ID或容器名
(8) 删除已停止的容器
Ø docker rm 容器ID
Ø 一次性删除多个容器实例
Ø docker rm -f $(docker ps -a -q)
Ø docker ps -a -q | xargs docker rm
(9) 启动守护式容器(后台服务器)
在大部分的场景下,我们希望docker的服务是在后台运行的, 我们可以通过-d指定容器的后台运行模式。
docker run -d 容器名
使用镜像centos:latest以后台模式启动一个容器。
docker run -d centos
docker ps -a 进行查看, 会发现容器已经退出。
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start,但是这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,别中断。
(10) 进入正在运行的容器并以命令行交互
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG.]
OPTIONS说明:
Ø -d :分离模式: 在后台运行
Ø -i :即使没有附加也保持STDIN 打开
Ø -t