《Dokcer的使用》(三) 镜像仓库和镜像

10 篇文章 0 订阅

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 update

apt-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+静态网站部署

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值