使用Docker镜像
小提示
镜像是 Docker 三大核心概念中最重要的,自Docker诞生之日起镜像就是相关社区最为热门的关键词。
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试先从默认镜像仓库下载(默认使用 Docker Hub
公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。本章将围绕镜像这一核心概念介绍具体操作,包括如何使用 pull 命令从
Docker Hub
仓库中下载镜像到本地;如何查看本地已有的镜像信息和管理镜像标签;如何在远端仓库使用search命令进行搜索和过滤;如何删除镜像标签和镜像文件;如何创建用户定制的镜像并且保存为外部文件。最后,还将介绍如何往Docker
Hub仓库中推送自己的镜像。
1. 获取镜像
镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。
本节主要介绍 pecker镜像的 pull 子命令。可以使用 docker [image] pull 命令直接从 Docker Hub 镜像
源来下载镜像。 该命令的格式为 docker [image] pull NAME [ :TAG] 。其中, NAME 是镜像仓库名称
(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息) 。 通常情况下, 描述一个镜像需
要包括 “名称+标签“ 信息。
例如, 获取一个 mysql5.6 系统的基础镜像可以使用如下的命令:
docker pull mysql:5.6
2.列出本地镜像
2-1 : 本节主要介绍Docker镜像的ls、tag
和inspect
子命令。使用images
命令列出镜像
docker images -a
或
docker image ls
如下图:可以看出刚才下载的 mysql5.6 的镜像,但是你会发现下面还有一个镜像是 latest 版本的。那是因为对于Docker镜像来说,如果不显式指定TAG, 则默认会选择 latest 标签,这会下载仓库中最新版本的镜像。所以你懂得!!!下面那个是最新版本的镜像。
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆字段信息★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
- REPOSITORY:表示来自于哪个仓库,比如 ubuntu 表示ubuntu 系列的基础镜像;mysql表示…
- TAG:镜像的标答信息, 比如 5.6、latest 表示不同的版本信息。 标签只是标记, 并不能标识镜像内容;
- IMAGE_ID:镜像的ID(唯一标识镜像), 如果两个镜像的ID相同, 说明它们实际上指向了同一 个镜像, 只是具有不同标签名称而已;
- CREATED:创建时间, 说明镜像最后的更新时间;
- SIZE:镜像大小, 优秀的镜像往往体积都较小。
注意
一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化, 内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest 标记的镜像。
2-2 :使用inspect命令查看详细信息
使用docker [mage] inspect命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:
[root@instance-fwgv21ga ~]# docker inspect mysql:5.6
[
{
"Id": "sha256:b3983abaa3feff23bf58b849c7c2c0f84862e3a749a3181a0bdd6fcfa023f318",
"RepoTags": [
"mysql:5.6"
],
"RepoDigests": [
"mysql@sha256:411cb46904b646d1260e075505ee75d7457511412011eb03928e956eac1c0bf9"
],
"Parent": "",
"Comment": "",
"Created": "2019-10-17T04:50:19.73840748Z",
"Container": "809ae277b0d6f90236126d6c1545c22d0043d4f134d88c131d9e8908d6761ebd",
"ContainerConfig": {
"Hostname": "809ae277b0d6",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.7",
"MYSQL_MAJOR=5.6",
"MYSQL_VERSION=5.6.46-1debian9"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"mysqld\"]"
],
"ArgsEscaped": true,
"Image": "sha256:4b605b5514b3f9cd052e5e282184e04045d5dd2c1132bb329ba45a5f4d6e835c",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "18.06.1-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.7",
"MYSQL_MAJOR=5.6",
"MYSQL_VERSION=5.6.46-1debian9"
],
"Cmd": [
"mysqld"
],
"ArgsEscaped": true,
"Image": "sha256:4b605b5514b3f9cd052e5e282184e04045d5dd2c1132bb329ba45a5f4d6e835c",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 302446311,
"VirtualSize": 302446311,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/b89b4d5df2821b529666dafc462c617f155819006755667b603a9a9a77334089/diff:/var/lib/docker/overlay2/7a9bac6cb1b3ac718598c5c77f27934ea2f0a2e0d92b7ba54163beb14232efac/diff:/var/lib/docker/overlay2/2b653a91aaed77ee2d4fc211e0d5eed63762716f1249b3ec1365a2b1570d0911/diff:/var/lib/docker/overlay2/381f022807d2aeb7c7437a7e1ab2bb2eed1c651bb011aa6a7a64190fe30692ff/diff:/var/lib/docker/overlay2/335fceb49467165174dcee3326602e990fb126eb8ccde8dec92b6ad8428482bb/diff:/var/lib/docker/overlay2/657cf9df3ed65c93e167c70decc503939b4970a2f0169b2d28b88a145fab953b/diff:/var/lib/docker/overlay2/e44d7193ca8e53d83220d2225f4712532c7c26022688c725733ed691530889d0/diff:/var/lib/docker/overlay2/c4f1d8b656d016b4c2b34468bedd2beeec3fd9817806f760a80f932c23e8fd02/diff:/var/lib/docker/overlay2/f7bf6053db884d714da885e224b0b59829fb390fb5a86e2937a71064ab11b10d/diff:/var/lib/docker/overlay2/8eb6175129c5ba986ca01bebd66a427c999f16f97205fd7e244b4804a0056ab1/diff",
"MergedDir": "/var/lib/docker/overlay2/75c628634224ff5c26fb79b11189837a1a4d2be18ef7d95d748894c819cfe227/merged",
"UpperDir": "/var/lib/docker/overlay2/75c628634224ff5c26fb79b11189837a1a4d2be18ef7d95d748894c819cfe227/diff",
"WorkDir": "/var/lib/docker/overlay2/75c628634224ff5c26fb79b11189837a1a4d2be18ef7d95d748894c819cfe227/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:67ecfc9591c8a90936d6f1c27a3b0c907ea7d62a4d8255a3f34691344e8243f2",
"sha256:096401f81d2cc1a314d933b976cd8092696cd2335877fcc6b7d38415921d8f37",
"sha256:3c353031df8b38e7bad841b6c43e95e52163ca872589d6b6d4b1e1d5d9d76364",
"sha256:d8cb0457f31e8062fc574eac76bb69f4d9d75367b947a15d01d9d19e0ec80bd1",
"sha256:452ea71a57ff989e8cb297ab455a540b24c58a992ed2ded887cafa567ca56274",
"sha256:60477422128d0fe35e956246c664979c58b7e0b10433b52c31a6f94319a24ef7",
"sha256:718ed803b23941612a0ed385b7ec3cef672019aeaa96dc892e5cd3ce83cdb53b",
"sha256:7fbeee2bc706e05799634d53dec201c7a24d2d36c45814c7708c2ebf7497bcae",
"sha256:14577980fc3069fff3b7b9f47371a954918a13b823fe3724dd353cdbd5ae032f",
"sha256:0a0b7d4fcd0cebd90d190fa53cd5c9b7d90dd67d7187da35c041b6a6ea5f565d",
"sha256:b8a5eeccd82681297d4ae57415cd86243f0047bd9b5099b584908fa7461667f9"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
3.运行容器
安装完成后,我们可以使用以下命令来运行 mysql 容器:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ 参数说明 ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
-i 即 :(interaction:交互) 以交互模式运行容器,通常与 -t 同时使用;
-t 即 :(terminal:终端) 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
–name=“mysql-test”: 为容器指定一个名称(随意指定);
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。 MYSQL_ROOT_PASSWORD=root:设置 MySQL 服务 root 用户的密码。
-e 即 :(environment:环境) MYSQL_ROOT_PASSWORD=root 设置环境变量;
命令最后的 mysql:5.6是库标签,就是 repository : tag
docker run -itd --name jsh_mysql -p 3306:3366 -e MYSQL_ROOT_PASSWORD=‘Xxyua&as12LLb’ -d mysql:8.0.20
参数 -p 3306:3366 用于将容器端口映射到宿主机端口。这里的 3306:3366 表示将容器的 3366 端口映射到宿主机的 3306 端口。
容器端口(Container Port):3366 - 这是 MySQL 服务在容器内部监听的端口。
宿主机端口(Host Port):3306 - 这是您希望从宿主机或其他网络上的客户端访问 MySQL 服务时使用的端口。
4.安装成功
通过 docker ps
命令查看是否安装成功:
5.服务重启后docker重启mysql
列出docker中的容器 :docker ps -a
[root@centos-7-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c1ef6c930a0 mysql:5.6 "docker-entrypoint..." 24 hours ago Up 24 hours 0.0.0.0:3306->3306/tcp mysql-test
启动mysql:docker start
[root@centos-7-1 ~]# docker start 1c1ef6c930a0
1c1ef6c930a0
提示 |
---|
本人以抱着学习的态度去分享,以上内容如有雷同,不胜荣幸! |