Docker 镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。 下面我们来学习 管理和使用本地的镜像

列出镜像列表

我们可以使用 docker images 来列出本地主机上的镜像。

docker images
REPOSITORY                           TAG                         IMAGE ID       CREATED         SIZE
adminer                              latest                      7707fd9b142f   4 days ago      89.8MB
mysql                                latest                      0627ec6901db   2 weeks ago     556MB
localhost:5000/mysql                 latest                      0627ec6901db   2 weeks ago     556MB
registry                             2                           1fd8e1b0bb7e   2 weeks ago     26.2MB
registry                             latest                      1fd8e1b0bb7e   2 weeks ago     26.2MB

各个选项说明:

REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 registry 仓库源里,有 2, latest 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为2的registry系统镜像来运行容器时,命令如下:

docker run -t -i registry:2 sh

获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

docker pull redis

Using default tag: latest
latest: Pulling from library/redis
f7ec5a41d630: Already exists
a36224ca8bbd: Pull complete
7630ad34dcb2: Pull complete
e74b2f747260: Pull complete
ebc61c7bf222: Pull complete
1aafd9c07208: Pull complete
Digest: sha256:eff56acc5fc7b909183da93236ba09d3b8cb7d6db31d5b25e9a46dac9b5e699b
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 nginx 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 nginx 来寻找适合我们的镜像。

docker search nginx
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                              Official build of Nginx.                        14814     [OK]
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   2023                 [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   813                  [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   184

删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world

docker commit 把容器变成镜像

容器在运行的时候我们通过 docker exec -it containerId bash 可以进入到容器里面。 这个时候我们可以对容器进行一些更改。更改后我们就可以用commit来创建一个新的镜像

 docker commit -m="description" -a="malema" ee34363e59ff malema/mysql:v2

但是我们程序开发正常都是通过dockerfile的方式来构建一个新的镜像的

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

PS D:\registry> docker tag mysql:latest registry.malema.net/mysql:latest

推送镜像

docker hub我们只能推送一个免费的的私有镜像,所以我们通常是需要自己的镜像仓库, 在推送之前我们得用 docker tag 把自己的镜像 tag变成带地址的名字。

在推送之前通常我们也需要用 docker login server -u username -p password 来进行登录

PS D:\registry> docker push registry.malema.net/mysql:latest
最近更新的
...