Skip to content

Docker 镜像使用

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

列出镜像列表

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

shell
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 来进行登录

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

简单就是美