虚拟化运维--Docker镜像(三)

一、镜像

  Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker运行容器前需要在本地存在对应的镜像,如果镜像不存在本地。Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

  1. 获取镜像
[root@localhost ~]# docker pull ubuntu:13.10

  1. 手动配置Docker加速器
      在国内访问 Docker 官方的镜像,一直以来速度都慢如蜗牛。为了快速访问 Docker 官方镜像都会配置三方加速器,目前常用三方加速器有: 网易 、 USTC 、 DaoCloud 、 阿里云 。
    配置Docker加速器的本质就是把Docker配置文件中的镜像下载地址由默认的Docker Hub地址变为国内镜像的加速地址。
    阿里开发者平台:
    https://dev.aliyun.com
    阿里开发者平台

Docker客户端版本大于1.10:

  1. 方法一
    国内加速站点
网易
http://hub-mirror.c.163.com
ustc 
https://docker.mirrors.ustc.edu.cn
中国科技大学
https://docker.mirrors.ustc.edu.cn

配置镜像:

[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# vi /etc/docker/daemon.json
# 添加以下内容
{
    "registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://docker.mirrors.ustc.edu.cn"]
}
# 重新加载配制:
[root@master ~]#  systemctl daemon-reload
# 重新启动服务:
[root@localhost ~]# systemctl restart docker

重新使用docker pull可以看到速度变快了。

  1. 方法二:
    systemctl enable docker启用服务后,
    编辑/etc/systemd/system/multi-user.target.wants/docker.service文件,
    找到 ExecStart= 这一行,在这行最后添加加速器地址–registry-mirror=<加速器地址>,如:
ExecStart=/usr/bin/dockerd --registry-mirror= https://pvhlb2dr.mirror.aliyuncs.com

重新加载配置并且重新启动。

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

二、镜像操作

  1. 搜索镜像
    我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
    例:我们需要一个httpd的镜像来作为我们的web服务
# 搜索httpd镜像
[root@localhost ~]#  docker search httpd
# 显示官方
docker search [包名]  --filter "is-official=true"
# 过滤热度
docker search [包名] --stars=3
  1. 拖取镜像
