成都网站建设设计

将想法与焦点和您一起共享

docker镜像使用方法-创新互联

Docker镜像

镜像是Docker三个核心概念中最重要的,运行流程为
Docker运行——本地是否存在对应镜像——若不存在Docker尝试从默认镜像仓库下载,用户也可以自定义配置镜像仓库

创新互联公司长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为伊川企业提供专业的网站设计、网站建设伊川网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

获取镜像

格式为docker [image] pull NAME[:TAG]
其中NAME是镜像仓库名称,TAG是镜像的标签(往往用来代表版本),通常情况下描述一个镜像需要包括“名称+标签”信息
测试获取一个ubuntu 18.04的系统

[root@docker01 ~]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
423ae2b273f4: Downloading  15.25MB/26.69MB
de83a2304fa1: Download complete 
f9a83bce3af0: Download complete 
423ae2b273f4: Pull complete 
de83a2304fa1: Pull complete 
f9a83bce3af0: Pull complete 
b6b53be908de: Pull complete 
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

如果不定制TAG,则默认会选择latest标签

[root@docker01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

注:一般来说,镜像latest标签是会跟着镜像内容的最新版本而变化,内容是不稳定的,因此从稳定性考虑,不要在生产环境使用latest标签。
使用官方的Docker Hub前缀可以忽略,补全就是

docker pull registry.hub.docker.com/ubuntu:18.04

使用非官方如网易丰巢

docker pull hub.c.163.com/public/ubuntu:18.04

测试运行一个bash应用

[root@docker01 ~]# docker run -it centos:latest bash
[root@894350cbee44 /]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 
[root@894350cbee44 /]# echo "hello world"
hello world
[root@894350cbee44 /]# exit

查看镜像信息

列出镜像

[root@docker01 ~]# docker images
REPOSITORY      TAG         IMAGE ID       CREATED       SIZE
ubuntu        18.04        72300a873c2c     11 days ago     64.2MB
centos        latest        470671670cac     6 weeks ago     237MB

从以上信息可以看出
来自哪个仓库——centos
镜像标签——latest
镜像ID
创建时间
镜像大小

添加镜像标签

为方便后续工作中使用特点镜像,为本地镜像添加一个新的标签。docker tag命令起的是链接作用,链接后ID号是一样的。

[root@docker01 ~]# docker tag centos:latest mycentos:latest
[root@docker01 ~]# docker images
REPOSITORY      TAG         IMAGE ID       CREATED       SIZE
ubuntu        18.04        72300a873c2c     11 days ago     64.2MB
centos        latest        470671670cac     6 weeks ago     237MB
mycentos       latest        470671670cac     6 weeks ago     237MB

查看镜像详细信息

[root@docker01 ~]# docker  inspect centos:latest

查看镜像历史,过长命令会被截断,--no-trunc选项输出完整命令

[root@docker01 ~]# docker history centos:latest
IMAGE        CREATED       CREATED BY                    SIZE         COMMENT
470671670cac     6 weeks ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]       0B          
      6 weeks ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…  0B          
      7 weeks ago     /bin/sh -c #(nop) ADD file:aa54047c80ba30064…  237MB

搜寻镜像

搜索官方提供带nginx关键字的镜像

[root@docker01 ~]# docker search --filter=is-official=true nginx
NAME         DESCRIPTION         STARS        OFFICIAL       AUTOMATED
nginx        Official build of Nginx.  12745        [OK]

搜索收藏数超过4个的关键词为tensorflow的镜像

