1、名词解释

镜像仓库:可理解为Git仓库,仓库可以存储多个镜像,仓库中通过tag标签方式,区分不同的镜像,比如ubuntu仓库中,有ubuntu 13.04 、ubuntu 14.04等等

镜像:是一个由文件系统组成的可执行的文件,比如一个包含tomcat的镜像,docker run后可直接获取一个tomcat实例。

2、创建&运行指定版本的镜像:docker run -it ubuntu:14.04 /bin/bash

说明:通过冒号指定tag,ubuntu仓库后不加版本号,默认获取最新的版本

3、仓库托管,两种方式,后面会详细介绍:

云托管 Docker Hub :类似于Github 和 码云,是一个云托管的镜像仓库,分为:用户仓库和顶层仓库,用户仓库用Docker用户自己管理,顶层仓库由Docker公司人员管理。

本地托管:基于docker Registry ,在自己的云服务器或本地服务器部署好镜像私有的Registry

4、用户仓库命名由用户名和仓库名两部分组成,如:luoy/my_tomcat

用户名:luoy

仓库名:my_tomcat

5、顶层仓库只包含仓库名称,比如ubuntu仓库

6、拉取镜像:docker pull 镜像仓库:tag标签

说明:不加tag标签,默认拉去最后一个版本

注意:仓库中如果tag不一样,但是镜像ID一样时,可以下载任意镜像,ID一样说明是同一个镜像

7、在线查找镜像:docker search 镜像名称

docker search 返回以下信息:

  • 仓库名(name)
  • 镜像描述(description)
  • 用户评价数(stars)--说明镜像受欢迎程度
  • 是否官方(official)
  • 自动构建(automated)-- 是否由Docker Hub的自动构建流程创建

8、在构建自己的镜像前,需要知道如何共享和发布镜像,可以将镜像推送到Docker Hub或自己私有仓库中

8-1、先注册Docker Hub 账号,可选择个人仓库注册,免费的,Docker Hub地址

9、进入docker所在的服务器,登录到docker hub:docker login

登录成功后的认证信息会保存到 $HOME/.dockercfg 文件中

10、构建镜像可以使用以下两种方式

  • docker commit  不推荐使用,推荐使用更加灵活方式Dockerfile
  • docker build 命令和Dockerfile文件 推荐使用

11、构建镜像一般都是基于基础镜像来构建,比如:ubuntu 或 fedora (当然也可以从零构建新的镜像)

12、使用docker commit命令构建镜像

12-1、以交互式的方式启动ubuntu的镜像:docker run -it ubuntu /bin/bash

12-2、安装一个apache2服务:

apt-get -yqq updateapt-get -y install apache2

12-3、检查是否安装成功:whereis apache2

12-4、退出容器:exit

12-5、提交容器为新的镜像,如下:

docker commit -m="这是一个我的新镜像" --author="我是作者" 容器ID 用户名/仓库名:tag标签

12-6、查看创建的镜像:docker images

12-7、启动这个镜像:docker run -dit luoycode/luoywork:webserver /bin/bash

13、使用Dockerfile构建镜像

13-1、创建一个目录来保存Dockerfile,如:nginx_web:mkdir nginx_web

说明:该目录是当前Dockerfile的构建环境,构建镜像上下文和该上下文的文件和目录一起上传到Docker守护进程

13-2、创建一个简单的Dockerfile:touch Dockerfile

Docker内容如下:

#基于ubuntu创建的镜像
FROM ubuntu
#作者说明
MAINTAINER luoy "luoycode@163.com"
#更新APT仓库
RUN apt-get update
#下载安装nginx
RUN apt-get install -y nginx
#创建index.html文件并输出简单的文本到html界面
RUN echo 'Hi , I am in your contaniner' \>/usr/share/nginx/html/index.html
#此镜像需开放的端口,可指定多个,但不是指已经开放,需要启动容器时,指定端口,如果随机指定端口,则会映射到此端口
EXPOSE 80

Dockerfile 基于DSL语法来构建镜像,每一步RUN构建过程都会提交为镜像,产生一个镜像ID

RUN 指令在shell里会使用命令包装器/bin/sh -c执行,如果需要在不支持shell的机器上运行RUN,可以使用 exec格式的RUN命令,如下代码

RUN ["apt-get","install"," -y","nginx"]

13-3、基于Dockerfile构建镜像:

#进入nginx_web目录
cd /data/nginx_web#执行构建命令,-t 设置了仓库和名称,luocode为用户名,nginx_web为镜像名,v1为标签
#也可不指定标签,默认Docker会自动为镜像设置一个latest标签
#构建命令最后记得加个点
docker build -t="luoycode/nginx_web:v1" .

补充说明:可获取git仓库中的Dockerfile文件进行构建:docker build -t="luoycode/nginx_web:v1" \ git@github.com:dockerporject/nginx_web,前提是在nginx_web存在这个Dockerfile

13-4、构建成功后,查看镜像:docker images

13-4、构建错误时,可通过最后构建成功的镜像ID,运行并进入该镜像ID,执行错误指令排查具体错误即可。

