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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