docker-镜像/容器

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

镜像使用

1、镜像管理命令介绍

​ docker image

2、镜像获取

​ 2.1 先搜索镜像

​ docker search <镜像>

​ 2.2 然后下载镜像

​ docker image pull

3、镜像列表

​ docker image ls

4、镜像列表基本状态解析

​ 各个选项说明:

  • **REPOSITORY:**表示镜像的仓库源
  • **TAG:**镜像的标签
  • **IMAGE ID:**镜像ID
  • **CREATED:**镜像创建时间
  • **SIZE:**镜像大小

5、镜像详细

​ docker image inspect <镜像id>

6、镜像删除

​ docker image rm <镜像id>

7、镜像删除构建失败的镜像

​ docker image prune

​ 7.1 清理未使用的镜像

​ docker image prune -a

7、镜像设置标签,也叫镜像设置版本

​ docker image tag image:v1 image

8、镜像历史(了解镜像的操作记录)

​ docker image history [OPTIONS]

9、导出镜像导入导出

​ 8.1 镜像导入

​ docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

​ 8.2 镜像导入

​ docker image load [OPTIONS]

​ Options:
​ -i, --input string Read from tar archive file, instead of STDIN
​ -q, --quiet Suppress the load output

​ 8.3 镜像导出,备份

​ docker image save [OPTIONS] IMAGE [IMAGE...]

容器使用

​ 1、容器命令介绍

​ docker container

​ 容器的修改和增删

​ 2、运行容器rmcore

​ docker run rmcore

​ 3、查看容器列表

​ docker ps -a

​ 3、后台运行rmcore

​ docker run -d rmcore

​ -d 后台执行

​ 4、暴露rmcore端口

​ docker run -d -P rmcore

​ 4.1 自定义端口暴露

​ docker run -d -p 2020:80 2021:443 rmcore

​ 5、进入容器

​ docker exec -it rmcore /bin/bash

​ -i :交互式操作

​ t : 终端

​ /bin/bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash,就好比xshell一样

​ 5、停止容器

​ docker stop rmcore

​ 6、启动容器

​ docker start rmcore

镜像和容器关系

镜像和容器是一对多的关系

镜像和容器区别

1、表面区别

​ 镜像是单例的,容器是多例的

2、本质区别

​ 镜像不可写,容器可写

​ 主要原因是在于镜像基础之上加了一层可写层

总结:

1、快、轻量

2、可移植

3、可持续集成

4、隔离性

5、成本非常低

如何构建自定义仓库

什么是仓库

​ 仓库(Repository)是集中存放镜像的地方

仓库地址

https://hub.docker.com

先说明为什么要构建自定义仓库

​ 1、远程仓库地址

​ 地址:https://hub.docker.com

​ 下载速度非常慢

​ 使用镜像仓库解决?

​ 2、使用镜像仓库

​ 镜像仓库资源列表

​ 阿里云的加速器:https://help.aliyun.com/document_detail/60750.html

​ 网易加速器:http://hub-mirror.c.163.com

​ 官方中国加速器:https://registry.docker-cn.com

​ ustc 的镜像:https://docker.mirrors.ustc.edu.cn

​ 1、进入docker 配置目录

​ cd /etc/docker

​ 请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

​ 2、创建daemon.json文件,目的配置docker

​ touch daemon.json

​ 3、 配置镜像仓库

​ {"registry-mirrors":["https://registry.docker-cn.com"]}

​ 4、 重新启动

​ service docker restart

​ 5、查询docker配置信息

​ docker info

1585015132294

​ 6、下载镜像的时候依然会出现很大问题,但是加速镜像无法依然无法进行仓库私有化。

​ docker pull <镜像:标签>

​ 3、自定义镜像仓库

​ 条件:

​ 1、官网仓库镜像:docker-registry v2.x 版本

​ 2、rmcore镜像

​ 3、两台主机安装docker

​ 1、如何构造私有仓库?

​ 1.1、下载仓库镜像

​ docker pull registry

​ 1.2、运行仓

​ 下载速度有点慢?

​ 1.3、查看仓库镜像

​ curl 127.0.0.1:5000/v2/_catalog

​ 2、如何将rmcore镜像上传到仓库?

​ 2.1、设置rmcore 标签

​ docker image tag rmcore 111.229.181.115:5000/rmcore

​ 2.2、推送到私有仓库

​ docker push 111.229.181.115:5000/rmcore

​ 2.3、查询私有仓库镜像信息

​ docker image inspect registry

​ 3、如何在远程设置私有仓库连接?

​ 3.1 远程主机docker配置daemon.json

​ vi /etc/docker/daemon.json

​ "insecure-registries": [
​ "123.57.164.54:5000"
​ ]

​ 3.2 重启远程主机

​ service docker restart

​ 4、如何下载远程镜像?

​ 4.1 下载rmcore镜像

​ docker pull 111.229.181.115:5000/rmcore

