容器是镜像的一个运行实例,它带有额外的可写文件层。如果说虚拟机是模拟运行的一整套操作系统以及跑在上面的应用。那么Docker容器就是一个或者一组应用以及必须的运行环境。
1.创建容器
A.新建容器:
使用docker create 命令来创建容器
使用docker create 创建的容器,处于停止状态。需要手动启动
docker start 3dbc62fc848fB.新建并启动容器:
使用docker run命令基于镜像新建一个容器并启动。
执行命令:docker run ubuntu:latest /bin/echo ‘Hello, World!’
容器在执行完指定的命令之后,就停止了。C.当使用Docker run来创建并启动容器时,docker在后台运行的标准操作包括:
1>检查本地是否存在指定镜像,不存在就从公共仓库下载 2>利用镜像创建并启动一个容器 3>分配一个文件系统,并在只读的镜像层外面挂载一层可读写层 4>从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中 5>从地址池配置一个IP地址给容器 6>执行用户给定的应用程序 7>执行完毕容器被终止
-t选项让Docker分配一个伪终端,-i则让容器的标准输入保持打开。
在创建的终端中可以使用linux命令来完成一些操作,使用exit命令可以退出当前容器。对于锁创建的bash应用,如果使用exit命令退出容器,这个容器也将自动变为终止状态,这是因为,对于docker来讲,当容器中
运行的应用退出之后,容器就没有必要再继续运行了。守护状态运行:
添加-d参数,可以使启动的容器以后台守护进程的模式运行。使用 docker logs 命令, 查看docker容器的输出信息2.终止容器:
A.使用docker stop 命令来完成对容器的终止
a.使用命令docker stop -t 通过-t参数来指定时间,即它会首先向容器发送SIGTERM信号,等待一段时间之后,如果没有指定-t的具体值,则默认是10秒,等待10秒之后,再发送SIGKILL信号给容器,此时容器将彻底终止。 b.也可以使用docker kill命令,直接发送SIGKILL信号来强行终止容器
使用docker ps -a -q命令,可以列出已经停止的容器
使用docker start命令,可以启动一个处于终止状态的容器使用docker restart命令,则可以重新启动一个运行中的容器
3.进入容器
使用-d参数时,docker容器启动之后会以守护进程的方式在后台运行,此时,无法看到容器内的信息。如果要进入容器完成一些操作时,有三种方式可以进入容器:
A.使用命令 docker attach
docker attach 容器ID。使用docker attach 连接到容器,也是有一些不足的,当多个窗口同时attach到同一个容器时,所有窗口将同步显示,如此这般,当某个窗口因命令阻塞时,其他窗口将无法操作了。
B.使用命令 docker exec
docker exec 是docker 1.3版本起开始提供的一个docker 命令,
C.使用nsenter工具
安装nsenter,nsenter工具在util-linux包2.23版本后包含。可以以源码的方式安装
a.下载源码包: wget --no-check-certificate [https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz](https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz) b.解压 tar -zxvf util-linux-2.24.tar.gz c.进入util-linux-2.24解压后的目录,并执行./configure 进行源码编译 d.make nsenter && cp nsenter /usr/local/bin
nsenter安装完成之后,接下来就使用nsenter工具连接到容器,还需要找到容器的进程的PID,可以通过如下命令获取:
PID=$(docker insepct --format "{{ .State.Pid }}") 996 nsenter --target $PID --mount --uts --ipc --net --pid
4.删除容器
-f 强制删除一个还处在运行状态的容器 -l只删除容器的连接,但是保留容器 -v删除容器挂载的数据卷
使用-f参数虽然可以强制删除运行中的容器,但是,执行删除之后依旧会遗留一些问题,因此,这种强制删除的方式并不推荐。
5.导入和导出容器
A.docker export
docker export 可以将一个指定的镜像导出到一个文件,而不管这个容器是否处于运行状态,docker export文件导出的只是一个快照,而不是镜像文件。
B.docker import
导出的文件,可以使用docker import命令导入成为镜像