[root@docker01 ~]# docker search --filter=stars=4 tensorflow
NAME               DESCRIPTION                   STARS        OFFICIAL       AUTOMATED
tensorflow/tensorflow       Official Docker images for the machine learn…  1631                   
jupyter/tensorflow-notebook    Jupyter Notebook Scientific Python Stack w/ …  201                   
tensorflow/serving        Official images for TensorFlow Serving (http…  77                    
xblaster/tensorflow-jupyter    Dockerized Jupyter with tensorflow        52                    [OK]

包含镜像名字、描述、收藏数、是否官方创建等

删除镜像

使用标签删除镜像

[root@docker01 ~]# docker rmi mycentos:latest
Untagged: mycentos:latest

强制删除镜像,即使有容器依赖他

[root@docker01 ~]# docker rmi -f mycentos:latest
Untagged: mycentos:latest

使用镜像ID来删除镜像

[root@docker01 ~]# docker rmi 72300a873c2c

当有镜像创建的容器存在时,镜像文件默认是无法被删除的

[root@docker01 ~]# docker run myubuntu:18.04 echo 'hello~'
hello~
[root@docker01 ~]# docker ps -a
CONTAINER ID     IMAGE        COMMAND       CREATED        STATUS              PORTS        NAMES
8029f804939ff     centos:latest    "echo hello~"    About a minute ago  Exited (0) About a minute ago            compassionate_wescoff
[root@docker01 ~]# docker rmi centos:latest
Error response from daemon: conflict: unable to remove repository reference "centos:latest" (must force) - container 029f804939ff is using its referenced image 470671670cac

此时可以用-f参数强制删除,但通常不推荐这么做,正确做法为
删除容器

[root@docker01 ~]# docker rm 029f804939ff
029f804939ff

删除镜像

[root@docker01 ~]# docker rmi 470671670cac
Untagged: centos:latest
Untagged: centos@sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Deleted: sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee
Deleted: sha256:0683de2821778aa9546bf3d3e6944df779daba1582631b7ea3517bb36f9e4007

清理镜像

使用docker一段时间后,系统可能会遗留一些临时镜像文件,和一些没有被使用的镜像
自动清理临时的遗留镜像文件层

[root@docker01 ~]# docker image prune -f
Total reclaimed space: 0B

创建镜像

创建镜像的方法主要有3种:基于已有的镜像容器创建、基于本地模版导入、基于Dockerfile创建。
1、基于已有容器创建 docker [container] commit 命令
常用参数
-a,--author=" "    #作者信息
-c,--change=" "   #提交的时候执行Dockerfile命令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等
-m,--message=" " #提交信息
-p,--pause=true   #提交时暂停容器运行
启动一个镜像,在里面创建一个文件

[root@docker01 ~]# docker run -it ubuntu:18.04 /bin/bash
root@734364a15c55:/# touch test
root@734364a15c55:/# exit

记住容器的ID号为734364a15c55,与原来的镜像相比已经发生了改变,这时提交一个新的镜像

[root@docker01 ~]# docker commit -m "add a file" -a "tcw" 734364a15c55 testfile:0.1
sha256:f14661e2c5eeaf03d14ce4ec0d9e963daeddc3c93a85de959029acf0b1278b4d

此时返回了新创建的镜像ID信息:sha256:f14661e2c5eeaf03d14ce4ec0d9e963daeddc3c93a85de959029acf0b1278b4d

[root@docker01 ~]# docker images
REPOSITORY      TAG         IMAGE ID       CREATED       SIZE
testfile       0.1         f14661e2c5ee     5 minutes ago    64.2MB
myubuntu       18.04        72300a873c2c     11 days ago     64.2MB
ubuntu        18.04        72300a873c2c     11 days ago     64.2MB

2、基于本地模版导入
我们也可以直接从一个操作系统模版文件导入一个镜像 docker [image] import [OPTIONS] file|URL| -[REPOSITORY [:TAG]]
这里直接使用OpenVZ提供的模版来创建
https://wiki.openvz.org/Download/template/precreated

[root@docker01 ~]# wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
[root@docker01 ~]# cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
[root@docker01 oglab]# docker images
REPOSITORY      TAG         IMAGE ID       CREATED       SIZE
ubuntu        14.04        8fc8ce69135d     36 seconds ago    215MB

3、基于Dockerfile创建
基于Dockerfile是最常见的方式,Dockerfile是一个文本文件,利用给的的指令描述基于某个父镜像创建新镜像的过程。
建一个python的镜像

[root@docker01 ~]# vim Dockerfile 

   FROM debian:stretch-slim
   LABEL version="1.0" maintainer="docker user "
   RUN apt-get update && \
   apt-get install -y python3 && \
   apt-get clean && \
   rm -rf /var/lib/apt/lists/*
[root@docker01 ~]# docker build . -t python:3

存入和载入镜像

Docker镜像的save和load命令docker [image] save | docker [image] load来存出和载入镜像。
1、存入镜像

[root@docker01 ~]# docker save -o ubuntu_18.04.tar ubuntu:18.04

2、载入镜像

[root@docker01 ~]# docker load -i ubuntu_18.04.tar 
Loaded image: ubuntu:18.04
[root@docker01 ~]# docker load < ubuntu_18.04.tar
Loaded image: ubuntu:18.04

上传镜像

Docker镜像的push命令,docker [image] push上传到镜像仓库,默认上传到Docker Hub官方仓库

docker tag testfile:0.1 user/test:latest
[root@docker01 ~]# docker push user/test:latest 
The push refers to repository [docker.io/user/test]

user是自己的用户名,第一次上传时会输入登录信息,之后登录就会保存在本地的~/.docker目录下

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:docker镜像使用方法-创新互联
分享链接:http://chengdu.cdxwcx.cn/article/cedcsc.html