Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。
例如, 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:
- [root@openEuler-node1 ~]# docker pull ubuntu:18.04
- 18.04: Pulling from library/ubuntu
- 7c457f213c76: Pull complete
- Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
- Status: Downloaded newer image for ubuntu:18.04
如果没有写 “名称+标签“ 信息中的标签,会默认添加一个latest标签,表示这个仓库中最新的镜像
- [root@openEuler-node1 ~]# docker pull ubuntu
- Using default tag: latest #自动添加的一个标签,获取最新的版本
- latest: Pulling from library/ubuntu
- bccd10f490ab: Pull complete
- Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
- Status: Downloaded newer image for ubuntu:latest
- [root@openEuler-node1 ~]# docker pull hub.c.163.com/public/centos:6.5
- 6.5: Pulling from public/centos
- 96057de2d572: Pull complete
- a3ed95caeb02: Pull complete
- 8a1dcc3f76c2: Pull complete
- 8fe56c90e86a: Pull complete
- 43fc3558431f: Pull complete
- 5881bc109689: Pull complete
- Digest: sha256:92fd18cda0cbf63bb4b5ffd0c073a9d689d5b202e3b491cbc74488fff1c37d11
- Status: Downloaded newer image for hub.c.163.com/public/centos:6.5
images子命令主要支持如下选项:
docker tag ubuntu:latest myubuntu:latest
使用inspect命令查看详细信息
[root@openEuler-node1 ~]# docker inspect ubuntu:18.04
- [root@openEuler-node1 ~]# docker inspect -f {{".Architecture"}} ubuntu:18.04
- amd64
- [root@openEuler-node1 ~]# docker search busybox
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- busybox Busybox base image. 3223 [OK]
- radial/busyboxplus Full-chain, Internet enabled, busybox made f… 56 [OK]
- yauritux/busybox-curl Busybox with CURL 25
- arm32v7/busybox Busybox base image. 10
- arm64v8/busybox Busybox base image. 8
- odise/busybox-curl 4 [OK]
- s390x/busybox Busybox base image. 3
- .....
删除就rm -f参数是强制删除,可以基于ID或者标签删除
docker rmi busybox:latest
该方法主要是使用 docker [container] commit 命令
演示:
- [root@openEuler-node1 ~]# docker run -it ubuntu:18.04 bash
- root@35b863d7caf6:/# touch test
- root@35b863d7caf6:/# exit
此时容器与原镜像就不一致了,可以用commit来提交一个新的镜像
- [root@openEuler-node1 ~]# docker commit -m "Add a new file" -a "FYS" 35b863d7caf6 test:0.1
- sha256:e2c7a68ee5c90d3ae55b095ca7dc8ee4a9ca1a54e9722d6ef4b98c68d1c5e4cf
- [root@openEuler-node1 ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- test 0.1 e2c7a68ee5c9 23 seconds ago 63.2MB
[root@openEuler-node1 ~]# cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:lB.04
- [root@openEuler-node1 ~]# 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@openEuler-node1 ~]# docker build -t python:3 .
FROM: 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER: 镜像维护者的姓名和邮箱地址
RUN: 容器构建时需要运行的命令,如果在容器运行时需要运行其他命令,使用run指定
EXPOSE: 容器对外暴露的端口,mysql:3306、redis:6379
WORKDIR:创建容器后,进入容器使用pwd指令落脚点的目录,没有指定就是/,如centos是/,redis是/data
ENV: 用来构建镜像的过程中设置环境变量,"ENV 键 值"。 相当于成员变量
如:ENV MY_PATH /usr/mytest 这个环境变量可以在后续的任何RUN指令中使用;也可以在其它指令中直接使用这些环境变量,
ADD: 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包。 ADD = COPY+解压缩
COPY: 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME: 容器数据卷,用来数据保存和持久化工作
CMD: 指定一个容器启动时需要运行的命令。DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
也就是人工添加或文件中指定的CMD参数会把DockerFile里面的参数覆盖,只会有最后一个生效。.其中 使用 -f 命令可以指定dockerfile的路径。
- [root@openEuler-node1 ~]# docker save -o ubuntu_18.04.tar ubuntu:18.04
- [root@openEuler-node1 ~]# ll
- 总用量 64012
- -rw-------. 1 root root 974 2月 19 16:15 anaconda-ks.cfg
- -rw-r--r-- 1 root root 205 3月 11 16:47 dockerfile
- -rw------- 1 root root 65539072 3月 11 16:54 ubuntu_18.04.tar
- [root@openEuler-node1 ~]# docker load < ubuntu_18.04.tar
- [root@openEuler-node1 ~]# docker load -i ubuntu_18.04.tar
[root@openEuler-node1 ~]# docker push user/test:latest