Docker架构总览
最核心的是 Docker Daemon 我们称之为 Docker 守护进程,也就是 Server 端,Server 端可以部署在远程,也可以部署在本地,因为 Server 端与客户端 ( Docker Client ) 是通过 Rest API 进行通信。
Docker CLI 实现容器和镜像的管理,为用户提供统一的操作界面,这个客户端提供一个只读的镜像,然后通过镜像可以创建一个或者多个容器 (container),这些容器可以只是一个 RFS ( Root File System ),也可以是一个包含了用户应用的 RFS。容器在 Docker Client 中只是一个进程,两个进程是互不可见的。
用户不能与 server 直接交互,但可以通过与容器这个桥梁来交互,由于是操作系统级别的虚拟技术,中间的损耗几乎可以不计
Docker核心概念
相关概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。 |
Docker 容器 (Container) | 容器是独立运行的一个或一组应用。 |
Docker 客户端 (Client) | Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。 |
Docker 主机 (Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器 |
Docker 仓库 (Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 |
Docker Machine | Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker,比如 VirtualBox、 Digital Ocean、Microsoft Azure。 |
常用操作命令
容器相关命令
1. 运行 docker run
示例:docker run ubuntu:15.10 /bin/echo "Hello world"
参数:
ubuntu:15.10: 镜像名(先检测本地主机上查找镜像是否存在,如果不存在则去 Docker Hub 下载公共镜像)
/bin/echo "Hello world":在镜像中运行的命令
其他参数:
参数 | 说明 |
---|---|
-i | 允许你对容器内的标准输入 (STDIN) 进行交互 |
-t | 进入指定系统的终端(伪终端) |
-d | 后台运行(创建一个以进程方式运行的容器) |
-P | 将容器内部使用的网络端口映射到我们使用的主机上 |
-p | 设置端口号(-p 127.0.0.1:5001:5000/udp 通过 5001 访问 5000 端口设置为 udp ) |
--name | 设置启动容器名 |
-v | 设置挂载目录(如:-v $PWD/www:/www 将主机中当前目录下的 www 挂载到容器的 / www) |
2. 查看正在运行的 docker 容器 docker ps
返回内容说明
字段名 | 说明 |
---|---|
CONTAINER ID | 容器 ID |
IMAGE | 镜像名 |
COMMAND | 执行命令 |
CREATED | 创建时间 |
STATUS | 状态 |
PORTS | 端口信息 |
NAMES | 名称 |
其他参数
参数 | 说明 |
---|---|
-l | 显示最后创建的容器(包括所有状态) |
-a | 显示所有容器(默认显示刚刚运行) |
-n | 显示最后创建的n 条 |
-q | 只显示 id |
-s | 显示文件大小 |
3. 停止容器 docker stop id/name
4. 启动容器 docker start id/name
5. 删除容器 docker rm id/name
6. 查看容器运行日志 docker logs id/name
7. 查看端口映射情况 docker port id
8. 查看容器内部运行的进程 docker top id/name
9. 查看Docker底层信息 docker inspect id/name
10. 删除容器 docker rm id/name
删除时必须停止不然报错
镜像相关命令
1. 查看有哪些镜像 docker images
2. 搜索镜像 docker search name
3. 下拉镜像 docker pull name
4. 创建镜像 docker bulid
流程:
创建文件 Dockerfile
docker build -t runoob/centos:6.7 ./
-t
指定要创建的目标镜像名
最后一个参数是 Dcokerfile 文件位置,可以绝对可以相对Dcokerfile 文件内容:
内容说明:
FROM: 指定使用哪个镜像源
RUN: 告诉 docker 在镜像内执行的命令
内容示例:
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
5. 使用 docker commit
创建副本
在一个新的容器中安装你想要的软件然后对出这个容器可以获取到 ID
然后使用 docker commit -m="has update" -a="aaa" e218edb10161 aaa/ubuntu:v2
来创建一个副本
参数说明:
参数 | 说明 |
---|---|
-m | 提交的描述信息 |
-a | 指定镜像作者 |
e218edb10161 | 容器ID |
runoob/ubuntu:v2 | 指定要创建的目标镜像名 |