基础概念
开发环境deepin linux 15.11。安装docker之后,执行命令:
sudo usermod -aG docker $USER_NAME
让docker和当前用户在一个组中,可以每次不用执行sudo命令了。
三个核心的概念:
- 镜像:类似虚拟机的镜像,一个只读模板。比如linux镜像等
- 容器:轻量级的沙箱,基于容器创建的一个运行实例
- 仓库:docker存放镜像文件的场所
容器是镜像的一个运行时的状态,镜像是静态的,容器是动态的。
docker的很多思想参考了git和github,可以 对比着来理解
Docker镜像
docker容器运行时,需要从本地获取对应的镜像文件。若果没有,则去默认仓库下载。我们可以自定义仓库的位置。
docker获取对应的镜像文件:
docker [image] pull NAME[:TAG]
image
是镜像的名字,NAME
是在远程仓库中镜像的名字,TAG
是对应的标签,类似git上的tag。不指定tag会默认拉去latest
版本,在服务端不建议这么做。更加详细的pull
命令可以参考有关的手册。
使用images
命令可以查看对应的docker
信息。一个实例:
docker pull zookeeper
docker images
之后终端显示:
REPOSITORY
:镜像所在仓库TAG
:对应的TAG
号,类似git中的tag
IMAGE ID
:镜像的唯一标志,就像我们git每次提交都会有对应的一个编CREATED
:镜像的最后更新时间SIZE
:镜像的大小
我们可以使用tag
命令给我们本地的镜像打一个tag
,比如:
docker tag zookeeper:latest myzookeeper;latest
使用inspect
查看详细的信息,比如:
docker inspect zookeeper:latest
docker镜像由多个层组成,可以使用history
命令查看层的信息,比如:
docker history zookeeper:lastest
使用search
命令搜索镜像,比如:
docker search zookeeper
具体参数参考手册
使用rmi
或者image rm
命令删除镜像,比如:
docker rmi zookeeper:latest
docker image rm zookeeper:latest
后者tag
号可以替换成id
号
使用prune
命令清理遗留的临时镜像文件,比如:
docker prune
基于已有的容器创建,基本的命令格式是:
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
比如,执行命令:
docker [container] commit -m "create container example" -a "erick" zookeeper:latest myZookeeper:0.1
也可以使用模板文件导入镜像,比如:
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
使用Dockerfile可以基于某个父镜像创建新镜像。比如:
FROM debian:stretch-slim
LABEL version="1.0" maintainer="docker user <docker_user@github>"
RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean &&
rm -rf /var/lib/apt/lists/*
可以使用save
和load
命令导出和加载镜像。
docker save -o ubuntu_18.04.tar ubuntu:18.04 # 导出镜像
docker load -i ubuntu_18.04.tar # 加载镜像到本地的docker
docker loac < ubuntu_18.04.tar # 同上
可以使用docker push
命令上传到指定仓库,具体可以参考手册。
总结
docker的镜像是一个静态的文件,而且有不同的版本,这就类似于git的不同版本那样,docker的镜像是docker的基础,需要理清基本概念。