docker三大核心概念
1. docker镜像(image)镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,包含文件系统。创建镜像有两种方法:(1) 基于已有镜像的容器创建。主要是利用docker commit命令。(2) 基于dockerfile创建。首先按照dockerfile的格式,编写好dockerfile文件,之后通过do
1. docker镜像(image)
镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,包含文件系统。
创建镜像有两种方法:
(1) 基于已有镜像的容器创建。主要是利用docker commit命令。
(2) 基于dockerfile创建。
首先按照dockerfile的格式,编写好dockerfile文件,之后通过docker build命令来创建镜像。docker build会读取制定的dockerfile,由docker服务器来创建镜像。
2. docker容器(container)
容器是从镜像创建的应用运行实例,容器之间是相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。
镜像自身是自读的,容器从镜像启动的时候,docker会在镜像的最上层创建一个可写文件层,镜像本身保持不变。
可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以运行docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker start。
当利用docker run创建并启动一个容器时,docker在后台的标准操作包括:
(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载。
(2)利用镜像创建并启动一个容器。
(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
(4)从宿主机配置的网桥接口中桥接一个虚拟的接口到容器中。
(5)从地址池中配置一个IP地址给容器。
(6)执行用户指定的应用程序。
(7)执行完毕后容器终止。
基于镜像新建一个容器并启动
docker run --help
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d: detach Run container in background and print container ID 表示以“守护模式”执行
-i: interactive Keep STDIN open even if not attached 表示以“交互模式”运行容器
-t: tty Allocate a pseudo-TTY 表示容器启动后会进入其命令行(分配伪终端)
-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开(如在Linux终端输入命令操作)
-e: 设置变量值
IMAGE:可以通过“镜像名”或“镜像 ID”来启动容器。
查看正在运行的容器
docker ps
查看所有容器
docker ps –a
进入容器
docker attach CONTAINER-ID/NAMES
docker inspect --format "{{ .State.Pid }}" <container-id>
nsenter --target $PID --mount --uts --ipc --net --pid
docker inspect --format "{{ .State.Pid }}" f83944c8b9e8
nsenter --target 11738 --mount --uts --ipc --net --pid
以守护进程运行容器
Ctrl-P + Ctrl-Q 可退出并使容器继续运行
停止容器
docker stop 容器名/ID
删除容器
docker rm 容器名/ID
查看容器详细信息
docker inspect容器名/ID
3.docker仓库(Repository)
Docker私有仓库搭建和使用
上传镜像文件到私有仓库
安装Docker后,可用通过官方提供的registry镜像来搭建一套本地私有仓库环境。
下载registry镜像:
docker pull registry
基于私有仓库镜像运行容器:(上传镜像操作是要保证该容器为运行状态)
docker run -d -p 5000:5000 [--privileged=true] -v /opt/data/registry:/tmp/registry registry
访问私有仓库:
curl http://192.168.8.236:5000/v2/_catalog
修改镜像的tag (加上IP和端点,否则无法上传到私有仓库)
docker tag <image id/image name> <host-ip>:5000/div_image_name
上传镜像
docker push 127.0.0.1:5000/div_image_name
注:当tag使用内网IP时,需要配置docker服务registry证书;否则报如下错误:
编辑 /etc/systemd/system/multi-user.target.wants/docker.service 中的ExecStart= 的结尾,加入 --insecure-registry=192.168.99.100:5000,将 192.168.99.100:5000 替换成你的 registry 地址。如果有很多 registry,可以设置多组。或者如果虚拟机的 IP 总是变化,也可以使用 CIDR 的形式,比如 --insecure-registry=192.168.99.0/24。
systemctl daemon-reload
systemctl restart docker
查看私有仓库:
从私有仓库下载镜像文件
登陆另外一台Docker客户端
编辑 /etc/systemd/system/multi-user.target.wants/docker.service 中的ExecStart= 的结尾,加入--selinux-enabled --insecure-registry=192.168.99.100:5000,将 192.168.99.100:5000 替换成你的 registry 地址。
systemctl daemon-reload
systemctl restart docker
docker pull 192.168.8.236:5000/mysql5.7
更多推荐
所有评论(0)