Docker 架构
docker 是C/S架构的软件,无论是client端还是Server端都是由 docker
一个程序提供,这个程序有很多子程序。
docker daemon 就是其中一个子程序,当运行 docker daemon
时,主机就运行成一个守护进程服务器,它可以监听在某个套接字上,为了安全,默认只提供 Unix sock 文件的套接字。
docker 支持三种类型套接字:
- ipv4套接字
- ipv6套接字
- Unix sock套接字
DOCKER_HOSTS
是真正运行容器的主机,Container
: 容器,Images
: 镜像
Clicent -> DOCKER_HOST 使用 https协议
DOCKER_HOST -> Registry 使用https协议
docker 有企业版和社区版之分:
- docker-ce 社区版
- docker-ee 企业版
仓库
一个 docker registry
上有三种功能:
- 提供镜像存储的仓库
- 提供用户来获取镜像的时的认证
- 所有镜像索引搜索
一般来说,一个应用程序作为一个仓库。而通过 镜像名:标签
的形式来描述一个具体的镜像文件。
如果在获取镜像时,只给出了镜像名而没有提供标签,则获取最新的镜像文件(latest 会指向仓库中最新的版本),一个镜像有多个标签。docker 镜像是只读文件,不允许任何修改。
仓库就是用来存放镜像的, 镜像和容器的关系,容器是基于镜像创建的,就像进程和程序的关系。
镜像是静态的不会运行。容器是有生命周期的,类似与进程。
任何一个 resfull风格的API都是可以进行增删改查的,docker也不例外
images、containers、networks、volumes、plugins 都是可以进行增删改查的。
安装和使用docker
安装docker要求:
- 64 bits CPU
- Linux Kernel 3.10+
- Linux Kernel cgroups and namespaces
为了更好的支持docker 推荐使用 Centos7
安装docker-ce
#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#yum install docker-ce -y
#rpm -ql docker-ce
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
/usr/lib/systemd/system/docker.socket
=== docker 加速 ===
#mkdir /etc/docker
#vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
#systemctl start docker
可通过 docker info 查看是否生效
查看docker版本
#docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
查看docker详细信息
#docker info
常用操作命令
常见示例:
=== 下载镜像到本地 ===
#docker pull nginx:alpine
=== 查看镜像 ===
#docker images
=== 查看docker关于容器的操作 ===
#docker container --help
=== 查看docker网络 ===
#docker network ls
=== 启动一个最基本的容器 ===
#docker run --name b1 -it busybox:latest
=== 查看容器b1的详细信息 ===
#docker inspect b1
=== 启动停止的容器 ===
#docker start -ai b1
=== 启动容器并运行在后台 ===
#docker run --name web1 -d nginx:alpine
=== 绕过容器边界进入容器 ===
#docker exec -it kvstor1 /bin/sh
=== 查看容器日志 ===
#docker logs web1
docker 容器状态转换各常用命令
docker0 是 nat 桥接模式。
一个容器只是为了运行一个程序,在容器中的程序不能跑在后台,否则一启动容器就终止。
因为docker容器仅在它的进程(PID为1)运行时,会保持运行。如果1号进程退出了, docker容器也就退出了。