• Docker的容器使用与连接-Window


    启动容器

    启动容器之前需要先拉取镜像,然后通过 run 命令启动容器,同一个镜像可以启动多个容器,只要执行多次 run 命令就行了。我们这边启动 centos 的镜像。

    PS D:> docker run -it centos /bin/bash
    [root@6c7369854385 /]#

    参数说明:

    -i: 交互式操作

    -t: 终端

    centos : centos 镜像

    /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

    要退出终端,直接输入 exit。run 命令相当于执行了 create 和 start 命令。

    上面的命令是前台运行的,运行后直接进入容器内,如果退出了容器就变为已退出状态,可以通过增加 -d 参数表示后台运行,这样不会在执行 run 命令后进入容器内操作。

    对于停止的容器可以使用 start 命令启动。

    PS D:> docker start 5bdc26bb5efa

    或者通过 restart 命令重启容器

    PS D:> docker restart 5bdc26bb5efa

    查看容器

    通过 ps 命令可以查看容器列表

    PS D:> docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    6c7369854385        centos              "/bin/bash"         3 minutes ago       Exited (0) 53 seconds ago                       angry_lichterman

    -a 表示显示所有的容器,不管任何状态。如果不加 -a 默认显示运行中的。

    容器总过有7种状态 created(已创建)、restarting(重启中)、running(运行中)、removing(删除中)、paused(已暂停)、exited(已停止 )和dead(已死亡)。

    停止容器

    停止容器使用 stop 命令,加上容器 id

    PS D:> docker stop 5bdc26bb5efa

    删除容器

    删除容器用 rm 命令

    PS D:> docker rm 5bdc26bb5efa

    或者通过以下命令删除所有的已停止的容器

    PS D:> docker container prune

    进入容器

    通过 run 命令我们创建了容器,我们可以通过 exec 或 attach 命令进入容器,在容器内部指定操作。两者有个区别,就是通过 attach 命令进入容器后通过 exit 退出,容器将会变为 exited 状态,exec 不会。

    PS D:> docker exec -it 5bdc26bb5efa /bin/bash
    PS D:> docker attach 5bdc26bb5efa

    通过上面用法也可以看出,attach 不会在容器中创建进程执行额外的命令,只是附着到容器上。exec会在运行的容器上创建进程执行新的命令。

    容器的导出和导入

    如果要导出本地某个容器,可以使用 export 命令都出容器快照

    PS D:> docker export 5bdc26bb5efa > exportCentos.tar

    默认导出到当前位置,上述命令表示导出到 D 盘。

     导入快照可以用 import 命令从容器快照文件中再导入为镜像,以下实例将快照文件exportCentos.tar 导入到镜像 xu/centos:v1

    PS D:> cat exportCentos.tar | docker import - xu/centos:v1

    导入容器快照可以是一个路径,也可以是一个 URL

    容器连接-端口映射

    前面我们用 run 命令启动了容器,比如我们启动了一个 redis 的容器,那么我们需要访问这个容器来存储我们的缓存,可以通过 -P 或 -p 参数来指定端口映射。

    -P :是容器内部端口随机映射到主机的高端口。

    -p : 是容器内部端口绑定到指定的主机端口和主机的网络地址。

    使用 -P :

    PS D:> docker run -d -P redis

    查看容器可以看到容器的6379端口绑定了主机的32770端口

    PS D:> docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                            PORTS                     NAMES
    01b6077295ac        redis               "docker-entrypoint.s…"   3 seconds ago        Up 3 seconds                      0.0.0.0:32770->6379/tcp   modest_golick

    使用 -p,指定了主机端口为6666,ip为127.0.0.1,容器端口为 tcp ,后面的 tcp 表示绑定 tcp 端口,默认就是 tcp ,还可以设置为 udp :

    PS D:> docker run -d -p 127.0.0.1:6666:6379/tcp redis

    通过 port 命令可以查看端口绑定情况

    PS D:> docker port 8b7db8c10c85
    6379/tcp -> 127.0.0.1:6666

     我们可以用 Redis Desktop Manager 测试连接下,可以看到如下连接成功啦。

    容器连接-局域网连接

    除了端口映射,我们还可以建立一个网络,将容器加入到这个网络中,这样容器之间可以在这个网络中相互访问,我们先建立这个网络

    PS D:> docker network create -d bridge test-net
    5cb11e23cb3ad1bfea61452f1448dd3a67b34680dc1c5655203211fbe4c777ce

    参数说明:

    -d:参数指定 Docker 网络类型,有 bridge、overlay。其中 overlay 网络类型用于 Swarm mode,此处忽略。

    然后通过 network 命令查看网络

    PS D:> docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    c594c3f53367        bridge              bridge              local
    a98ee54f88d4        host                host                local
    3d3d4b7c007a        none                null                local
    5cb11e23cb3a        test-net            bridge              local

     我们可以通过如下语句删除网络

    PS D:> docker network rm test-net

    我们在运行容器的时候可以连接到指定的网络,建立两个 redis 容器

    PS D:> docker run -itd --name redis_1 --network test-net redis
    PS D:> docker run -itd --name redis_2 --network test-net redis

    我们进入 redis_1 容器添加一个键值对,然后通过 redis_2 容器连接 redis_1 容器上的 redis 获取值,如下:

    PS D:> docker exec -it redis_1 /bin/bash
    root@6bd2da3b7854:/data# redis-cli -h redis_1
    redis_1:6379> set mykey myvalue
    OK
    redis_1:6379> get mykey
    "myvalue"
    PS D:> docker exec -it redis_2 /bin/bash
    root@6bd2da3b7854:/data# redis-cli -h redis_1
    redis_1:6379> get mykey

    可以看到 redis_1 和 redis_2 是相互连通的

    容器信息

    通过 inspect 命令可以看到容器的信息

  • 相关阅读:
    POJ 1061
    LightOJ 1104
    扩展欧几里得算法
    2015 HUAS Summer Trainning #5 E
    2015 HUAS Summer Trainning #5 C
    2015 HUAS Summer Trainning #5 B
    2015 HUAS Summer Trainning #5 A
    2015 HUAS Summer Trainning #4 D
    2015 HUAS Summer Trainning #4 C
    2015 HUAS Summer Trainning #4 B
  • 原文地址:https://www.cnblogs.com/xwc1996/p/14120898.html
Copyright © 2020-2023  润新知