docker是一个容器。docker之镜像/仓库/容器(去仓库[hub.docker.com]把镜像[image]拉到本地运行起来)
镜像就是一系列文件(只读);同一个镜像可以用于生成多个容器(可写)
docker在运行一个程序之前会先看,本地有没有一个要运行的容器的image。如果没有的话,他回去远端的registry去下载。
host正在使用的电脑
镜像是可以从远端拉取,或者我们本地构建的文件的打包。
容器是镜像的运行实体
deamon用来接受用户命令
docker的官方仓库是dockerhub。国内还有一些私有的仓库,如时速云,aliyun,daocloud
registry
操作:
docker search(可以指定镜像的某一个tag来下载,没有指定的话,会看到提示,使用默认的tag:latest来下载)
docker pull. (下载的过程中我们发现他是在一层一层下载,下载完成之后,分层解压缩)
docker run (运行)
docker tag imageA imageB (重新标记一个标签创建一个新的镜像,此时用命令docker images可以看到有一个新的imageB产生)
docker push imageB (push一个镜像到远端仓库[默认的远端仓库为dockerhub],此处会提示需要权限,通过docker login获取权限)
docker-compose
例如:本地命令行运行docker run nginx运行的结果如下:
$ docker run nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
27833a3ba0a5: Pull complete
ea005e36e544: Pull complete
d172c7f0578d: Pull complete
Digest: sha256:e71b1bf4281f25533cf15e6e5f9be4dac74d2328152edf7ecde23abc54e16c1c
Status: Downloaded newer image for nginx:latest
运行docker images 可以看到本地已经有的images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 27a188018e18 6 days ago 109MB
运行docker ps 查看容器内运行的程序
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
⚠️注意:docker在容器内运行的操作都是没有被保存下来的
命令小结:
docker commit用于创建一个新的镜像
docker之镜像的创建--Dockerfile (语法):
docker中镜像是分层存储的,dockerfile的每一行对应一个id
imags分层实现了镜像资源的共享,降低了存储压力。image只是可读的,在container中的东西才是可写的,但是在container中的改动是不会被储存的。
那么问题来了,对于需要持久化存储的一些东西(譬如容器间共用的一些数据)可否实现呢