Docker 快速入门


#Docker


安装

Docker 安装

操作

拉取镜像到本地

$ docker pull ubuntu:18.04

查看本地镜像列表

$ docker images

执行示例:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               775349758637        3 weeks ago         64.2MB

为镜像增加标签

可以通过镜像ID,或者 仓库名+标签 指定新仓库名和新标签。

$ docker tag 47b19964fb50 ubuntu:18.04-v2
$ docker tag ubuntu:18.04 ubuntu:18.04-v3
$ docker tag ubuntu:18.04 new-ubuntu:18.04

再次查看本地所有镜像:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
new-ubuntu          18.04               47b19964fb50        3 days ago          88.1MB
ubuntu              18.04               47b19964fb50        3 days ago          88.1MB
ubuntu              18.04-v2            47b19964fb50        3 days ago          88.1MB
ubuntu              18.04-v3            47b19964fb50        3 days ago          88.1MB

可以看到,这几个镜像的 ID 是相同的。其实就是同一个镜像,但是 仓库名和标签不同。

用仓库+标签删除镜像

在上面的例子里,我们为 ubuntu 18.04 镜像创建了多个仓库名+标签 ,我们也可以删除 仓库名+标签 的形式删除镜像。如果一个镜像有多个仓库名+标签 ,需要全部删除后,才会真正将镜像删除。下面是一个例子,因为镜像没有被删除,所以命令执行结果是Untagged 。

$ docker image rm new-ubuntu:18.04
Untagged: new-ubuntu:18.04

用镜像ID删除镜像

使用 docker image rm <image id> 可以删除镜像。例如,ID 为 47b19964fb50 的镜像有两个仓库名+标签:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
new-ubuntu          18.04               47b19964fb50        3 days ago          88.1MB
ubuntu              18.04               47b19964fb50        3 days ago          88.1MB

尝试删除,但是删除失败:

$ docker image rm 47b19964fb50
Error response from daemon: conflict: unable to delete 47b19964fb50 (must be forced) - image is referenced in multiple repositories

因为有多个仓库名+标签指向同一个镜像,所以要用 -f 参数强制删除:

$ docker image rm -f 47b19964fb50

执行后,docker images 执行结果中便没有47b19964fb50 这个镜像了。

也可以用下面的命令删除:

$ docker rmi -f 47b19964fb50

运行交互式容器

$ docker run -i -t ubuntu:18.04 /bin/bash

执行后,docker 基于镜像 ubuntu:18.04,并让容器运行,我们会进入了该容器的bash命令行中,可以执行一系列的 Linux 命令:

$ docker run -i -t ubuntu:18.04 /bin/bash
root@5511d00814e8:/# echo $HOSTNAME
5511d00814e8
root@5511d00814e8:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

以后台模式运行交互式容器

加上 -d 即可。

$ docker run -itd ubuntu:18.04 /bin/bash

查询有哪些运行中的容器

$ docker ps

或者下面的命令:

$ docker container ls

运行结果示例:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5511d00814e8        ubuntu:18.04        "/bin/bash"         2 minutes ago       Up 2 minutes                            pensive_khayyam

启动容器时指定名称

$ docker run -i -t --name my-ubuntu ubuntu:18.04 /bin/bash

启动后,新打开一个终端查询有哪些运行中容器:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
aa2387a66708        ubuntu:18.04        "/bin/bash"              10 seconds ago      Up 8 seconds                                                               my-ubuntu

可以看到容器的名字是 my-ubuntu

查询所有容器

docker ps -a

或者下面的命令:

$ docker container ls -a

执行示例:

▶ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
5511d00814e8        ubuntu:18.04        "/bin/bash"              2 minutes ago       Up 2 minutes                                         pensive_khayyam
790d4e60e4b3        mysql:5.7           "docker-entrypoint.s…"   2 months ago        Created

关闭/启动/重启容器

我们通过下面的指令可以启动一个容器:

$ docker run -i -t ubuntu:18.04 /bin/bash

进入容器的 bash 后,执行 exit ,容器便会结束执行。当然,这仅限于执行bash命令的容器。更通用的关闭容器的做法是:

$ docker stop 75195dc223e9

启动容器:

$ docker start 75195dc223e9

重启容器:

$ docker restart 75195dc223e9

75195dc223e9 容器执行的命令是/bin/bash。但是重启后,不会重新进入 bash 交互界面。我们可以用 attach 命令连接到启动的容器中:

$ docker attach 75195dc223e9

删除容器

$ docker container rm  <container id>

或者

$ docker containerrm <container name>

使用 attach 与容器执行命令的标准输入输出交互

$ docker attach <container-id>

示例:

# 以后台模式启动一个容器
$ docker run -ith ubuntu:18.04 /bin/bash
5511d00814e8
# attach 正在运行的 /bin/bash 命令
$ docker attach 5511d00814e8

上面的地方,有一个点是,attach 到的是正在运行的那个 /bin/bash 进程。

如果我们在两个终端都attach 到该容器,会发现在终端1的输入数据,会在终端2同步显示。

使用 exec 进入容器命令行

exec 会打开一个新的进程。

$ docker exec -it <container-id>  /bin/bash

示例:

# 启动一个容器
$ docker start 790d4e60e4b3
# 进入 bash
$ docker exec -it <container-id>  /bin/bash

查看命令帮助

命令后增加 --help 即可。

示例1:

$ docker --help

示例2:

$ docker attach --help

搜索镜像

$ docker search <text>

示例:

$ docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   8870                [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3115                [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   657                                     [OK]

搜索镜像的 tag

去官网查询 https://hub.docker.com/

docker-compose

文档: https://docs.docker.com/compose/

实战1:使用 docker-compose 搭建 mysql 5.6 服务

创建目录mysql-5.6,在目录下创建文件 docker-compose.yml ,内容如下:

version: '2'
services:
    mysql:
        image: mysql:5.6.46
        container_name: mysql-5.6.46
        environment:
            - MYSQL_ROOT_PASSWORD=123456
        ports:
            - "127.0.0.1:3306:3306"
            - "127.0.0.1:33060:33060"

以下命令在 mysql-5.6 目录中执行。

启动:

$ docker-compose up

启动后,可以通过宿主机的 127.0.0.1:3306 端口访问 MySQL 服务。

以后台模式启动:

$ docker-compose up -d

停止:

$ docker-compose stop


( 本文完 )