Docker

目录

一、Docker入门

1、三个基本概念

2、拉取HelloWorld镜像

二、Docker 仓库、镜像、容器详解

仓库,镜像,容器的关系

1、Docker镜像

1. 查看本地镜像列表

2.查找镜像

I.通过Docker Hub 进行查找

II.使用 docker search 命令来搜索镜像

3.拉取镜像

4.删除镜像

5.更新镜像

6.生成镜像

7.镜像标签

8.镜像导出与导入

I.镜像导出

II.镜像导入

总结:是否会覆盖?

2、容器

1.启动容器

交互式启动容器

后台运行容器

2.查看容器

3.停止与重启容器

停止

重启

4.进入容器

1. docker exec -it(推荐方式)

2. docker attach(不推荐常规使用)

5.容器导入导出

导出

导入

6.强制删除容器

7.清理已停止的容器

8.容器别名

9.容器错误日志

三、具体应用实例

1、拉取nginx镜像

2、后台运行容器,并映射端口

3、通过映射端口访问部署的应用

自定义映射端口

查看容器端口映射

1、通过docker ps 查看

2、通过docker port 查看

查看容器内部进程

获取docker 镜像、容器、卷等配置信息

与其它容器(DB容器)互联

1、容器与容器单独互联

1.创建一个新的数据库容器

2.创建应用容器并与数据库容器进行互联

2、通过创建bridge网络(推荐)

1.安装好docker后,运行如下命令创建bridge网络:docker network create testnet

2.查询到新创建的bridge testnet

3.运行容器连接到testnet网络

4.从一个容器ping另外一个容器

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.更新镜像

当我们在以下场景时:

  1. 你在容器中修改了配置或安装了新软件

  2. 想将当前容器状态保存为一个新镜像

  3. 以后可以直接用这个新镜像创建相同的环境

首先,运行容器

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
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    子笙—望舒

    整理编写不易,希望能支持支持

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值