zoukankan      html  css  js  c++  java
  • docker创建redis镜像

    pull redis 镜像


    创建redis的镜像有几种方式,可以直接从仓库中拉取,也可以采用dockerfile文件自己编译创建。 
    基于已有的redis镜像,docker可以采用run,或者create->start两种方式创建容器。

    1.docker run

    在构建镜像,要提供访问redis的端口,-p为端口映射的 
    1)创建并启动,设置端口映射

    [root@vm000949 ~]# docker run -p 127.0.0.1:6379:6379 -it --name="my-redis-server" -d redis 
    d66037100bddcd230e0c9955bdfb9b0dbae8ce4028a81534e1693ab95737c90a
    [root@vm000949 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    d66037100bdd        redis               "docker-entrypoint.sh"   6 seconds ago       Up 5 seconds        127.0.0.1:6379->6379/tcp   my-redis-server

    docker run:重新创建一个容器并运行命令,语法如下: 
    Docker run [OPTIONS] IMAGES [COMMAND][ARG] 
    通常用的OPTIONS为: 
    -t 为容器分配一个伪输入终端 
    -I 以交互模式运行容器 
    -name 为容器指定名称 
    -d 以后台模式运行 
    -p 端口映射

    查看端口映射情况,其中e24b3e0a7df0为redis的容器。

    [root@vm000949 ~]# docker port e24b3e0a7df0
    6379/tcp -> 127.0.0.1:6379
    

    2)进入redis容器里面

    docker exec -it e24b3e0a7df0 redis-cli
    127.0.0.1:6379> set day newDay
    OK
    127.0.0.1:6379> get day
    "newDay"
    127.0.0.1:6379> exit

    docker exec语法如下:

    Docker exec [OPTIONS] CONTAINER COMMAND [ARG]

    其中OPIONS包括: 
    -d :分离模式: 在后台运行 
    -i :即使没有附加也保持STDIN 打开 
    -t :分配一个伪终端 
    这就是一个简单的创建过程,直接run就是一个创建并启动的容器。

    查看当前虚拟机上的端口映射情况:

    [root@vm000949 ~]# netstat -apn|grep 6379
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2270/docker-proxy-c 

    上述是直接采用run方式,而更为正确的生命周期应该为: 
    create->start->exec 
    如果容器已经停止了,直接start,然后exec。采用run将会根据命令再创建一个docker 
    比如要重新开始,需要删除现在这个容器

    [root@vm000949 ~]# docker rm 695d5f6afc27 
    Error response from daemon: You cannot remove a running container 695d5f6afc27415126a40384a868c751ba635df2d4d7fb578424bc1bd9167166. Stop the container before attempting removal or use -f

    提示不能删除一个正在运行的容器。

    [root@vm000949 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    695d5f6afc27        redis               "docker-entrypoint.sh"   14 minutes ago      Up 8 minutes        127.0.0.1:6379->6379/tcp   ecstatic_lamarr

    将该容器stop,并删除容器

    [root@vm000949 ~]# docker stop 695d5f6afc27
    695d5f6afc27

    2.docker create

    创建容器的语法与run相似

    [root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server" -d redis
    unknown shorthand flag: 'd' in -d
    See 'docker create --help'.

    如果直接将run修改为create,会报错,在没有开始运行无法执行-d参数

    [root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server"  redis
    Error response from daemon: Conflict. The name "/my-redis-server" is already in use by container d66037100bddcd230e0c9955bdfb9b0dbae8ce4028a81534e1693ab95737c90a. You have to remove (or rename) that container to be able to reuse that name.

    提示上次run创建的容器没有删除

    [root@vm000949 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@vm000949 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS               NAMES
    d66037100bdd        redis               "docker-entrypoint.sh"   3 minutes ago       Exited (0) About a minute ago                       my-redis-server
    
    [root@vm000949 ~]# docker rm d66037100bdd
    D66037100bdd

    删除后重新创建:

    [root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server"  redis
    2596bd8886b4095dc80e23315a5e073addb50fc9aa959456e026e6ca31676d28
    [root@vm000949 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
    2596bd8886b4        redis               "docker-entrypoint.sh"   8 seconds ago       Created                                       my-redis-server

    启动容器:

    [root@vm000949 ~]# docker start my-redis-server
    my-redis-server
    [root@vm000949 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                      NAMES
    2596bd8886b4        redis               "docker-entrypoint.sh"   About a minute ago   Up 3 seconds        127.0.0.1:6379->6379/tcp   my-redis-server
    进入容器:
    [root@vm000949 ~]# docker exec -it my-redis-server redis-cli
    127.0.0.1:6379> exit

    从上面两种方式可以看出create->start->exec的生命周期比较的直观。其中,Docker run命令包括create和start两个生命周期。

    最后:docker的日志文件放在/var/lib/docker/containers/下,每个docker都有对应的文件,cat 其-json.log文件获得日志文件.在磁盘空间中,日志文件也许会占用很大的空间,就需要进行清理。

  • 相关阅读:
    HDU5976 Detachment (预处理前缀和+贪心+逆元)
    FJUT OJ 2584 QAQ的变强魔咒(KMP)
    HDU1867 A + B for you again(KMP)
    POJ 1469 COURSES(二分图模板题)
    HihoCoder
    HDU 3336 Count the string (基础KMP)
    POJ2185 Milking Grid(KMP)
    144.链表库以及迭代算法原理
    143.vector模板库
    152.字符串模板库
  • 原文地址:https://www.cnblogs.com/gwyy/p/8995831.html
Copyright © 2011-2022 走看看