docker三大核心概念

1. docker镜像(image

镜像是建立docker容器的基础,docker镜像相似于虚拟机镜像,能够将它理解为一个面向docker引擎的只读模块,包含文件系统。mysql

建立镜像有两种方法:linux

(1) 基于已有镜像的容器建立。主要是利用docker commit命令。sql

(2) 基于dockerfile建立。docker

首先按照dockerfile的格式,编写好dockerfile文件,以后经过docker build命令来建立镜像。docker build会读取制定的dockerfile,由docker服务器来建立镜像。服务器

2. docker容器(container

容器是从镜像建立的应用运行实例,容器之间是相互隔离、互不可见的。能够把容器看作一个简易版的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。网络

镜像自身是自读的,容器从镜像启动的时候,docker会在镜像的最上层建立一个可写文件层,镜像自己保持不变。curl

能够利用docker create命令建立一个容器,建立后的的容器处于中止状态,可使用docker start命令来启动它。也能够运行docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker startui

     当利用docker run建立并启动一个容器时,docker在后台的标准操做包括:url

    1)检查本地是否存在指定的镜像,不存在就从公有仓库下载。spa

    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