容器依据镜像作为基石启动,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。

启动容器
    -检查本地是否存在指定的镜像,不存在就从公有仓库下载
    -利用镜像创建并启动一个容器
    -分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    -从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    -从地址池配置一个 ip 地址给容器
    -执行用户指定的应用程序
    -执行完毕后容器被终止
    

【1】常用操作

【单次执行容器】
	启动容器运行命令后直接终止
	以nginx:latest容器启动 下面的命令输出一个"Hello docker",之后终止容器。
        [root@VM_16_189_centos ~]# docker run nginx:latest /bin/echo 'hello docker'
        hello docker
        
【交互式执行容器】
	可以进入容器执行相关操作,例如bash命令
 	命令docker run -it nginx:latest bash  以交互模式,运行nginx容器 并执行bash命令
    -i --interactive Docker分配一个伪终端并绑定到容器的标准输入  
    -t --tty 让容器的标准输入保持打开

    退出容器可以输入命令exit,随即容器也停止了。
	
	交互式的容器,输入 -ctrl+P ctrl+Q转移到后台运行容器,下次可以利用exec进入

-自定义容器的名字
	由于容器在启动的时候,系统会随机分配给一个name,但是也是不太好记忆也没有什么实际含义,所以自定义。
        docker run --name=自定义名 -it IMAGE /bin/bash
        
【进入容器】
	在使用 -d 参数时,容器启动后会进入后台。后台运行的容器可以通过下面的命令进入
    docker attach 命令或 docker exec 命令。
    但是docker attach 如何进入正在后台运行的容器 然后以exit退出的时候,容器也退出。
    但是docker exec 进入后 使用exit的时候 不会导致容器的停止。
    docker exec -it nginx:latest bash 进入容器
【设置容器端口映射】
		在启动容器的时候,同时指定端口映射
        docker run -P -it ubuntu (将为容器暴露的所有端口进行映射)
        docker run -p 80 -it ubuntu  /bin/bash(只指定 容器端口 宿主机端口随机的)
        docker run -p 8080:80 -it ubuntu  /bin/bash(容器端口对应宿主机端口)
        docker run -p 0.0.0.0:80 -it ubuntu  /bin/bash(ip 对应宿主机端口)
        docker run -p 0.0.0.0:8080:80 -it ubuntu  /bin/bash(ip端口 对应宿主机端口)
【终止运行容器】
	可以使用 docker container stop id/name 来终止一个运行中的容器。
	或者
     docker stop id/name (需要通知一下容器)
     docker kill id/name (直接关闭)
【启动已经终止的容器】
	 查看当前所有的容器docker ps -a
	 执行docker container start id/names 或者 docker start id/name(可以省略container)
	 //以交互的形式启动容器
	  [root@VM_16_189_centos ~]# docker run -it nginx:latest bash 
	 //输入exit,容器停止也就退出了
		root@657ef4943df3:# exit
 
【查看容器】
	docker ps 查看正在运行的容器
        -a参数 查看所有的容器   -l参数 查看最新创建的容器
    命令会显示Container Id ,Image,Command,Created,Status,Ports,Names
    重点说一下容器id和name,他们都是容器唯一标识,自动分配的。可以用id或者name来指定操作的容器。

【查看容器日志】
   	docker logs id/name
       -f --follows 跟踪日志变化 -t --timestamps 返回结果加上时间戳  --tail 最后多少的日志      
       
【查看容器进程】
 	docker top id/name 
    
【查看容器配置信息】
	docker inspect id/name 

【导出容器】
	docker export 命令 这样将导出容器快照到本地文件。
    [root@VM_16_189_centos ~]# docker export admiring_jennings > lamp.tar
 	[root@VM_16_189_centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                  NAMES
4bd78f355e2c        httpd               "httpd-foreground"   About a minute ago   Up About a minute   80/tcp                 tender_jang
【导入容器快照为为新的镜像】
	可以使用 docker import 从容器快照文件中再导入为镜像
    [root@VM_16_189_centos ~]# cat lnmp.tar  | docker import  - tacks/lnmp:v1.0
sha256:b66fe4d1213694219bcb61af76626e2344579686531c5cbb6a83e917701658e4
	[root@VM_16_189_centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
4bd78f355e2c        httpd               "httpd-foreground"   5 minutes ago       Up 4 minutes        80/tcp                 tender_jang
[root@VM_16_189_centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tender_jang/httpd   v1.0                97721a2493fd        13 seconds ago      150MB
	[root@VM_16_189_centos ~]# docker run -it --name http tender_jang/httpd:v1.0 bash


【删除容器】
    docker container rm id/name来删除一个处于终止状态stop的容器(container 可以省略)
    强制删除 如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
    清理所有处于终止状态的容器 docker container prune

【2】实例

-安装nginx
        -创建映射80端口的交互式容器
            docker run -p 8888:80 --name web -it ubuntu /bin/bash
        -更新一下安装命令
        	apt-get update
        -安装nginx
            apt-get install -y nginx 
        -安装文本编辑器vim
            apt-get install -y vim
        -查看nginx配置文件
            vim /etc/nginx/sites-enabled/default
        -运行nginx
        	service nginx start
        -验证网站访问8888端口 可以看到对应nginx欢迎界面

【小结】

命令

作用

docker run 参数 镜像 命令

运行容器

docker run nginx:latest /bin/echo 'hello docker'

单次执行容器

docker run -it nginx:latest bash

交互式执行容器

docker run --name=web -it IMAGE /bin/bash

自定义运行容器的名字

docker exec -it nginx:latest bash

进入容器

docker run -p 8080:80 -it ubuntu /bin/bash

设置容器端口80映射宿主机的8080端口

docker container stop id/name

终止一个运行中的容器 container可以省略

docker kill id/name

强制直接关闭容器

docker container start id/name

启动一个终止的容器

docker container rm id/name

删除容器

docker container prune

清理所有处于终止状态的容器

exit

退出容器

docker ps -a

查看所有容器

docker logs id/name

查看容器日志

docker top id/name

查看容器进程

docker inspect id/name

查看容器配置

docker export name > web.tar

导出容器快照到本地文件

cat lnmp.tar  | docker import  - tacks/lnmp:v1.0

导入镜像启动