容器管理实验

一. 实验目的:

  1. 熟悉容器的基本工作原理;
  2. 掌握容器操作的常用命令;

二. 实验环境:

Ubuntu16.04+Docker

三. 实验内容:

  1. 练习使用容器操作的常用命令;

四、 实验练习:

(一)创建容器

创建容器命令格式:

Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

问题:

  1. 如何以ubuntu:14.04作为基础镜像,创建一个容器test1?

2.请使用docker ps -l命令查看,test1的状态?

(二)启动容器

有两种情况:

1.原来没有这个容器,需要基于一个镜像启动新的容器;

      命令:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

2.宿主机本来有一个容器,但是容器处于一个非运行的状态,需要把这个非运行状态的容器启动起来。

      命令:docker start container_ID

实际上docker run命令相当于docker create+start两个命令

问题:

(1)如何以ubuntu:14.04作为基础镜像,启动一个容器test2?

请使用docker ps -l命令查看,test2的状态?

(2)如何以ubuntu:14.04作为基础镜像,启动一个容器test3, 并安装新的程序nginx?

  1. 可以使用编写dockerfile文件,然后进行构建,再然后进行启动
  2. 直接以Ubuntu:14.04为基础镜像创建并启动一个名为test3的容器,再进行安装nginx(apt-get update ,apt-get install nginx)

(3)如何以ubuntu:14.04作为基础镜像,以交互方式启动容器test4?

进入容器中,在/root目录下新建一个文件1.txt,后点击ctrl+p+q来退出但是不结束交互式容器。然后使用docker ps -l命令来查看test4的状态?

(4)如何以ubuntu:14.04作为基础镜像,启动守护式容器test5,让其在后台一直输出hello docker?如何查看容器的日志,看看hello docker 是否正常输出?

输入命令docker run -d -p 120 --name test5 ubuntu:14.04 /bin/sh -c "while true;do echo hello docker;done"再使用docker logs test5查看

直接清屏了

注意:

这里使用了while true那么之后使用后会发生一些问题,下一节有问题解决方式,详解。

这里简略说一下,这是后台挂起式打印hellodocker ,那么会使磁盘空间一直在使用直至磁盘满,所以

要去学会关闭或者停止这个容器的运行,而且还要去清理日志和容器,释放空间。

(5)使用start命令来启动刚刚创建的test1,并且用docker ps -l命令来查看容器状态有什么变化?

docker start test1

(三)查看本地容器信息

(1)可使用docker ps命令查看本地的容器。语法如下:

docker ps [OPTIONS]

OPTIONS说明:

-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

  1. 列出当前所有正在运行的container?
  2. 列出所有的container?
  3. 列出最近一次启动的container? 
  4. 列出最近创建的5个容器信息?

(2)可使用docker inspect命令查看容器的所有信息,包含运行情况,存储位置,配置参数和网络配置等。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

-f :指定返回值的模板文件。

-s :显示总的文件大小。

--type :为指定类型返回JSON。

  • 如何查看容器test5中的详细信息?

  • 如何查看容器test5的Ip地址?

(四)停止、杀死、重启某个docker 容器

(1)请试着杀死,停止,重启某个docker容器?

杀死容器: exit  停止容器:docker stop test2  重启容器:docker restart test2

(2)如何强制停止一个容器?

(五)查看指定容器的日志记录

docker logs –f –t [--tail] 容器

-f:--follow=true/false,一直跟踪日志变化并且返回结果

-t:--timestamps=true/false,在返回结果上加上时间戳

--tail string 从日志末尾显示多少行日志, 默认是all

--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)

(1)请一直跟踪容器test5的日志变化,并且在返回结果上加上时间戳?

docker logs -ft test5

(2)查看容器test5最近30分钟的日志?

docker logs --since=30m test5

(3)查看容器test5的日志最后10行,并且在返回结果上加上时间戳?

 docker logs -ft --since=2020 --tail=10 test5

(六)删除容器

当删除容器时,若正在运行,需要先停止删除。

docker rm [OPTIONS] CONTAINER

OPTIONS说明:

-f :通过SIGKILL信号强制删除一个运行中的容器

-l :移除容器间的网络连接,而非容器本身

-v :删除与容器关联的卷

  1. 如何删除所有容器?       docker rm $(docker ps –a -q)
  2. 如果有容器无法删除,应该怎么办?  docker rm –f 容器ID或容器名
  3. 请查看是否所有容器都被删除?        docker ps –a
  4. 以ubuntu:14.04作为基础镜像,启动一个容器test6, 并挂载数据卷/home, 删除容器nginx01,并删除容器挂载的数据卷

docker volume create myvolume

docker run -it --name test6 -v myvolume:/home ubuntu:14.04

(七)进入容器

进入容器有三种不同的方法:

1.docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。 请尝试用docker attach进入一个已经运行的容器?

2.docker exec 也可以进入一个已经运行的容器,然后进行命令执行的动作。就像使用SSH登录服务器一样来操作容器。请尝试用docker exec进入一个已经运行的容器?

3.使用nsenter工具进入

如何使用nsenter工具来进入容器呢?

一般来说,需要首先下载nsenter这个工具,它包含在util-linux软件包版本。

(1)首先访问该网址找到nsenter工具

https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/

(2)下载nsenter工具的源码到我们的主机上

#wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-2.32.tar.gz

(3)解压.tar.gz包

# tar -xzvf util-linux-2.32.tar.gz

(4)进入util-linux-2.32的目录

# cd util-linux-2.32/

(5)输入./configure --without-ncurses命令进行配置

(6)输入命令make nsenter来编译nsenter

(7)复制nsenter到/usr/local/bin路径下

# cp nsenter /usr/local/bin

(8)运行一个容器,并且找到找到容器的进程PID号(.state.Pid)

docker run -itd --name test7 ubuntu:14.04

docker inspect test7

(9)通过得到的这个PID,就可以连接到这个容器:

nsenter --target  $PID  --mount --uts   --ipc   --net   --pid

(10)在容器中可以查看用户和进程的相关信息

ps -ef

(八)导入容器和导出容器

(1)导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。请把test7容器导出到1.tar中。

(2)导入容器是指文件可以使用docker import命令导入到本地仓库成为镜像。请把1.tar导入,并在在导入时候其打上标签test8:latest

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章