14、Dockerfile的构建缓存

14-1、说明:dockerfile构建每一步都会提交为镜像,docker build执行成功的步骤,再次构建时不会再执行,如果需要每次构建时都需要重新执行所有的Dockerfile指令使用如下命令:

#--no-cache 每次都会重新构建所有步骤
docker build --no-cache -t="luoycode/nginx_web:v1"

14-2、构建缓存的Dockerfile模版,便于在其他dockerfile文件中统一引用

14-3、查看镜像详细的构建信息:docker history 镜像ID

说明:可看到该镜像构建的每一层镜像ID、指令、大小、创建时间等信息

15、运行新创建的镜像,并指定端口:

#启动镜像容器,并将宿主机的8080映射到docker容器的80端口
#如不指定宿主机端口,则会随机49153~65535的端口映射到容器端口
docker run -d -p 8080:80 luoycode/nginx_web:v1 /bin/bash#指定宿主机IP绑定固定端口
docker run -d -p 127.0.0.1:8080:80 luoycode/nginx_web:v1 /bin/bash#指定宿主机IP绑定随机端口
docker run -d -p 127.0.0.1::80 luoycode/nginx_web:v1 /bin/bash#通过大写 -P 来自动开放Dockerfile配置的端口
#自动开放dockerfile中配置的端口,并随机映射到宿主机的端口
docker run -d -P luoycode/nginx_web:v1 /bin/bash

16、查看docker端口映射信息:docker port 容器ID/名称

说明:容器的80端口被映射到了主机的32768端口

17、Dockerfile指令介绍

#FROM:引入基础镜像,比如:centos、ubuntu等等
FROM ubuntu#MAINTAINER:说明作者信息
MAINTAINER luoy "luoycode@163.com"#RUN:更新apt仓库,RUN用于运行命令
RUN apt-get update#下载并安装nginx
RUN apt-get install -y nginx
RUN echo 'Hi , I am in your contaniner' \>/usr/share/nginx/html/index.html#USER:允许运行的用户,不指定默认为root,指定的用户必须在系统中存在,docker run 通过-u来临时指定
USER root#ADD
#1、添加当前构建目录下的文件或目录到镜像内,会将宿主机构建目录下到test.sh添加到容器的/data/目录下,源文件只能是构建目录内的文件或者URL地址
#2、目标地址以/结尾则复制到该目录,不以/结果则认为是文件
#3、当源文件为gzip、bzip2、xz压缩文件时,目标地址为目录,docker会自动解压压缩文件
ADD test.sh /data/#COPY:复制当前构建目录下的db目录下的所有文件到镜像内的/data/目录下
#和ADD区别就是不会做文件提取和解压,只进行复制
COPY db/ /data/#ONBUILD:构建触发器,在构建时,会将当前构建目录下所有文件复制到/data/onbuildFile目录下
ONBUILD ADD /data/docker/nginx_web/ /data/onbuildFile/#VOLUME:容器添加卷,会在/var/lib/docker/volumes 创建一个匿名目录空间,与docker run -v有很大区别,-v是指定容器目录挂载到宿主机的目录,以达到访问宿主机目录的目的
#VOLUME ["/data"]#ENV:环境变量,在该镜像所有容器中都可以访问,通过env来查看,docker run通过-e 来临时传递环境变量,只在容器运行时有效
ENV WORK_DIR /usr/sbin#WORKDIR:设置工作目录,以下nginx命令将在/usr/sbin下来执行,docker run通过-w来覆盖
WORKDIR $WORK_DIR#ENTRYPOINT:设置镜像启动时执行的命令,docker run通过 --entrypoint才能覆盖此指令
ENTRYPOINT ["nginx","-g","daemon off;"]#CMD:设置镜像启动时执行的命令,docker run 后跟指令时,会覆盖该指令
#CMD ["/bin/bash"]#EXPOSE:设置该镜像需开放的端口,docker run时,随机分配会映射到此端口
EXPOSE 80

18、将镜像推送到Docker Hub

18-1、确保在docker hub上已经创建了对应的仓库,仓库名称和本地仓库名称必须一致

18-2、上传到远程仓库:docker push 用户名/仓库名:标签

#将本地的luoycode/nginx_web:v111镜像推送到docker hub
docker push luoycode/nginx_web:v111

19、删除本地镜像:docker rmi 镜像名/镜像ID

docker rmi 镜像1 镜像2

20、创建自己的Docker Registry

说明:在自己的云服务或本地服务器管理docker仓库

20-1、安装&运行基于docker的Registry:docker run -d -p 5000:5000 registry

20-2、查询本地需上传的镜像ID

20-2、将上传镜像做标记到本地的Registry中:docker tag 镜像ID 服务器IP:端口/用户名/仓库名:标签

20-3、上传做标记的镜像:docker push ip:端口/用户名/仓库名:标签

docker push 172.18.0.1:5000/luoycode/nginx_web:v111

20-3、运行本地Registry中的仓库:docker run -d 服务器IP:端口/用户名/仓库名:标签