​ 4.2 查询rmcore镜像

​ docker image ls

​ 4.2 运行远程镜像

​ docker run -d -P --name rmcore 111.229.181.115:5000/rmcore

如何构建自定义镜像

​ 方式有两种:

​ 1、使用commit来构建镜像:

    commit是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信息和修改的信息。相当于一个镜像的快照。

​ 2、使用dockerfile来构建镜像:

    dockerfile是快速构建所需(自定义)镜像。

​ 那么我们如何构建自定义镜像呢?

​ 如何构建一个nginx镜像?

​ 条件:

​ 1、准备一个nginx

​ 2、基础镜像Centos7以上

​ 3、Dockerfile文件

​ 4、Linux基本命令操作

​ 1、定义一镜像构建

​ docker bulid -t 镜像名称 .

​ 参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

Dockerfile文件详解

什么是Dockfile

​ Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile文件命令

​ 1、FROM 指定基础镜像构建

​ FROM 镜像

​ 2、COPY 复制命令。从上下文目录中复制文件或者目录到容器里指定路径。

​ 写法:

​ COPY 源路径,目标路径

​ COPY ["源路径","目标路径"]

​ 3、RUN运行指令。构建的时候运行的指令

​ 主要在于镜像构建的时候运行,运行build命令的时候

​ 后面接的命令就是shell输入的命令

​ 写法

​ RUN shell命令 参数1 参数2

​ RUN ["shell命令 ","参数1"," 参数2"]

​ 例如:

​ RUN ["echo",">"," /usr/share/index.html"]

​ 4、CMD运行指令。运行容器时候运行的指令

​ 主要在于镜像运行容器的时候生成,运行run的时候运行

​ 写法

​ CMD <shell 命令>
​ CMD ["<可执行文件或命令>","","",...]

​ 例如:

​ CMD ["dotnet","rmcore.dll"]

​ 缺点:在run 命令后面可以进行覆盖

​ docker run -d -P rmcore dotnet rmcore.dll 进行覆盖掉

​ 5、ENTRYPOINT运行指令。运行容器时候运行的指令(不会被覆盖)

​ 写法

​ ENTRYPOINT ["","","",...]

​ 可以和CMD动态结合,设置动态的配置参数

​ 例如

​ ENTRYPOINT ["nginx", "-c"] 定参

​ CMD ["/etc/nginx/nginx.conf"]变参

​ 6、EXPOSE暴露端口指令

​ 仅仅声明端口,就是指定镜像暴露的端口

​ 在run 的时候,通过docker run -p 会自动随机映射到EXPOSE端口

​ 写法

​ EXPOSE 端口

​ EXPOSE 端口

​ 例如

​ EXPOSE 5000

​ EXPOSE 5001

​ 7、WORKDIR工作目录指令

​ 用于应用在容器内的工作目录,就好比:ruanmou目录

​ 写法

​ WORKDIR <工作目录路径>

​ 例如

​ WORKDIR /rmcore

​ 或者

​ WORKDIR /nginx

nginx镜像构造步骤

​ 1、如何安装nginx?

​ 1.1 安装 nginx需要工具

​ yum -y install gcc make pcre-devel zlib-devel tar zlib

​ 1.2 下载nginx

​ wget http://nginx.org/download/nginx-1.15.2.tar.gz

​ 1.3 nginx解压/nginx目录

​ tar -zxvf nginx-1.15.2.tar.gz

​ 1.4 切换到/nginx/nginx-1.15.2

​ 执行./configure

​ make

​ make install 进行安装

​ 1.5 切换到/usr/local/nginx/sbin

​ 执行 ./nginx 启动nginx

​ 2、 如何构造Dockerfile?

​ 2.1 创建Dockerfile文件

​ vi Dockerfile

​ 2.2 配置Dockerfile内容

​ FROM cento
​ RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
​ WORKDIR /nginxs
​ EXPOSE 80
​ COPY nginx-1.15.2.tar.gz /nginx
​ RUN tar -zxvf nginx-1.15.2.tar.gz
​ RUN cd /nginx/nginx-1.15.2 && ./configure && make && make install
​ CMD ["/bin/bash"]

​ 2.3 构建nginx镜像

​ docker build -t nginx .

​ 3、如何运行nginx镜像?

​ 3.1 先启动容器

​ docker run -itd -P nginx

​ 3.2 进入容器,后台启动

​ docker exec -it -P nginx /bin/bash

​ 3.3 启动nginx

​ 切换 cd /usr/local/nginx 启动 ./nginx

容器镜像扩展

​ 1、 nginx 和 aspnetcore项目之间如何做反向代理呢 ?

​ 使用容器互联来解决

​ 2、如何修改nginx配置?

​ 使用数据挂载来做

​ 3、如何做nginx,aspnetcore集群?

​ 使用docker-swarm

​ 4、nginx和 aspnetcore项目是如何联网的?

​ 使用network来联网