当运行容器时,使用的镜像如果在本地中不存在,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 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