目录
一、前言
二、什么是Docker镜像
Docker镜像是Docker容器的基础,它是一个轻量级、可移植、自包含的文件,其中包含了运行应用程序所需要的所有代码、库、依赖项、配置文件和其他资源。Docker镜像提供了一种方便的方式,可以快速地部署和运行应用程序,而无需担心环境配置、应用程序依赖项和其他问题。Docker镜像可以在Docker注册表中存储和共享,这样其他人就可以使用它们来部署他们自己的应用程序。
三、列出镜像列表
1、查看镜像列表
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerfile latest ea0ac9dccdb8 16 hours ago 65.8MB
redis <none> caaeda72bf8f 5 days ago 27.8MB
postgres 9.4 ccd088148f5d 13 days ago 233MB
ubuntu latest 113a43faa138 2 weeks ago 81.2MB
nginx latest cd5239a0906a 2 weeks ago 109MB
r-base latest 3cb19d246267
各项说明:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i ubuntu:15.10 /bin/bash
root@d482d4e4d741:/#
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
2、获取一个新的镜像:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
a3ed95caeb02: Pull complete
0d8710fc57fd: Pull complete
5037c5cd623d: Pull complete
83b53423b49f: Pull complete
e9e8bd3b94ab: Pull complete
7db00e6b6e5e: Pull complete
Digest: sha256:403105e61e2d540187da20d837b6a6e92efc3eb4337da9c04c191fb5e28c44dc
Status: Downloaded newer image for ubuntu:13.10
3、查看镜像:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 1777 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 41
centos/httpd 18 [OK]
NAME:镜像仓库源的名称
4、拖取镜像
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
3d77ce4481b1: Pull complete
73674f4d9403: Pull complete
d266646f40bd: Pull complete
ce7b0dda0c9f: Pull complete
01729050d692: Pull complete
014246127c67: Pull complete
7cd2e04cf570: Pull complete
Digest: sha256:d36c131842eca97725c73146009ad0e29e99a9069eec742f079b6f0298950dcf
Status: Downloaded newer image for httpd:latest
下载完成后,使用这个镜像:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run httpd
5、创建镜像
6、更新镜像
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
root@fc95226b1483:/#apt-get update
此时ID为fc95226b1483的容器,是按我们需求更改的容器。我们可以通过命令docker commit来提交容器副本
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker commit -m "has update" -a="leiyuxing" fc95226b1483 leiyuxing/ubuntu:v2
sha256:b1375bd9d36449320dba9912127a4c6040b2be81354e6d7c6bb895d79af51097
各个参数说明:
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/ubuntu v2 b1375bd9d364
使用我们的新镜像leiyuxing/ubuntu来启动一个容器
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -t -i leiyuxing/ubuntu:v2 /bin/bash
root@3e077615e849:/#
7、构建镜像
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ vim Dockerfile
# our base image
FROM alpine:3.5
# Install python and pip
RUN apk add --update py2-pip
# upgrade pip
RUN pip install --upgrade pip
# install Python modules needed by the Python app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt
# copy files required for the app to run
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/
# tell the port number the container should expose
EXPOSE 5000
CMD ["python", "/usr/src/app/app.py"]
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker build -t leiyuxing/alpine:3.5 .
Sending build context to Docker daemon 15.36kB
Step 1/9 : FROM alpine:3.5
---> 6c6084ed97e5
Step 2/9 : RUN apk add --update py2-pip
---> Using cache
---> bbc79f3d4f60
Step 3/9 : RUN pip install --upgrade pip
---> Using cache
---> 82a3c366b985
参数说明:
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/alpine 3.5 ea0ac9dccdb8 17 hours ago 65.8MB
leiyuxingdeMacBook-Pro:flask-app leiyuxing$ docker run -p 8888:5000 --name alpine leiyuxing/alpine:3.5
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [22/Jun/2018 03:33:55] "GET / HTTP/1.1" 200 -
前往http://localhost:8888,你的应用程序应该是活的。
8、设置镜像标签
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker tag ea0ac9dccdb8 leiyuxing/alpine:picture
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leiyuxing/alpine 3.5 ea0ac9dccdb8 18 hours ago 65.8MB
leiyuxing/alpine picture ea0ac9dccdb8 18 hours ago
四、Docker镜像使用遇到的问题及处理
Docker镜像使用过程中可能会遇到以下问题:
-
找不到镜像:在使用镜像时如果出现找不到镜像的错误,可能是因为该镜像不存在或者没有在本地下载。解决方法是先检查镜像名称是否正确,然后执行docker pull命令下载镜像。
-
镜像下载速度慢:有时候在下载镜像的过程中会遇到下载速度慢的问题,这可能是因为网络问题或者镜像所在的服务器距离较远。解决方法是切换到下载速度快的镜像源,并使用加速器等工具。
-
镜像启动失败:在启动镜像时可能会出现启动失败的情况,这可能是因为镜像中的应用程序出现了错误或者镜像本身存在问题。解决方法是检查应用程序的配置和日志,或者重新下载镜像。
-
镜像版本不兼容:如果在使用镜像时出现版本不兼容的问题,可能是因为镜像的版本与应用程序或其他镜像的版本不兼容。解决方法是选择合适的镜像版本或者更新应用程序或相关镜像版本。
-
镜像安全问题:有时候在使用镜像时会出现安全问题,例如镜像中的应用程序存在漏洞或者镜像来源不可信。解决方法是使用安全的镜像源,检查镜像的安全性,并及时更新镜像安全补丁。
总的来说,在使用Docker镜像时应该注意镜像的选择和安全性,及时更新和维护镜像,避免出现问题。
五、Docker镜像使用注意点
-
避免使用root用户运行容器,应该使用非特权用户。
-
避免在容器中保存敏感信息,如密码、密钥等。
-
确保镜像中只包含必要的文件和软件,减小镜像大小。
-
使用版本控制系统管理Dockerfile和镜像,方便管理和回滚。
-
为镜像添加标签和版本号,方便管理和追踪镜像的使用情况。
-
定期更新镜像,确保镜像中的组件和依赖都是最新的。
-
尽可能使用官方镜像,或者由可靠的第三方提供的镜像。
-
在使用私有镜像仓库时,确保有适当的访问控制和权限管理措施。