[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
8d691f585fa8: Pull complete 
8eb779d8bd44: Pull complete 
574add29ec5c: Pull complete 
9ccffbf4a714: Pull complete 
166e14b82905: Pull complete 
Digest: sha256:649bd29cc9284f06cf1a99726c4e747a83679e04eea3311b55022dd247026138
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest


docker pull mysql:tag
:tag 是你想从官方拉取的版本(例如5.5, 5.6, 5.7 或者latest )。如果省略 tag 则拉取当前最新的版本, 即latest。

  1. 删除镜像
    使用镜像的标签与ID删除镜像
  1. 停止所有的container,这样才能够删除其中的images:
[root@localhost ~]# docker stop $(docker ps -a -q)

  1. 使用标签删除镜像
    标签为:repository+tag
# 使用标签删除镜像
[root@localhost ~]# docker rmi docker.io/ubuntu:13.10

  1. 根据ID删除:
# 根据ID删除
[root@localhost ~]# docker rmi 05a3bd381fc2

因为没有停止运地的镜像:
可以使用-f强制删除:(不推荐使用,因为有依赖的话会产生一些遗留问题)

[root@localhost ~]# docker rmi -f 05a3bd381fc2

正确做法是,先删除依赖该镜像的所有容器,再来删除镜像。

  1. 删除所有镜像:
[root@localhost ~]# docker rmi $(docker images -q)

  1. 根据格式删除所有镜像:
    删除状态为 exited的镜像
[root@localhost ~]# docker rm $(docker ps -qf status=exited)

  1. 创建镜像
  1. 基于已有的镜像的容器创建
    用commit 命令创建镜像:
    该方法是使用docker commit命令,其命令格式为:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要参数选项包括:
-a ,–author=”” 作者信息
-m,–message=”” 提交信息
-p,–pause=true 提交时暂停容器运行
创建一个新容器命令:

# 创建一个新容器
[root@localhost ~]# docker run -it centos /bin/bash

添加一个文件:

[root@918afd3c90de /]# touch test
[root@918afd3c90de /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
# 退出centos容器
[root@918afd3c90de /]# exit
exit
[root@localhost ~]# 

commit命令来提交为一个新的镜像:

[root@localhost ~]# docker commit -m "添加一个新文件" -a "hjj" 918afd3c90de  test
sha256:9878c9eaafd5f8bf7baa286f35e0038f5d0ae7ebb7b7fd20ec039a7de61cc18d

命令中,指定了要提交的修改过的容器的ID、目标镜像仓库、镜像名。commit提交的知识创建容器的镜像与容器的当前状态之间的差异部分,很轻量。
查看新创建的本地镜像:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              9878c9eaafd5        43 seconds ago      220MB

  1. 基于本地模板导入
    也可以直接从一个操作系统模板文件导入一个镜像。
    centos安装wget:
[root@localhost ~]# yum -y install wget
[root@localhost ~]# wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz
--2019-10-24 21:26:07--  http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:10982406 (10M) [application/x-gzip]
正在保存至: “apache-tomcat-9.0.27.tar.gz”

100%[=================================================================================================================================================>] 10,982,406  4.78MB/s 用时 2.2s   

2019-10-24 21:26:10 (4.78 MB/s) - 已保存 “apache-tomcat-9.0.27.tar.gz” [10982406/10982406])

[root@localhost ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.27.tar.gz

-c参数为可以断点续传。
下载一个tomcat:9.0.27的模板压缩包后,可以使用以下命令导入:

[root@localhost ~]#  cat apache-tomcat-9.0.27.tar.gz | docker import - tomcat:9.0.27

import: - (自定义的名字)

# 查看镜像
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
tomcat              9.0.27              41e52d7345b6        About a minute ago   15.5MB

  1. 基于Dockerfile创建
    Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像。
    Docker 官方并不推荐使用 docker commit 的方法来构建镜像,而是推荐使用 Dockerfile 定义的文件和 docker build 命令来构建镜像。Dockerfile 使用基于 DSL 语法的指令来构建一个 Docker 镜像,之后使用 docker build命令基于改 Dockerfile 中的指令构建一个新的镜像。
    Dockerfile 内容:
# Version: 0.0.1
FROM ubuntu:latest
MAINTAINER Allan Ma
RUN yum update
RUN yum install -y nginx
RUN echo 'Hi, I am in your container' \
       >/usr/share/nginx/html/index.html
EXPOSE 80

1)基镜像为ubuntu
2)作者设置为我自己的名字
3) 容器安装nginx,并将Hi, I am in your container 添加到/usr/share/nginx/html/index.html。

  1. 运行镜像的容器监听 80端口
    运行,在有Dockerfile 的目录中执行构建:
docker build -t  houjianjun/nginx  . 

(镜像名称, 最后一个点代表 dockerfile 存在的目录 设置为在当前目录下,也可以单独 指定)。
等待运行完成 使用docker images查看本地的镜像, 就可看见自己创建的镜像了。
然后运行:
docker run -d --name nginx -p 80:80 houjianjun/nginx (镜像名称)

  Dockerfile 由一系列指令和参数组成。每条指令,如 FROM,都必须为大写字母,且后面跟随一个参数:FROM ubuntu:latest。Dockerfile 中的指令会按顺序从上到下执行,所以应该根据需要合理安排指令的顺序。

每条指令都会创建一个新的镜像层并对镜像进行提交。
Docker 大体上按照如下流程执行 Dockerfile 中的指令:
1)Docker 从基础镜像运行一个容器;
2)执行一条指令,对容器做出修改;
3)执行类似 docker commit 的操作,提交一个新的镜像层;
4)Docker 再基于刚提交的镜像运行一个新容器;
5)执行 Dockerfile 中的下一条指令,直到所有指令都执行完毕。

  1. 导出和载入镜像
  1. 导出镜像
    如果要导出镜像到本地文件,可以使用docker save命令。
    例:导出centos镜像为文件centos_test.tar
# 导出镜像
[root@localhost ~]# docker save -o centos_test.tar docker.io/centos:latest

  1. 载入镜像
# 载入镜像
[root@localhost ~]# docker load --input centos_test.tar

或:

# 载入镜像
[root@localhost ~]# docker load<centos_test.tar

  1. 上传镜像
      可以使用docker push命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录),命令为:
docker push NAME[:TAG]

用户在DockerHub网站注册后,即可上传自制的镜像。
例如:用户marquis上传本地的test:latest镜像,可以先添加新的标签marquis/test:latest,然后用docker push命令上传镜像:

[root@localhost ~]# docker tag test:latest marquis/test:latest
[root@localhost ~]# docker push marquis/test:latest

第一次上传必须登录验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容