目录
1.安装好docker后,运行如下命令创建bridge网络:docker network create testnet
5.若访问容器中服务,可以使用这用方式访问 <网络别名>:<服务端口号>
一、Docker入门
1、三个基本概念
- 镜像(Image):Docker镜像(Image)里包含了已打包的应用程序及其所依赖的环境。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看作跟maven仓库作用一样,maven仓库保存项目依赖,这里仓库用来保存镜像。
2、拉取HelloWorld镜像
#拉取最新hello-world镜像
docker pull hello-world:latest
#查看所有镜像
docker images
二、Docker 仓库、镜像、容器详解
仓库,镜像,容器的关系
1、Docker镜像
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
1. 查看本地镜像列表
docker images
REPOSITORY | 表示镜像的仓库源 |
TAG | 镜像版本(latest表示最新的) |
IMAGE ID | 镜像ID |
CREATED | 镜像创建时间 |
SIZE | 镜像大小 |
2.查找镜像
I.通过Docker Hub 进行查找
Explore Docker's Container Image Repository | Docker Hub
II.使用 docker search 命令来搜索镜像
docker search 镜像
我这里执行会超时,下方是网上找的成功案例
root@hcss-ecs-999c:/# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9132 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3233 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 676 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 68
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 62
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r… 41 [OK]
bitnami/mysql Bitnami MySQL Docker Image 35 [OK]
tutum/mysql Base docker image to run a MySQL database se… 34
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 29 [OK]
prom/mysqld-exporter 26 [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 24
centos/mysql-56-centos7 MySQL 5.6 SQL database server 19
circleci/mysql MySQL is a widely used, open-source relation… 18
mysql/mysql-router MySQL Router provides transparent routing be… 14
arey/mysql-client Run a MySQL client from a docker container 13 [OK]
databack/mysql-backup Back up mysql databases to... anywhere! 10
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron tas… 5 [OK]
genschsa/mysql-employees MySQL Employee Sample Database 4 [OK]
devilbox/mysql Retagged MySQL, MariaDB and PerconaDB offici… 2
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]
jelastic/mysql An image of the MySQL database server mainta… 1
monasca/mysql-init A minimal decoupled init container for mysql 0
widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 0 [OK]
NAME | 镜像仓库源的名称 |
DESCRIPTION | 镜像的描述 |
OFFICIAL | 是否 docker 官方发布 |
STARS | 类似 Github 里面的 star,表示点赞、喜欢的意思。 |
AUTOMATED | 自动构建 |
3.拉取镜像
docker pull 镜像
root@hcss-ecs-999c:/# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
cea172a6e83b: Pull complete
fa811e9a869e: Pull complete
47a2982daa21: Pull complete
634d7076afe3: Pull complete
aa8a3958f09f: Pull complete
84e4e5ea3754: Pull complete
2275c0ff11a0: Pull complete
2792ea2d4e0e: Pull complete
f488b2cd8494: Pull complete
9451290759df: Pull complete
Digest: sha256:7839322bd6c3174a699586c3ea36314c59b61b4ce01b4146951818b94aef5fd7
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
root@hcss-ecs-999c:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 4b2d796bebc2 2 days ago 859MB
hello-world latest 74cc54e27dc4 2 months ago 10.1kB
4.删除镜像
docker rmi 镜像名/镜像ID
root@hcss-ecs-999c:/# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:7e1a4e2d11e2ac7a8c3f768d4166c2defeb09d2a750b010412b6ea13de1efb19
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72
5.更新镜像
当我们在以下场景时:
-
你在容器中修改了配置或安装了新软件
-
想将当前容器状态保存为一个新镜像
-
以后可以直接用这个新镜像创建相同的环境
首先,运行容器
root@hcss-ecs-999c:/# docker run -it hello-world
其次,生成新的镜像副本,以此达到更新镜像
root@hcss-ecs-999c:/# docker commit -m="update test" -a="mobai" 0c859190ac7b mobai/hello-world:v1.0.1
sha256:d54b0c303fe83d39a538460485ead0ab4d017396ec8355cf7188383a2355a8d4
root@hcss-ecs-999c:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mobai/hello-world v1.0.1 d54b0c303fe8 16 seconds ago 10.1kB
mysql latest 4b2d796bebc2 2 days ago 859MB
hello-world latest 74cc54e27dc4 2 months ago 10.1kB
docker commit |
将容器的当前状态保存为一个新的镜像 |
-m="update test" | 添加提交信息(类似 git commit -m),说明这次更新的内容 |
-a="mobai" | 指定镜像的作者(author) |
0c859190ac7b | 容器的 ID(也可以是容器名称) |
mobai/hello-world:v1.0.1 | 新镜像的仓库名(mobai/hello-world)和标签(v1.0.1) |
6.生成镜像
创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
然后使用docker build生成镜像
docker build -t [镜像名]:[标签] [Dockerfile路径]
例如:
docker build -t mobai/hello-world:v2.0.1 .
-t |
指定要创建的目标镜像名 |
. |
Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径 |
7.镜像标签
置镜像的Tag,类似于Git中tag?我们可以使用 docker tag 命令,为镜像添加一个新的标签
root@hcss-ecs-999c:/# docker tag mobai/hello-world:v1.0.1 mobai/hello-world:v1.0.2
root@hcss-ecs-999c:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mobai/hello-world v1.0.1 d54b0c303fe8 22 minutes ago 10.1kB
mobai/hello-world v1.0.2 d54b0c303fe8 22 minutes ago 10.1kB
mysql latest 4b2d796bebc2 2 days ago 859MB
hello-world latest 74cc54e27dc4 2 months ago 10.1kB
注意:
- docker tag 原镜像名称:TAG 镜像源名:新的标签名(TAG)。
- 使用 docker images 命令可以看到,ID为d54b0c303fe8的镜像多一个v1.0.2标签。
8.镜像导出与导入
I.镜像导出
docker save > 镜像.tar 镜像ID
root@hcss-ecs-999c:/# ll
-rw-r--r-- 1 root root 877983232 Apr 17 16:45 mysql-latest.tar
II.镜像导入
其中-i
或者<
表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
docker load < 镜像.tar
root@hcss-ecs-999c:/# docker load < mysql-latest.tar
Loaded image ID: sha256:4b2d796bebc27d70aca324403b4f16bca96eba549b39633c9ba55f2bc37bf85e
root@hcss-ecs-999c:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mobai/hello-world v1.0.1 d54b0c303fe8 33 minutes ago 10.1kB
mobai/hello-world v1.0.2 d54b0c303fe8 33 minutes ago 10.1kB
mysql latest 4b2d796bebc2 2 days ago 859MB
hello-world latest 74cc54e27dc4 2 months ago 10.1kB
在 Docker 中,如果导入的镜像与已有镜像具有相同的镜像 ID,它们实际上是同一个镜像,Docker 不会重复存储,但会根据标签(tag)的情况进行不同的处理。
总结:是否会覆盖?
场景 | 结果 |
---|---|
相同镜像 ID,不同标签 | 新增标签,不覆盖原有镜像 |
相同镜像 ID 和标签 | 覆盖标签引用,但镜像数据不变(因为 ID 相同) |
docker load 相同镜像 |
跳过导入,仅新增标签(如有) |
docker pull 相同镜像 ID |
跳过下载,提示已是最新 |
可以根据场景来选择导入导出
- 若是只想备份images,使用save、load即可
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import
2、容器
1.启动容器
交互式启动容器
docker run -it 镜像
-it |
可以连写的,表示 -i -t |
-t |
在新容器内指定一个伪终端或终端 |
-i |
允许你对容器内的标准输入 (STDIN) 进行交互 |
root@hcss-ecs-999c:/# docker run -it hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docke