1.docker是什么?
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2.docker概念
◆ Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板;
◆ Docker 容器(Container):容器是独立运行的一个或一组应用;
◆ Docker 客户端(Client):Docker客户端通过命令行或者其他工具使用 Docker API与Docker 的守护进程通信;
◆ Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器;
◆ Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库,Docker Hub(
https://hub.docker.com) 提供了大量的镜像集合;
◆ Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox。
3.docker架构
Docker 容器通过 Docker 镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
![](https://i-blog.csdnimg.cn/blog_migrate/ec39c6026fa5abf3c62811ca1e0f8f8b.png)
4.docker安装(CentOS7)
# 安装:yum -y install docker
#启动后台服务:service docker start
#测试运行hello-world:docker run hello-world
问题:启动失败,
Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel.Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)
解决:vim /etc/sysconfig/docker 修改
--selinux-enabled=false;
5.docker使用
5.1.示例
docker run ubuntu:15.10 /bin/echo "Hello world"
参数解析:
docker: Docker 的二进制执行文件;
run:与前面的 docker 组合来运行一个容器;
ubuntu:15.10:运行的镜像,首先从本地查找镜像是否存在,如果不存在,会从Docker Hub下载公共镜像;
/bin/echo "Hello world": 在启动的容器里执行的命令;
解释为:Docker以ubuntu15.10镜像创建一个新容器,然后在容器里执行bin/echo "Hello world",输出结果。
5.2.常用命令
运行交互式的容器:docker run -i -t ubuntu:15.10 /bin/bash;
◆
-t:在新容器内指定一个伪终端或终端;
◆
-i:与容器内的标准输入进行交互;
启动容器(后台模式):docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done";
◆
-d:让容器在后台运行;
查看容器基本信息:docker ps;
容器内的标准输出:docker logs 容器id/名称;
停止容器:docker stop 容器id/名称;
5.3.容器使用
◆ 载入镜像:docker pull 镜像;
◆ 运行应用:docker run -d -P 镜像;
◆
-P:容器内部使用的网络端口映射到主机,可通过docker ps,docker port 容器id/名称查看端口映射;
◆
-p 指定绑定的端口,docker run -d -p 5000:5000 镜像;
◆ 查看容器的进程:docker top 容器id/名称;
◆ 查看容器的底层信息:docker inspect 容器id/名称;
◆ 停止容器:docker stop 容器id/名称;
◆ 重启容器:docker start 容器id/名称;
◆ 删除容器:docker rm 容器id/名称容器必须是停止状态才能删除);
5.4.镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认从 Docker Hub 公共镜像源下载。同一仓库源可以有多个标签,代表这个仓库源的不同版本,使用 REPOSITORY:TAG 来定义不同的镜像,如果不指定一个镜像的版本标签,docker 将默认使用 仓库源:latest 镜像。
◆ 列出本地镜像:docker images;
◆ 载入镜像:docker pull 镜像;
◆ 查找镜像:docker search 镜像;
◆ 创建镜像:docker build -t 镜像名 Dockerfile文件目录,Dockerfile文件目录:
A.FROM:指定使用哪个镜像源;
B.镜像内执行命令:RUN;
C.为镜像添加新标签:docker tag 镜像id 仓库源:新标签
D.示例:
![](https://i-blog.csdnimg.cn/blog_migrate/6e616c6eb71461e6384b3e25cb09e673.png)
◆ 更新镜像:
A.运行镜像(docker run);
B.更新(apt-get update);
C.退出(exit);
D.提交:docker commit -m="描述" -a="作者" 容器ID 镜像名;
5.5.容器连接
◆ 网络端口映射
◆ 容器连接:docker允许将多个容器连接在一起,共享连接信息,docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。