下一篇:《Dokcer的使用》(四) 实战之Nginx+静态网站部署

《Dokcer的使用》(三) 镜像仓库和镜像相关推荐

  1. Docker-查看镜像仓库中镜像的版本信息

    通过docker安装某个软件时,经常需要选择版本号否则默认安装lastest,docker search 只能查询出docker仓库中是否存在该软件的镜像并不能查看到版本号,如果想要查看某docker ...

  2. 企业必会技能Docker容器、国内镜像源、web界面管理、配置镜像仓库、镜像加速器、超细详解

    文章目录 国内镜像源 拉取 启动MySQL web界面管理docker容器 点击查看主机 配置阿里云的镜像仓库 登录镜像仓库 Docker 镜像加速器 国内镜像源 使用国内镜像:进入网站:https: ...

  3. docker看远程仓库镜像_查看Docker镜像仓库中镜像的所有标签

    用 Docker 的人都知道,我们在查询远端镜像仓库中镜像的时候,在命令行只能看到镜像名,说明等信息,而看不到标签.因此,如果我想要查看镜像有哪些标签,就只能通过网页的方式查看,比如通过 https: ...

  4. 查看docker镜像仓库中镜像版本信息

    背景 现在有很多软件服务都提供了docker镜像进行快速搭建,我们经常需要使用某特定版本,这里就涉及到了docker镜像的版本,那如何查看docker镜像版本呢? 查看方法 如果想要查看某docker ...

  5. Maven Docker几个插件打包+推送到镜像仓库或者私服(Harbor)的方法

    从镜像仓库的两种维度来看: 第一:开如开启了docker的远程登录端口2375, 可以直接登录到远程的docker, 直接使用远程docker服务器build后,镜像就在远程服务器了 第二:不使用do ...

  6. Docker搭建私有镜像仓库

    一. 常见镜像仓库服务 镜像仓库(Docker Registry)有公共的和私有的两种形式: 公共仓库:例如Docker官方的Docker Hub,国内也有一些云服务商提供类似于Docker Hub的 ...

  7. 【云原生】迁移Harbor镜像仓库到阿里云容器仓库ACR

    目录 一.摘要 二.前言 三.配置阿里云ACR 1.创建用户AK(访问控制) 2.创建个人实例(个人版) 四.配置Harbor仓库 1.新建目标规则 2.新建复制规则 五.执行迁移 六.验证 一.摘要 ...

  8. 【Docker】registry部署docker私有镜像仓库

    Docker Hub作为Docker默认官方公共镜像仓库,但是如果我们不想使用怎么办,第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库,第二就是如我们自己搭建一个自己的私有镜像仓库,官方也提供do ...

  9. Docker镜像仓库清理的探索之路

    用友云开发者中心是基于Docker容器进行微服务架构应用的落地与管理.相信各位同学在使用的过程中,会发现随着Docker镜像的增多,占用磁盘空间也约来越多.这时我们需要清理私有镜像仓库中不需要的镜像. ...

最新文章

  1. php中的网页漂浮代码,JavaScript_Javascript实现带关闭按钮的网页漂浮广告代码,复制代码 代码如下: html - phpStudy...
  2. Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路
  3. Linux更改终端的用户名和主机名的颜色
  4. php flink,plus/flink.php · 辉辉菜/三强源码 - Gitee.com
  5. Python:课程期待
  6. JS——阶乘的三种做法(正向逆向递归)
  7. pgsql数据库默认配置事务类型_postgreSql最佳配置详解(connection 申请、回收策略)...
  8. SharedPreferences的使用,android
  9. php中的try语句,PHP Try-catch 语句使用技巧
  10. echarts自动排序_百度echarts 排序问题
  11. echarts:x轴文字竖排显示
  12. 实验记录 | 6/29
  13. 华为手机怎么恢复微信聊天记录(2022最新版)
  14. 99、汽车库、修车库的安全疏散要求
  15. 增加BUG的测试版本字段
  16. 谷歌学术 rss_如何自动将博客RSS供稿发布到Google plus页面?
  17. 厦门故事(三):枫叶随风飘落,重重地摔在了地面上
  18. 【山头斜照却相迎】初入计算机学习计划推荐
  19. PyCharm导入库
  20. 苹果商城怎么调成中文_苹果手机没声音?苹果专业维修帮你

热门文章

  1. 薪资真相:程序员薪资被医生碾压!
  2. ctfshow pwn——PWN签到题、pwn02
  3. 最新会议:第二届绿色建筑、土木工程与智慧城市国际会议(GBCESC 2023)
  4. 薄膜声学超材料模态叠加法Matlab实现(Zhang Yuguang论文复现)
  5. 项目Alpha冲刺(团队)-测试篇
  6. python如何调用dll库中的函数_Python调用dll库接口-ctypes方法
  7. 小学5年级计算机考试作文,小学五年级期中考试的作文4篇
  8. 玩游戏玩久了手机发烫卡顿怎么办?LDR6020方案助力手机散热器 实现快速降温
  9. [Spark应用依赖jar包的添加解决方案]
  10. 分布式Redis集群--Cluster架构