一、 docker容器介绍:
容器是Docker又一核心概念简单的说, 容器是独立运行的一个或一组应用, 以及它们的运行环境。对应的虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
启动容器有两种方式,一种是基于镜像新建一个容器井启动,另外一个是将在终止状态(stopped) 的容器重新启动,
二、启动操作
1.新建并启动
docker run -i -t centos:latest /bin/bash
-t选项让Docker分配一个伪终端(pseudo-tty) 并绑定到容器的标准输入上,
-i则让容器的标准输入保持打开(即交互式)
可以使用-name给容器起个形象的名称。
docker run -i -t --name wang centos:latest /bin/bash
在交互模式下, 用户可以通过所创建的终来输入命令:
docker run centos:latest /bin/echo "hellow world"
三、docker标准操作
1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
2. 利用镜像创建并启动 一个容器
3. 分配一个文件系统”并在只读的镜像层外面挂载一层可读写层
4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5. 从地址池配置一个ip地址给容器
6. 执行用户指左的应用程序
7. 执行主毕后容器被终止
四、容器运行命令
1.查看容器进程
docker ps -a (查看全部进程)
docker ps (查看运行进程)
2.将终止的容器启动运行
docker start a93e34c32e39
容器出于退出状态 可以直接启动
3.终止容器
docker stop 4ad4a14fec51
docker kill 4ad4a14fec51
4.容器重启
docker restart a93e34c32e39
五、守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时.可以通过添加 -d参数来实现。
例如下面的命令会在后台运行容器。
docker run -d centos:latest /bin/bash -c "while true;do echo hello worl;sleep 1; done"
容器启动后会返回一个唯一的id『也可以通过dockerps命令来章看容器信息。
1. docker run -d运行提个新的容器,我们通 过-d命令让他作为一个后台运行
2・centos:latest是一 我们想要在内部运行命令的遼像
3・/bin/sh -c是我们想要在容 器内部运行的命令
4. while true; do echo hello weibo; sleep 1; done这是一个简单的脚本,我们仅仅只是每秒打印一次 hello word —直到我们结束它
六、用docker inspect查看容器的信息命令格式:
docker inspect容器ID或容器名
docker inspect 2540e80e0a94
1.用docker inspect 查看容器的ip地址
docker inspect -f '{{.NetworkSettings.IPAddress}}' 38df31fbc6e3 (首先保证容器是开启状态)
2.查看docker inspect查看容器执行的程序
docker inspect -f '{{.Config.Cmd}}' 38df31fbc6e3
七、进入容器
1.attach方式
在使用 -d参数时,容器启动后会进入后台。某些时候需要进入容器进行操作'有很多种方法.包括使用docker attach 或nsenter命令。使用docker attach进入容器docker attach是Docker自带的命令
docker attach 38df31fbc6e3 (这种方式会随机发生错误)
1.docker attach允许我们进入后台进程.
2.--sig-proxy=false不使用容器转发信号,允许我们使用Ctrl+c来退出,执行 docker ps查看在后台运行
但是使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。
当某个窗口因命令阻塞时,其他窗口也无法执行操作了
2.docker exec进入运行容器
docker exec -it容器ID/名称/bin/bash以上命令返回一个命令界面,exec代表直接在容器中运行命令
docker exec -it 38df /bin/bash (使用此命令进入 每次进入 相当于单独的一个shell)
3.使用nsenter进入容器
安装nsenter工具在util-linux包2.23版本后包含。如果亲统中util-linux包没有该命令(可以按照下面的方法从源码安装
wget https://WWVJ.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
tar util-linux-2.24.tar.gz
cd util-linux-2.24
./configure --without-ncurses&& make nsenter
cpnsenter /usr/local/bin
或者
yum -y install util-linux
1.)首先设置快捷
PID=$(docker inspect --format "{{.State.Pid }}" 38df31fbc6e3)
2.)进入容器
nsenter --target $PID --mount -u -i -n -p
3.使用脚本方式进入
1.下载脚本
https://github.com/dzckzeo/bashrc_docker (进入网址 git下载)
2.进入容器
docker-enter a93e34c32e39
八、容器的导入导出
1.导出
docker export 38df31fbc6e3 > centos:httpd.tar
2.导入
docker import centos:httpd.tar centos:httpd
或:
cat centos:httpd.tar | docker import - centos:httpd
用户既可以使用docker load来导入镜像存储文件到本地镜像库,也可以使用docker import来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指走标签等元数据信息。
缺点就是 容易丢失数据
九、删除容器
可以使用docker rm来删除—处于终止状态的容器。如果要删除一个运行中的容器,可以添加-f参数。Docker会发送 SIGKILL信号给容器
1.删除单个容器
docker rm 38df31fbc6e3
2.删除多个容器
docker rm $(docker ps -a -q)