容器依据镜像作为基石启动,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。
启动容器
-检查本地是否存在指定的镜像,不存在就从公有仓库下载
-利用镜像创建并启动一个容器
-分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
-从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
-从地址池配置一个 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 | 导入镜像启动 |